iOS逆向之旅(進階篇) — 代碼注入

延伸

作過遊戲外掛的人都知道,代碼注入一般是經過這工具去注入的進行測試的【固然還有劫持注入等等其餘注入方式】git

image.png

一般這種測試注入的方式有兩種github

  • 一種是直接注入彙編代碼 【這種方式只能用在簡單測試。在iPhone中,咱們能夠經過LLDB、Cycript直接注入OC原生語言進行測試,這種方式更加簡單粗暴。其實咱們平時調試多多少少都會用過LLDB,或許你已經會了很多】
  • 一種是注入一個.dll的動態庫【這種是windows系統的動態庫。在iphone中,動態庫是Framework與dylib】

因此咱們iOS逆向開發的時候,就是經過注入動態庫,來實現代碼的注入的windows

動態庫的注入【Framework】

第一步 【把以前重簽名的項目整理,優化一下】

  • 建立一個新的項目【05_Framework_Inject】
  • 建立APP文件夾,把目標APP【wechat】放進去

image.png

  • 建立一個編譯腳本

image.png

  • 把以前【iOS逆向之旅(進階篇) — 重簽名APP(二)】裏面的腳本,寫到文件AssignApp.sh,並放到項目中
  • 接着在運行腳本的指令中,把AssignApp.sh的路徑寫上,運行的時候Xcode就會自動幫咱們重簽名

image.png

第二步 【建立一個Framework】

  • 新建一個Framework,名PFFramework

image.png

  • 把Framework添加到工程中

image.png
image.png
這樣就把Framework注入到項目中了

  • 添加註入代碼

image.png

  • 運行,查看結果

image.png
然而發現並沒注入成功,緣由是因爲微信中沒有用到咱們的Framework,因此動態庫不會被加載。

第三步 【修改Macho文件屬性】

這時咱們須要去修改macho的文件屬性,讓微信會去加載咱們的Frameworkbash

  • 修改wechat可執行文件的macho文件屬性

咱們會使用到一個新的工具:yololib 這個工具的使用十分簡單 進入.app,查看咱們PFFrameWork的位置 微信

image.png
進入命令行模式,使用該工具,修改其Macho文件屬性 yololib WeChat Frameworks/PFFrameWork.framework/PFFrameWork 而後再從新打包這個APP

  • 顯然這麼作太麻煩了,咱們能夠利用跟簡單的方式【利用腳本的方式去使用該工具】

在原先腳本的末尾添加上 yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/PFFramework.framework/PFFramework" 這樣咱們的代碼就能夠成功注入進去了app

  • 看看結果

image.png

注:我發現項目中,有時會出現奔潰的現象。

緣由是: 項目有時候PFFramework.framework時有時無,致使了項目偶爾奔潰的現象iphone

image.png

神奇的是項目clean後build確定能成功,但我仍是花了很多時間把問題定位出來 原來第二次編譯的時候,編譯器有時候會先把PFFramework.framework放到.app中,而後咱們執行腳本rm -rf "$TARGET_APP_PATH",天然而然就把這個庫給刪了。 因此我把rm -rf "$TARGET_APP_PATH"替換成一下這個函數函數

function rmFilterFramework(){
    for element in `ls $1`
    do
        if  test "$element" == "Frameworks" || test "$element" == "*.framewrok"; then
            echo $element
            else
            rm -rf $1"/"$element
        fi
    done
}
複製代碼

修改後,就不再會出現BUG了工具

動態庫的注入【dylib】

第一步 【把原理重簽名的項目整理,優化一下】

與動態庫的注入【Framework】的第一步一致,這裏我就不重複闡述了測試

第二步 【建立一個dylib】

  • 新建一個dylib,名PFLibrary

image.png

  • 修改他的平臺信息,並把mac修改爲iOS

image.png

  • 修改簽名認證把mac developer修改爲iOS developer

image.png

  • 把dylib添加到工程中

image.png
image.png

  • 添加註入代碼

image.png

第三步 【修改Macho文件屬性】

與動態庫的注入【Framework】的第三步大體相同,惟一不一樣的就是寫入 腳本的yololib不同,只要改爲如下指令便可 yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/libPFLibrary.dylib"

查看結果

image.png
成功了 嘿嘿~~~

代碼晚點我會上傳到百度雲,嘿嘿~

相關文章
相關標籤/搜索