"技藝精進(jìn):iOS逆向工具精選"

1.debugserver和LLDB

倚天劍
屠龍刀
  • 如果說IDA是倚天劍识腿,那么LLDB就是屠龍刀。在iOS逆向工程中叠萍,兩者相輔相成芝发。

  • LLDB全稱Low Level Debugger绪商,由蘋果出品苛谷,作為Xcode內(nèi)置的動態(tài)調(diào)試工具。

  • 它不僅適用于C格郁、C++腹殿、OC語言,還支持OSX例书、iOS以及iOS模擬器锣尉。

干將莫邪
  • LLDB是運行在OSX中的,要想調(diào)試iOS决采,還需要另一個伙伴配合自沧,他就是debugserver。可以說它們兩個是寶劍界的干將莫邪拇厢。

1.1 debugserver

  • debugserver運行在iOS上爱谁,作為服務(wù)端,實際執(zhí)行LLDB傳過來的命令孝偎,并將執(zhí)行結(jié)果反饋給LLDB访敌,顯示給用戶,即所謂的遠(yuǎn)程調(diào)試衣盾。

  • 在默認(rèn)情況下寺旺,iOS上并沒有安裝debugserver,只有設(shè)備連接過一次Xcode后势决,debugserver才會被Xcode安裝到iOS的/Developer/usr/bin目錄下阻塑。

1.2 幫debugserver減肥

設(shè)備-ARM-信息.png
  • 我的手機(jī)是iphone5s--對應(yīng)的ARM是arm64
  • 我們從手機(jī)/Developer/usr/bin/debugserver 把debugserver 下載到mac上
scp root@iOSIP:/Developer/usr/bin/debugserver /Users/mac-name/Desktop/debugserver
  • 然后進(jìn)行減肥操作(路徑自己選擇)
lipo -thin arm64 /Users/mac-name/Desktop/debugserver -output /Users/popo/Desktop/debugserver1/debugserver
瘦身后的debugserver
  • 再接著,我們給debugserver添加task_for_pid權(quán)限徽龟。
    1.因為通過Xcode安裝的debugserver只能調(diào)試我們自己的App叮姑。
    2.我們自己有App的源代碼,就用不著debug了据悔。
    3.所以我們要添加task_for_pid權(quán)限传透。
  • xml文件下載地址: http://iosre.com/ent.xml
  • 這個是在debugserver1目錄下執(zhí)行的終端命令(上圖就是該目錄下的文件)
ldid -Sent.xml debugserver  

注意:如果沒有安裝ldid,要進(jìn)行安裝后,才可以使用用上面的命令執(zhí)行.安裝ldid的命令是:

brew install ldid
  • 接著,我們在執(zhí)行
codesign -s - --entitlements ent.plist -f debugserver

以上就完成了對debugserver的處理

  • 經(jīng)過處理的debugserver拷貝到iOS
scp /Users/popo/Desktop/debugserver1/debugserver root@192.168.3.15:/usr/bin/debugserver
  • 我們進(jìn)入手機(jī)終端,對debugserver進(jìn)行授權(quán)
chmod +x /usr/bin/debugserver
  • 我們執(zhí)行一下debugserver,測試一下是否配置成功,我們監(jiān)聽1234端口,開啟SpringBoard--debugserver,看到下圖結(jié)果,說明我們的配置是沒問題了.
  • 接著我們就要使用LLDB,對1234端口進(jìn)行調(diào)試.

1.3 LLDB

  • 在mac終端敲lldb,會進(jìn)入lldb環(huán)境,我們輸入help,就可以查看lldb調(diào)試命令.我們就可以開啟調(diào)試模式.
  • 首先啟動debugserver
  • 在lldb環(huán)境輸入:
process connect connect://手機(jī)ip:1234
  • 調(diào)試命令--1.image list
image list -o -f

