android r 编译找不到头文件_「投稿」iOS逆向——砸壳与反编译
作者:瘋狂的蛋神
近來對iOS逆向十分感興趣,就在業余時間里自己在上網找了各種資料學習,發現許多資料對于一些細節描述的不夠詳細,所以也踩了很多坑,我也將自己踩的一些坑總結出來,希望對大家有所幫助。
注:逆向是為了學術學習的目的而去探索,不為了非法盈利或其他不正當行為而進行的。本文如有侵犯隱私或其他請聯系我,我將在第一時間整改或刪除。
一、前期準備
1、Mac Book Pro(筆者做iOS開發,暫時沒有研究Windows環境下的一些工具或者配置,或許有些許不同)。
2、一部越獄設備(沒有越獄設備的,可以下載愛思助手等工具進行一鍵越獄,在一鍵越獄那邊有對應的版本號,這里就不對越獄過多描述。這里我準備的是一部8.3版本的iPhone 5s)
愛思助手
3、dumpdecrypted(砸殼工具)
4、pp助手(用于下載準備砸殼的App應用)
5、iFunBox(用于將砸殼完成后的文件導出)
6、iTools Pro(用于導入編譯后的dumpdecrypted.dylib文件,以及對照查看文件目錄)
7、Terminal(終端,我們會大量的運用到這個工具)
8、class-dump(砸殼工具)
二、分析目標
1、下載App應用
使用pp助手下載我們準備砸殼的App應用(這里我用的是微信做示范)。
目標軟件——微信
2、手機OpenSSH連接
把手機與Mac通過USB連接,保證手機與Mac處在同一WiFi環境下,為的是能夠連接上手機。
①點擊手機里的設置->Wi-Fi->已連接上的WiFi最右側的感嘆號->BootP或
②點擊手機里的設置->Wi-Fi->已連接上的WiFi最右側的感嘆號->IPV4地址選擇BootP,選擇右上角存儲。
這時我們的設備的IP地址已固定,這么做是為了防止動態IP的情況下IP地址被占用或地址更改。
3、打開終端
輸入ssh 以及我們上一步展示的IP地址。
例如:ssh root@192.168.1.1
這是我們需要輸入OpenSSH的連接密碼,連接密碼的初始值為alpine。
到這里我們成功連接上手機了。
4、進入我們要砸殼的對應目錄下
首先我們將手機中的所有進程殺死,回到桌面,然后點開我們要砸殼的App應用,讓應用保持在前臺。
然后在終端輸入ps -e,我們會發現一個很是奇怪的進程。
微信
再打開iTools Pro根據圈出的對應目錄進行查看,我們會發現這個目錄就是微信所在的目錄,如果找不到的同學可以試試在不打開微信和打開微信后通過ps -e命令輸出的結果不同點在哪兒,就能找到了。
iTools Pro下微信完整路徑
在WeChat.app文件夾中包含了大量的素材文件,配置文件以及WeChat項目文件,這時候我們先看一下這個項目文件是否加殼,與不加殼有什么區別。
此時我們將WeChat.app導出至Mac中,右鍵選擇WeChat,選擇顯示包內容,新建一個終端窗口,cd到包內容所在的路徑中。
在終端輸入:otool -l WeChat | grep crypt,我們會看到一個重要的信息,cryptid 1,這表明這個項目文件還未沒砸殼,0則表示已經完成砸殼。
目標文件分析大致到這兒已經滿足我們需要的,接下來開始正式進入砸殼。
三、砸殼
1、下載并解壓dumpdecrypted.zip文件(覺得Github慢的同學可以在上文中找到對應的下載地址)。
我們可以看到里面包含的文件很簡單,就是三個文件,分別是一個.c文件,一個是Make編譯文件,一個是README說明文件。
我們打開一個新的終端窗口,并cd到Makefile所在的路徑,輸入make。
編譯dumpdecrypted.dylib庫
編譯完成
編譯完成后會得到dumpdecrypted.dylib文件,然后我們要對這個文件進行一次簽名,如果不對該文件進行簽名, 后續砸殼的操作會失敗。
在終端輸入security find-identity -v -p codesigning,會打印出mac上面已經安裝的證書,這里我用自己的個人賬號進行測試簽名。
輸入--force --verify --verbose --sign "iPhone Developer: XXXXX (XXXXX)" dumpdecrypted.dylib進行簽名。
簽名成功
這里已經完成了對dumpdecrypted.dylib文件的簽名,如果有出現以下提示,則是因為在鑰匙串中存在無效或者大量重復的證書導致,需要在鑰匙串中刪除無效的證書。
存在重復證書
2、找到WeChat的目錄
WeChat路徑及ID編號
從上圖中我們可以看到微信在運行是的路徑以及ID編號,在終端中我們輸入cycript -p XXXX就可以勾住進程,通過OC語法查找到文件目錄。(下圖我重啟了機子。。。進程編號就改變了,別在意 - -)。
成功勾住進程
如果出現輸入cycript -p XXXX后提示-sh: cycript: command not found,則是因為設備中沒有安裝Cycript插件,打開Cydia,搜索Cycript并安裝重啟后即可。
Cycript插件
勾住進程后,我們輸入[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomans:NSUserDomainMask][0]后,會打印出WeChat的Document目錄所在路徑。
打印路徑
根據這個路徑,我們打開iFunBox工具,按著這個路徑將我們簽名后的dumpdecrypted.dylib文件復制進去。
選擇Copy From Mac,將文件導入
按control+d退出勾子,cd到Document目錄中,再輸入DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /WeChat所在的WeChat.app路徑
砸殼
輸入后會展現以下內容,表示砸殼成功了,成功后會生成WeChat.decrypted文件,這就是我們下一步要反編譯的文件了。
砸殼成功
通過ls指令,我們可以看見WeChat.decrypted文件就存放在Documents,我們通過iFunBox可以看到文件,并導出到Mac中
WeChat.decrypted文件
導出文件到本地
在本地把WeChat.decrypted文件的后綴名去掉,再用otool -l WeChat | grep crypt指令查看。
砸殼成功
明顯的看到這里顯示的是cryptid 0,也就是脫殼了。這時再使用class-dump -H WeChat指令將目標文件反編譯出來。我們會看到反編譯出來很多很多的頭文件。我們整理到一個文件夾里。
反編譯成功
到這里我們的砸殼與反編譯已經完成。接下去就可以根據得到的頭文件進行分析以及Hook等等。
后續會繼續對逆向這個方向進行深入的研究,歡迎各位大佬指教,文中有許多不足的地方多多包涵。
歡迎各位大佬給予批評意見,讓我們一起學習進步。
總結
以上是生活随笔為你收集整理的android r 编译找不到头文件_「投稿」iOS逆向——砸壳与反编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python连接服务器sql serve
- 下一篇: svn冲突怎么解决_管理者怎么处理员工冲