標籤:
逆向工程-靜態分析及使用
看到一篇裝逼技術,有機會好好研究一下。。。。。
最近在學習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裝置越獄,這個我就不講了吧,不過我要贊@Apsara Distributed File System團隊一個,目前所有ios系統都可以越獄(包括ios8.x)
在ios裝置上下載OpenSSH (資料來源:http://apt.saurik.com),然後用電腦遠程登入ios:
1 ACA80166:~ yuchenghai$ ssh [email protected]172.168.1.100
然後輸入密碼,@後面是手機的IP號,越獄後預設密碼好像是123456.
傳輸檔案的命令是
scp gdbinit [email protected]172.168.1.100:/var/rootscp [email protected]172.168.1.100:/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。
$ 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開啟庫檔案,將兩個檔案發到手機裡
scp -r /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/Reveal.framework [email protected]192.168.0.X:/System/Library/Frameworksscp /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib [email protected]192.168.0.X:/Library/MobileSubstrate/DynamicLibraries
接下來編輯libReveal.plist檔案
在/Library/MobileSubstrate/DynamicLibraries/下建立檔案libReveal.plist,指定app的Bundle,可以指定多個
{ Filter = { Bundles = ("com.changba.ktv"); }; }
同學們會問了,app 的bundleID怎麼查看呢,我們還是用ifunbox工具找到應用目錄,在x.app檔案夾中會有info.plist檔案,開啟就能找到。
最後重啟裝置-開啟想分析的應用-電腦開啟reveal介面,就可以點擊分析了
總結一下吧,分析一個應用的邏輯是這樣的:
拿個越獄機-下好工具
去越獄平台下個想分析的應用(或者去app store下,用解密工具解密一下)
匯入reveal分析頁面,得到想要的知道的具體視圖類或者大致範圍
分析class-dump中,找到想要的類和函數
在IDA中找到具體函數,查看邏輯
單純的靜態分析只能知道個大概,想知道架構和具體內容還需要動態分析(下面分析)的協助。不過想知道一個應用用到了什麼庫,介面是什麼結構,有什麼圖片資源,上面的絕對夠用了。總之逆向工程是比較枯燥無味的東西,資料又少,需要的是。。。。。加油
iOS開發——逆向工程OC篇&靜態分析及使用