MonkeyDev安裝與MonkeyApp使用

MonkeyDev是一個極為方便的逆向調(diào)試平臺,集眾家所長
主要包含四個模塊
Logos Tweak -- 使用theos提供的logify.pl工具將.xm文件轉(zhuǎn)成.mm文件進行編譯,集成了Cydia Substrate,它的主要作用是針對OC方法、C函數(shù)以及函數(shù)地址進行HOOK操作。
CaptainHook Tweak -- 使用CaptainHook提供的頭文件進行OC函數(shù)的Hook以及屬性的獲取。
Command-line Tool -- 可以直接創(chuàng)建運行于越獄設(shè)備的命令行工具。
MonkeyApp -- 自動給第三方應(yīng)用集成Reveal、Cycript和注入dylib的模塊,支持調(diào)試dylib和第三方應(yīng)用,只需要準備一個砸殼后的ipa或者app文件即可。

準備

  1. 安裝MonkeyDev
  2. Logos語法介紹

使用

  1. 新建MonkeyDev項目,選擇MonkeyApp,輸入工程名,下一步即可


    new project
  2. 將砸殼后的ipa,拖入工程中
    copy ipa

    注:以前可以通過PP助手下載,越獄應(yīng)用即可獲得砸殼后的ipa,但是現(xiàn)在PP助手已不復存在!只有通過自己來砸殼了,獲取砸殼ipa的方法:
    frida砸殼
    Clutch砸殼
    dumpdecrypted砸殼
    其中,frida砸殼成功率最高,但是它的環(huán)境配置比較麻煩;Clutch環(huán)境配置簡單,砸殼成功率一般;dumpdecrypted最后導出的是decrypt文件,需要進行其他處理。
  3. run起來,就可以完成重簽名,讓他人之物變?yōu)樽约旱?,然后進行態(tài)調(diào)試,動態(tài)調(diào)試需要使用LLDB的高級用法和Chisel
  • 文件擴展名的意義,x代表這個文件支持 Logos 語法
    .x 將由Logos處理,然后進行預處理并編譯為objective-c。
    .xm 將由Logos處理,然后進行預處理并編譯為objective-c ++。

Logos語法

  • %hook - 指定需要hook的類,必須以%end結(jié)尾
  • %log - hook內(nèi)部使用,將函數(shù)的類名及參數(shù)寫入syslog中,可以追加打印內(nèi)容%log[,.....]
  • %orig - hook內(nèi)部使用,執(zhí)行被hook的函數(shù)的原始代碼,可以使用%orig改變原始函數(shù)參數(shù)
  • %group - 將%hook分組,便于代碼管理,必須以%end結(jié)尾
  • %init - 初始化某個%group,必須在%hook或%ctor中使用;如果帶參數(shù),則初始化指定的group,如果不帶參數(shù),則初始化_ungrouped;%group只有調(diào)用了%init后才會被初始化
  • %ctor - Tweek的constructor,完成初始化工作;如果沒有定義,Theos則會自動生成一個%ctor,并在其中調(diào)用%init(_ungrouped)
  • %new - 在hook內(nèi)部使用,給一個現(xiàn)有的class添加新函數(shù)
  • %c - 根據(jù)類名獲取一個類

小試牛刀-動態(tài)調(diào)試釘釘,并將帳號密碼展示到頁面上

  • 將砸過殼的ipa的頭文件導出
class_dump -H .app路徑 -o DingTalkHeaders

通過工具打開頭文件文件夾,以備后用


DingTalk 頭文件
  • 運行MonkeyDev Demo,進入帳號密碼登錄頁


    帳號密碼登錄頁
  • 點擊Debug View Hierarchy


    Debug View Hierarchy

    進入Debug View

    找到頁面的類,以及當前對象的內(nèi)存地址

  • 通過類名DTAccountPasswordViewController,到頭文件去搜索


    DTAccountPasswordViewController

    這里我們看到了想要hook的帳號和密碼的view,下面以密碼為例

  • 先來看下密碼輸入框的類結(jié)構(gòu),在頭文件中搜索DTLoginPasswordInputView


    DTLoginPasswordInputView

    DTPasswordTextField

    這樣一來密碼框的繼承關(guān)系就很明顯了,我們在DTAccountPasswordViewController中找到passwordView,再在passwordView中找到passwordTextField,最后打印它的text即可,下面我們通過lldb來驗證下


    lldb驗證

    帳號的hook步驟與密碼一樣!
    這里在點擊登錄時做一個展示帳號密碼的操作,所以我們需要看下登錄按鈕的觸發(fā)了什么方法,找到登錄按鈕的內(nèi)存地址,并使用LLDB高級指令pactions,查看它的target和action
    pactions

    現(xiàn)在頭文件中看下DTAccountPasswordViewController這個類的loginButtonPressed的方法


    loginButtonPressed

    接下來我們就可以hookloginButtonPressed
    下面看下logos代碼的實現(xiàn)
// See http://iphonedevwiki.net/index.php/Logos

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface DTAccountPasswordViewController:UIViewController
- (void)showPassword:(NSString *) msg;
@end
%hook DTAccountPasswordViewController
- (void)loginButtonPressed:(id)arg1 {
    //獲取帳號
    NSString *phone = [[[self valueForKey:@"phoneView"] valueForKey:@"_mobileInputView"] valueForKey:@"text"];
    //獲取密碼內(nèi)容
    NSString *pwd = [[[self valueForKey:@"passwordView"] valueForKey:@"passwordTextField"] valueForKey:@"text"];
    [self showPassword:[NSString stringWithFormat:@"%@??????%@",phone, pwd]];
    //%orig;
}

%new
- (void)showPassword:(NSString *) msg{
    UIView *bgView = [[UIView alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    bgView.backgroundColor = [UIColor clearColor];
    [[[UIApplication sharedApplication] keyWindow] addSubview:bgView];
    UILabel* lab = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 300, 40)];
    lab.layer.cornerRadius = 4;
    lab.backgroundColor = [UIColor orangeColor];
    lab.text = msg;
    lab.textColor = [UIColor whiteColor];
    lab.textAlignment = NSTextAlignmentCenter;
    lab.alpha = 0.8;
    lab.center = bgView.center;
    [bgView addSubview:lab];

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [bgView removeFromSuperview];
    });
}

%end

重新運行,看下效果


運行效果

至此,我們就完成了帳號密碼的hook,真是牛批

生活如此美好,今天就點到為止。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容