14倦淀、MonkeyDev的使用 --- 安裝&代碼注入

我們之前在9、應(yīng)用重簽名原理10卒暂、代碼的注入里面分別探索了應(yīng)用的重簽名和代碼的注入啄栓。這兩篇文章里面都是通過我們手動(dòng)的操作去完成的。這里推薦給大家一款自動(dòng)重簽名和代碼注入的工具:MonkeyDev也祠。MonkeyDev的鏈接

MonkeyDev的安裝

  • MonkeyDev是一款Xcode的插件昙楚,在逆向中幫助我們?nèi)ブ睾灻麘?yīng)用和代碼的注入。代碼的注入使用的Logos诈嘿。下面我們來簡單介紹一下MonkeyDev的安裝堪旧。
  1. 首先在Wiki里面有詳細(xì)的安裝教程(友好的中文文檔)。

    image

    image

  2. 在使用Xcode12奖亚,并且執(zhí)行安裝命令的時(shí)候淳梦,可能會(huì)遇到一個(gè)最常見的一個(gè)問題

    image

    遇到的問題如下:

Creating symlink to Xcode templates...
Modifying Bash personal initialization file...
File /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Package Types.xcspec not found

遇到這個(gè)問題,可以在Issues中的第266個(gè)問題中找到答案:

image

遇到上面的問題執(zhí)行下面的指令就可以了昔字,就是做了一層映射爆袍。

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/PrivatePlugIns/IDEOSXSupportCore.ideplugin/Contents/Resources /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications
  1. 在安裝完畢之后,可能會(huì)遇到Xcode無法打開的情況(打開之后閃退)作郭。這個(gè)時(shí)候卸載Xcode陨囊,從新裝一個(gè)Xcode就可以了;重裝之后就會(huì)發(fā)現(xiàn)夹攒,已經(jīng)可以創(chuàng)建Monkey工程了:
    image

MonkeyDev的使用

  • APP重簽名與安裝
    在成功安裝MonkeyDev之后蜘醋,我們馬上來使用一下。
  1. 首先選擇MonkeyApp咏尝,創(chuàng)建我們自己的MonkeyDev工程压语。
    如果此時(shí)遇到這個(gè)問題:
    image

    這是因?yàn)閷?duì)應(yīng)的文件夾里面缺失了對(duì)應(yīng)的文件闲先,我們只需要找到文件并拷貝進(jìn)指定的文件夾就可以了。(可以參考這里https://github.com/devdawei/libstdc-
  2. 將我們之前用過的ipa包无蜂,拷貝到TargetApp文件夾中:
    image
  3. 然后cmd+R運(yùn)行工程就可以了。運(yùn)行效果如下:
    image

  • MonkeyDev代碼注入
    MonkeyDev的代碼注入在Logos -> xxx.xm文件里面code蒙谓。但是第一次開的工程的時(shí)候斥季,會(huì)發(fā)現(xiàn)該文件無法打開;我們只需要修改右邊信息欄里面的信息就可以了:
    image

    注意:該文件里面使用的是Logos語法
    image

  • Logos語法
    Logos語法是CydiaSubstruct框架提供的一組宏定義累驮。便于開發(fā)者使用驚醒HOOK操作酣倾。語法簡單,功能強(qiáng)大且穩(wěn)定谤专。官網(wǎng)地址
    Logos語法很少躁锡,只有下面這么多:

    image

    強(qiáng)烈建議有需要的同學(xué),仔細(xì)研究一下官網(wǎng)的文檔置侍,里面講的很詳細(xì)映之。下面我們就簡單的介紹一下:

  • Logos語法分為三大類:

    • Block level
      這一類型的指令會(huì)開辟一個(gè)代碼塊,以%end結(jié)束蜡坊。如:%group杠输、%hook%subclass秕衙、%end
    • Top level
      這個(gè)Top level指令不放在Block level中蠢甲。如:%config%hookf据忘、%ctor鹦牛、%dtor
    • Function level
      這一塊的指令就放在方法中。如:%init勇吊、%class曼追、%c%orig萧福、%log
  • 常用語法

  • HOOK某個(gè)類里面的某個(gè)方法

    %hook ClassName
    //對(duì)象方法
    -(void)instanceMethod{
    }
    //類方法
    +(void)classMethod{
    }
    %end
    
  • 為某個(gè)類添加新的方法

    %hook ClassName
    //添加一個(gè)類方法
    %new
    +(void)newClassMethod{
    }
    //添加一個(gè)對(duì)象方法
    %new
    -(void)newInstanceMethod{
    }
    %end
    
  • %group
    用來將代碼分組拉鹃。開發(fā)中HOOK代碼會(huì)很多,這樣方便管理Logos代碼鲫忍。

%group group1
%hook ClassName
......
......
%end
%end
  • %ctor(constructor)
    構(gòu)造函數(shù)膏燕,用于確定加載哪個(gè)組。和%init結(jié)合用
  • %init
    用來初始化某個(gè)組
  • %log
    能夠輸出日志悟民,輸出方法調(diào)用的詳細(xì)信息坝辫。
  • %orig(original)
    這個(gè)是保持原有方法的實(shí)現(xiàn),如果原來的方法有返回值射亏,那么%orig就有返回值近忙。
  • %new
    給某個(gè)類添加方法竭业,在%hook%end中間使用
  • %c
    類似于getClass函數(shù),獲得一個(gè)類對(duì)象及舍。一般用于調(diào)用類方法未辆。

Demo實(shí)戰(zhàn)

首先我們創(chuàng)建一個(gè)DemoAPP,用于HOOK锯玛;當(dāng)然里面也要添加一些用于HOOK的方法咐柜。

image

然后創(chuàng)建我們的Mobkey工程,對(duì)我們的DemoAPP進(jìn)行HOOK攘残;注意這里使用的是DemoAPPAPP包拙友,而不是包里面的可執(zhí)行文件。
image

到這里我們先運(yùn)行一下Monkey工程歼郭,確保HOOK工程可以正常運(yùn)行遗契。
接下里我們?cè)?code>MonkeyDemoDylib.xm文件里面去書寫我們的HOOK代碼。
image