--用于列舉當(dāng)前進(jìn)程中的所有模塊
--每次進(jìn)程啟動時,同一進(jìn)程的所有模塊在虛擬內(nèi)存中的起始地址都會產(chǎn)生隨機(jī)偏移.

  • 調(diào)試命令--2.breakpoint
    --2.1用于設(shè)置斷點
    --2.2用法:
    -- (1) b function
    -- (2) br s -a address
    -- (3) br s -a 'ASLROffset + address'
    --2.3使用:
    --第1種:在函數(shù)的起始位置設(shè)置斷點
    --(lldb) b NSLog
    --第2/3種是在地址處設(shè)置斷點
    --(lldb) br s -a 0xCCCCC
    --2.4注意:
    --當(dāng)進(jìn)程停在斷點上時,斷點所在的哪一行代碼并沒有執(zhí)行.這里和我們在xcode打斷點是一樣的.
  • 調(diào)試命令--3.print
    --LLDB的主要功能之一是"在程序停止的時候檢查程序內(nèi)部發(fā)生的事"
    --通過print命令,我們可以打印某處的值

  • 調(diào)試命令--4.nexti與stepi
    --它們的作用都是執(zhí)行下一條機(jī)器指令
    --區(qū)別:nexti不進(jìn)入函數(shù)體,stepi會進(jìn)入函數(shù)體
    --簡寫: ni 與si

  • 調(diào)試命令--5.register write
    --用于給制定的寄存器賦值,從而對程序進(jìn)行改動,觀察程序執(zhí)行過程變化

2.dumpdecrypted--砸殼工具

2.1 dumpdecrypted的產(chǎn)生

  • 由于AppStore下載的App是被蘋果加密過的,可執(zhí)行文件被套上一層保護(hù)殼
  • class-dump無法作用于加密過的App
  • 想要獲取頭文件,需要先解密App的可執(zhí)行文件,也叫砸殼
  • dumpdecrypted就是由越獄社區(qū)的知名人士 Stefan Esser 出品的一款砸殼工具,被越獄社區(qū)廣泛運用在iOS逆向工程研究中.

2.2 dumpdecrypted的使用

第二種:
先確定下載的目錄(desktop/dump目錄下):



下載執(zhí)行命令:

git clone git://github.com/stefanesser/dumpdecrypted
  • 接著對下載好的文件進(jìn)行編譯dumpdecrypted.dylib
cd dumpdecrypted/
make
  • 找到要砸殼的APP的Documents目錄路徑


估計你看到這些,就會很頭疼了,到底哪個是呢?

  • 我們借助強(qiáng)大的Cycript,讓App告訴我們它在哪里,直接找到它的的根目錄


  • 鎖定該目錄 065B70ED-FCD1-4874-B4A3-86F1B765945F

  • 將dumpdecrypted.dylib拷貝到Documents目錄下.
    有兩種方式拷貝:
    第一種:
scp /Users/popo/Desktop/dump/dumpdecrypted/dumpdecrypted.dyli root@192.168.3.15:var/mobile/Containers/Data/Application/065B70ED-FCD1-4874-B4A3-86F1B765945F/Documents/dumpdecrypted.dylib

第二種:


以上兩種方式,只需要拷貝成功就行,選擇那種,根據(jù)個人喜好.

  • 開始砸殼
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/9AF4167F-D4AA-4DBB-A67D-A956CCDBDEF9/WeChat.app/WeChat mach-o decryption dumper

砸殼失敗了,分析一下原因:
required code signature missing for 'dumpdecrypted.dylib'
由于沒有對dumpdecrypted.dylib簽名,
我們沒有砸殼成功.
其實出現(xiàn)問題的時候就是漲經(jīng)驗的時候,
遇到問題就解決問題.
我們把問題解決后接著砸殼

  • 解決問題是對dumpdecrypted.dylib文件簽名,首先獲取可簽名的證書
security find-identity -v -p codesigning 
獲取可簽名的證書

然后為dumpecrypted.dylib簽名

codesign --force --verify --verbose --sign "iPhone Developer: `(開發(fā)這信息)`" dumpdecrypted.dylib 

然后在上傳到手機(jī)

  • 進(jìn)行第二次砸殼
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/9AF4167F-D4AA-4DBB-A67D-A956CCDBDEF9/WeChat.app/WeChat mach-o decryption dumper

在當(dāng)前目錄下會生成WeChat.decrypted文件

  • 砸殼完成,然后你就可以拿著砸殼文件就行class-dump,靜態(tài)分析匯編代碼了.

  • 問題:dumpdecrypted為什么拷貝到Documents目錄下操作?

    • StoreApp對沙盒以外的絕大數(shù)目錄沒有寫權(quán)限.
    • Documents目錄下使用dumpdecrypted.dylib時,保證它能在當(dāng)前目錄下寫一個decrypted文件.

4.OpenSSH

"切磋技藝:iOS逆向工具精選"地址: http://www.reibang.com/p/beea9f2b9f7d
提到了遠(yuǎn)程連接手機(jī)終端.
這里重點講解一下.

  • 我們會經(jīng)常用到兩個命令ssh 和scp
  • ssh用于遠(yuǎn)程登錄
  • scp遠(yuǎn)程拷貝文件
  • ssh使用:
