10、代碼的注入

上一篇文章中我們已經可以將砸殼后的APP安裝到我們的手機上面了,這里我們將我們自己的代碼,注入到APP中,在APP運行的同時也執行我們自己的代碼。

  • 首先我們要思考的是,我們的代碼以什么樣形式去注入到APP中?
    1、別人的APP的源碼我們是拿不到的,那么去修改別人的代碼是無法做到的。
    2、我們都知道,APP中會引用一些第三方的庫,APP在運行的時候會使用到三方庫的一些內容。既然三方庫可以在APP運行的時候被執行,那我們我們就寫一個三方庫,然后將庫文件注入到APP包里面,那么我們的代碼不就會被執行了嗎!!!

?? ???? :我們下面的操作是在9、應用重簽名原理中最后的使用shell腳本的工程基礎上做的操作。

動態庫的注入

  • 1、將動態庫拷貝到APP包里面
    首先我們創建一個Framework的動態庫,名字就叫JaxHook:
    創建Framework

    然后我們在JaxHook里面寫上這樣一段測試代碼:
    測試代碼

    然后我們編譯一下,并查看此時APP包里面的Frameworks文件夾里面的內容:
    JaxHook

    可以看到我們自行創建的JaxHook.framework已經被拷貝到APP包里面了。
    這樣我們的第一步就完成,也就驗證了我們自己的動態庫確實可以注入到APP包里面。
  • 2、使用yololib可執行文件,將我們的動態庫引入到APP中的可執行文件里面,這里引入的是地址。
$ ./yololib <可執行文件名> Frameworks/JaxHook.framework/JaxHook

?? 注意:在我們第二步執行完畢之后,需要將修改過的可執行文件從新拷貝到APP包里面去的。這里建議大家從新打包,替換之前的ipa包ipa包 -> 解壓 -> 將修改后的可行性文件進行替換 -> 替換之后從新打包

///打包指令
$ zip -ry xxx.ipa <解壓后的文件>

將從新打包后的ipa包,替換之前的ipa包,然后從新運行工程,運行結果如下:

運行結果

到這里,有一點大家要注意。第一不是為了搞清楚我們自己的動態庫到底能不能注入到APP里面。其實如果我們已經很明確動態庫的名稱和注入后的地址的話,直接操作第二步就可以了。因為動態庫的注入,是Xcode幫我們完成的。

  • 使用shell腳本注入代碼
    1、首先要將yololib可執行文件拷貝到我們的工程根目錄下面。
    2、在上一篇文件腳本的基礎上,加上下面一句指令:
./yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/JaxHook.framework/JaxHook"

3、運行我們的工程就可以了。執行效果和上面的一樣。

yololib是逆向的時候,使用到的一個工具,大家可以去Google一下。


修改APP中的方法執行

上面我們講到了怎么去在APP中注入代碼,但是僅僅是注入代碼是不夠了。下面我們一起來探討一下,如何去影響APP原有方法的執行。
這進行下面的探討的之前,大家要對一個知識點有所掌握,那就是Method Swizzle
利用OC的Runtime特性,動態改變SEL(方法編號)IMP(方法實現)的對應關系,達到OC方法調用流程改變的的目的。主要用于OC方法

方法交換

  • 獲取APP中的方法信息(動態分析)
    在知道怎么去影響APP的的方法執行之后,我們就需要去獲取APP的方法的相關信息。這個時候,我們可以利用Xcode自帶的ViewDebug來查看一下,各個控件對應的信息。

    可以看到,我們可以通過ViewDebug查看到控件所在的類名,以及其對應的方法名。這個時候我們就可以通過Method Swizzle去修改這個方法。讓APP去執行這個方法的時候,實際是在執行我們的方法。
  • 獲取APP中的方法信息(靜態分析)
    我們還可以利用工具來靜態分析可執行文件里面的函數。然后結合動態分析來快速的定位到我們要修改的部分。
    這里推薦一款工具class-dump用于可執行文件的靜態分析,導出里面的方法名。
$ ./class-dump -H <可執行文件名> -o ./headers
/// 將可執行文件里面的函數名全部導出到執行的文件里面(此時指定的文件為`headers`)

yololibclass-dump這兩個工具這里就不為大家提供,大家可以在網上下載最新的版本使用。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容