可以看到此時(shí)我們已經(jīng)HOOK成功了病曾。這里注意牍蜂,因?yàn)槲覀兇藭r(shí)HOOK的是ViewController里面的代碼,所以MonkeyDemoDylib.xm里面也要寫成ViewController泰涂。下面我們?nèi)?code>HOOK一下其他的類:
DemoAPP中增加一個(gè)類:
image

然后我們?cè)?code>Monkey工程中去HOOK一下新建的類:

//HOOK ViewController
%group groupVC
@interface ViewController:UIViewController
@end

%hook ViewController

- (void)btnLoginFunc:(id)sender {
    NSLog(@"HOOK成功了");
    %orig;
}

%end
%end

//HOOK Jax 頁面
%group groupJaxVC
@interface JaxViewController:UIViewController
@end

%hook JaxViewController

- (void)jaxBtnFunc {
    NSLog(@"Jax頁面 ---- HOOK成功了");
    %orig;
}

%end
%end

%ctor {
    %init(groupVC);
    %init(groupJaxVC);
}

輸出結(jié)果:

image

這里有一點(diǎn)好主意凰浮,創(chuàng)建的group就一定要使用励烦,否則會(huì)報(bào)錯(cuò)夭禽。比如我們沒有使用groupVC:

%ctor {
    %init(groupJaxVC);
}

就會(huì)報(bào)下面的錯(cuò)誤:


image

總結(jié):以上就是MonkeyDev的安裝和使用城菊。整體來說使用時(shí)起非常的方便。整個(gè)的簽名和安裝的過程和我們自己手動(dòng)操作的過程是一樣的其做。在熟練使用工具的前提下還是要理解底層的操作流程的顶考。


tips:
將MachO文件中的頭文件導(dǎo)出:

///將text可執(zhí)行文件里面的所有頭文件,導(dǎo)出到headers文件夾
class-dump -H test -o headers
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妖泄,一起剝皮案震驚了整個(gè)濱河市驹沿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹈胡,老刑警劉巖渊季,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異罚渐,居然都是意外死亡却汉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門荷并,熙熙樓的掌柜王于貴愁眉苦臉地迎上來合砂,“玉大人,你說我怎么就攤上這事源织◆嫖保” “怎么了微猖?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缘屹。 經(jīng)常有香客問我凛剥,道長,這世上最難降的妖魔是什么轻姿? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任当悔,我火速辦了婚禮,結(jié)果婚禮上踢代,老公的妹妹穿的比我還像新娘。我一直安慰自己嗅骄,他們只是感情好胳挎,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溺森,像睡著了一般慕爬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屏积,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天医窿,我揣著相機(jī)與錄音,去河邊找鬼炊林。 笑死姥卢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的渣聚。 我是一名探鬼主播独榴,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼奕枝!你這毒婦竟也來了棺榔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤隘道,失蹤者是張志新(化名)和其女友劉穎症歇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谭梗,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忘晤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了激捏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片德频。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缩幸,靈堂內(nèi)的尸體忽然破棺而出壹置,到底是詐尸還是另有隱情竞思,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布钞护,位于F島的核電站盖喷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏难咕。R本人自食惡果不足惜课梳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望余佃。 院中可真熱鬧暮刃,春花似錦、人聲如沸爆土。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽步势。三九已至氧猬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坏瘩,已是汗流浹背盅抚。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倔矾,地道東北人妄均。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像哪自,于是被迫代替她去往敵國和親丛晦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容