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