最近在學習IOS逆向工程,查看網絡上的資料也不是太多,邊學邊總結一下。
首先學習資料:
念茜(大神)的博客: http://nianxi.net
《ios應用逆向工程 分析與實戰》
----------------------------------------------------凌亂的分割線------------------------------------------
其次講講要用到的工具(ios安裝工具使用Cydia中搜索安裝,有些需要數據源可以自行查找):
已經越獄的IOS設備:這是必須的
OpenSSH(數據源:http://apt.saurik.com):用於遠程登錄ssh和文件傳輸scp
class-dump-z: 用於簡單分析出工程中的類名和函數名
IDA:強大的反編譯工具
Hopper Disassembler:類似IDA 我比較喜歡,能簡單轉換成OC的功能
Reveal:UI層解析工具
iFunBox 、 iTools :兩個都是強大的ios設備管理工具,越獄後能輕松讀取應用文件等功能
----------------------------------------------------凌亂的分割線------------------------------------------
恩,差不多就這麼多了!上面的工具大部分都是收費的,不過都是有試用版的,接下來我們一個個分析:
ios設備越獄,這個我就不講了吧,不過我要贊@盤古團隊一個,目前所有ios系統都可以越獄(包括ios8.x)
在ios設備上下載OpenSSH (數據源:http://apt.saurik.com),然後用電腦遠程登錄ios:
?
1
ACA80166:~ yuchenghai$ ssh [email protected]
然後輸入密碼,@後面是手機的IP號,越獄後默認密碼好像是123456.
傳輸文件的命令是
?
1
2
scp gdbinit [email protected]:/var/root
scp [email protected]:/var/root/123.txt ~/
3. class-dump-z 是一個強大的函數提取工具,非常好用,也是基礎工具
下載地址:http://stevenygard.com/projects/class-dump
https://code.google.com/p/networkpx/wiki/class_dump_z
可以發到手機裡調用,也可以在電腦上調用,要解析的文件是在應用目錄下x.app(裡面還有用到的所有文件資源)下面的x(x是你要分析的應用名)以唱吧為例,用ifunbox找到應用進入應用目錄就可以看到ktv.app了打開包文件就能找到ktv。
?
1
2
$ class-dump-z ktv > ktv.txt //導出所有內容到文件
$ class-dump-z -H ktv -o ktvdir/ //導出所有內容目錄到文件夾(首先要創建ktvdir文件夾)
*這裡會有一個問題,就是從app store下載的應用解析出來會是亂碼,因為應用被加密了。解決辦法
去渠道上下應用如同步推、91
解密工具 如AppCrackr(源http://cydia.xsellize.com)、Crackulous、Clutch
class-dump 只能解析出類名和函數名,不能看到具體的實現邏輯。但是很直觀
4.IDA和Hopper Disassembler差不多,能看到每個函數的具體邏輯(但是-都是匯編)IDA很強大,能在後面標記的oc的函數名,但是我更喜歡Hopper Disassembler,因為他能簡單的模擬出oc源碼,但是也是非常簡單的。兩者按空格鍵都能顯示出分支邏輯來。
匯編非常難看懂,我們需要的是耐心+耐心。後面可以加上動態工具聯合分析能更有效
5.Reveal的功能就更強大了,能表明出UI的具體結構來,告訴你每個View的類型是什麼,這通常也是我們常用的分析一個app的切入點。
下載地址:http://revealapp.com
下載完後打開reveal在菜單目錄中help-show reveal library in finder打開庫文件,將兩個文件發到手機裡
?
1
2
scp -r /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/Reveal.framework [email protected]:/System/Library/Frameworks
scp /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib [email protected]:/Library/MobileSubstrate/DynamicLibraries
接下來編輯libReveal.plist文件
在/Library/MobileSubstrate/DynamicLibraries/下創建文件libReveal.plist,指定app的Bundle,可以指定多個
?
1
2
3
4
5
{
Filter = {
Bundles = ("com.changba.ktv");
};
}
同學們會問了,app 的bundleID怎麼查看呢,我們還是用ifunbox工具找到應用目錄,在x.app文件夾中會有info.plist文件,打開就能找到。
最後重啟設備-打開想分析的應用-電腦打開reveal接口,就可以點擊分析了
總結一下吧,分析一個應用的邏輯是這樣的:
拿個越獄機-下好工具
去越獄平台下個想分析的應用(或者去app store下,用解密工具解密一下)
導入reveal分析頁面,得到想要的知道的具體視圖類或者大致范圍
分析class-dump中,找到想要的類和函數
在IDA中找到具體函數,查看邏輯
單純的靜態分析只能知道個大概,想知道框架和具體內容還需要動態分析(下面分析)的幫助。不過想知道一個應用用到了什麼庫,界面是什麼結構,有什麼圖片資源,上面的絕對夠用了。總之逆向工程是比較枯燥無味的東西,資料又少,需要的是。。。。。加油