ssh user@手機(jī)ip

我們上面連接手機(jī)時,使用到了這個命令

ssh root@192.168.3.15
  • scp使用:
scp user@手機(jī)ip:/path/to/remoteFile /path/to/localFile

我們拷貝dumpdecrypted.dylib 到手機(jī):

scp /Users/popo/Desktop/dump/dumpdecrypted/dumpdecrypted.dyli root@192.168.3.15:var/mobile/Containers/Data/Application/065B70ED-FCD1-4874-B4A3-86F1B765945F/Documents/dumpdecrypted.dylib
  • 安裝OpenSSH后需要注意修改默認(rèn)登錄密碼:alpine.
  • iOS上的用戶有2個
    • root
    • mobile
  • 修改密碼,執(zhí)行命令
passwd root

passwd mobile

5.usbmuxd

"切磋技藝:iOS逆向工具精選": http://www.reibang.com/p/beea9f2b9f7d
提到了有線無線連接遠(yuǎn)程終端.
這里也介紹一下.

python tcprelay.py -t   遠(yuǎn)程iOS上的端口 :  本地OSX/Windows上的端口   
  • ssh到iOS中
ssh root@192.168.31.5 -p 54322

就可以使用usb連線終端了.

6.iFile--iOS版的Finder

  • iFile是iOS上一款非常強(qiáng)大的文件管理App,可以看做是iOS版的Finder.


7.clutch--砸殼

源碼地址:https://github.com/KJCracks/Clutch

7.1 源碼下載

7.2 編譯工具

用Xcode打開源碼
編譯命令 command + B



7.3 拷貝到手機(jī)使用

  • 拷貝方法一:


  • 拷貝方法二:
scp Clutch/clutch root@設(shè)備ip:/usr/bin/

7.4 ssh到越獄機(jī),準(zhǔn)備砸殼

  • 砸殼錢先認(rèn)識這些命令+參數(shù)的作用



    1.clutch -b 砸殼后的文件是二進(jìn)制文件
    2.clutch -d 砸殼后的文件是ipa文件
    3.clutch -i 查看安裝的應(yīng)用
    4.clutch --clean /var/tmp/clutch 目錄清理
    5.clutch --version 顯示版本并退出
    6.clutch --? 顯示幫助并退出

  • 沒有執(zhí)行權(quán)限,需要授權(quán)


  • 執(zhí)行clutch -i (查看手機(jī)安裝的App)


  • 砸殼


    砸殼兩種方式

砸殼第一種執(zhí)行命令(clutch -d app序列號)

clutch -d 1

砸殼第二種執(zhí)行命令(clutch -d app包名)

clutch -d hk.itools.appe
# Zipping WeChat.app
# Swapping architectures..
# DONE: /private/var/mobile/Documents/Dumped/hk.itools.appe-iOS7.0-(Clutch-2.0.4).ipa
  • 砸殼后的ipa所在目錄


    砸殼后的ipa

    砸殼到這里,就完成了...

8.fruda-ios-dump 一條命令完成iOS應(yīng)用砸殼

8.1 Frida

  • Frida的使用場景:
    1.hook特定函數(shù)并更改返回值
    2.分析定制協(xié)議,同事其動態(tài)嗅探,解密
    3.應(yīng)用調(diào)試
    4.在iOS應(yīng)用上dump類和方法信息

8.2 手機(jī)設(shè)備安裝Frida

  • 首先打開手機(jī)設(shè)備,在Cydia中添加源


https://build.frida.re
  • 然后在Cydia中搜索Frida,進(jìn)行安裝.

8.3 在mac安裝Frida

  • 終端執(zhí)行:
sudo pip install frida
  • 如果報下面錯誤:
Uninstalling a distutils installed project (six) has been deprecated and will be
removed in a future version. This is due to the fact that uninstalling a distutils 
project will only partially uninstall the project.
  • 我們執(zhí)行下面命令:
    原因:Apple預(yù)安裝的這個six庫出于安全原因被設(shè)置為sudo也不可以執(zhí)行操作,所以需要依賴于高版本的庫就需要更新six.
sudo pip install frida –upgrade –ignore-installed six

到這一步,環(huán)境配置完成了.

8.4 配置frida-ios-dump環(huán)境

github地址: https://github.com/AloneMonkey/frida-ios-dump

  • 下載源碼
  • 安裝依賴
sudo pip install -r requirements.txt --upgrade (Python 2.7)
  • 修改dump.py參數(shù)
vim /opt/dump/frida-ios-dump/dump.py
修改參數(shù)

8.5 打開終端,端口轉(zhuǎn)發(fā)

Run usbmuxd/iproxy SSH forwarding over USB (Default 2222 -> 22). e.g.
執(zhí)行下面的命令:
iproxy 2222 22

8.6 進(jìn)行砸殼

比如 一鍵砸殼(WeChat)

./dump.py WeChat

這里就完成了砸殼.

9.Reveal--一款Mac下調(diào)試iOS應(yīng)用的軟件

下載地址:https://github.com/LK26/Reverse-tool-one/blob/master/Reveal.dmg

9.1 Reveal

  • Reveal能夠在運行時調(diào)試和修改iOS應(yīng)用程序,而且它能連接到應(yīng)用程序,并允許開發(fā)者編輯各種用戶界面參數(shù),而且會立即反應(yīng)在程序的UI上.
  • Reveal會掃描其網(wǎng)路中關(guān)聯(lián)的應(yīng)用程序,并讓開發(fā)者選擇連接其中之一,當(dāng)連接到一個應(yīng)用程序后,Reveal將顯示其UI,其中包括大量的參數(shù)和設(shè)置.
  • 除了解析出UI參數(shù)外,開發(fā)者可以輕松的檢查UI組件的分層,并在其層次結(jié)構(gòu)中選擇特定元素.

9.2 安裝和使用

  • 在越獄機(jī)中,打開cydia,搜索Reveal Loader


  • 點擊安裝(我這里已經(jīng)安裝)


  • 打開應(yīng)用設(shè)置,找到Reveal


  • 點擊進(jìn)入Reveal


  • 開啟你要Reveal的app


  • 這里在手機(jī)的設(shè)置完成了,我們在Mac上打開Reveal,找到Help--->>Show Reveal Library in Finder--->>iOS Library


  • 找到RevealServer.framework


  • Reveal新版本,iOS-Libraries文件中不再是libReveal.dylib了,
    而是RevelServer.framework,
    這里不用擔(dān)心.
    我們只需要把文件名改掉就OK了.

我們執(zhí)行下面的命令:

scp /Users/用戶名/Desktop/RevealServer.framework 
  root@192.168.3.15:/Library/RHRevealLoader/libReveal.dylib

拷貝到手機(jī).

  • 如果這些完成了,你就可以對已經(jīng)勾選的app頁面結(jié)構(gòu)進(jìn)行分析了.
    注意:讓手機(jī) 和 電腦處在同一局域網(wǎng)下,手機(jī)打開需要查看的 App, Mac上的 Reveal 選擇需要查看的App,就開始你的分析之旅吧,哈哈~~

10.軟件源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末极颓,一起剝皮案震驚了整個濱河市朱盐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菠隆,老刑警劉巖兵琳,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異骇径,居然都是意外死亡躯肌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門破衔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來清女,“玉大人,你說我怎么就攤上這事晰筛〉毡” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵读第,是天一觀的道長曙博。 經(jīng)常有香客問我,道長怜瞒,這世上最難降的妖魔是什么父泳? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上惠窄,老公的妹妹穿的比我還像新娘逝她。我一直安慰自己,他們只是感情好睬捶,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布黔宛。 她就那樣靜靜地躺著,像睡著了一般擒贸。 火紅的嫁衣襯著肌膚如雪臀晃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天介劫,我揣著相機(jī)與錄音徽惋,去河邊找鬼。 笑死座韵,一個胖子當(dāng)著我的面吹牛险绘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播誉碴,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宦棺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了黔帕?” 一聲冷哼從身側(cè)響起代咸,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎成黄,沒想到半個月后呐芥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡奋岁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年思瘟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闻伶。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡滨攻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出虾攻,到底是詐尸還是另有隱情铡买,我是刑警寧澤更鲁,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布霎箍,位于F島的核電站,受9級特大地震影響澡为,放射性物質(zhì)發(fā)生泄漏漂坏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顶别。 院中可真熱鬧谷徙,春花似錦、人聲如沸驯绎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剩失。三九已至屈尼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拴孤,已是汗流浹背脾歧。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留演熟,地道東北人鞭执。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像芒粹,于是被迫代替她去往敵國和親兄纺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354