逆向4(Reveal ,LLDB & debug server,Hopper Disassembler)

Reveal
  • 簡介
  1. Xcode6開始蘋果已經(jīng)將Reveal查看自己開發(fā)程序界面信息的功能集成到了Xcode中, 程序運行起來之后點擊Debug View hierarch按鈕即可檬贰,但是會有部分信息不顯示吼畏,布局顯示不精確伺糠。
  2. 相比xcode自帶的視圖調(diào)試(只能看),reveal強大的不是一丁點叁幢,可以修改視圖的屬性饵沧,并實時在模擬器(真機)上顯示變化巧娱。(當然只是臨時修改的屬性,不會修改工程的實際代碼逾滥,如果真實修改峰档,還是需要修改的工程源代碼的)。
  3. reveal最強大的一點是可以通過它查看和分析其他App視圖元素構(gòu)成和布局寨昙。
  • 下載地址:http://revealapp.com/讥巡。
    是一個收費軟件,可以免費試用30天舔哪。
  • 準備工作
以下都是在cydia下載
1. OpenSSH
一個允許其他終端遠程訪問當前設備的插件
2. Apple File Conduit 2
一個確保越獄插件正常運行的補丁
3. Cycript 
Cycript是一款由saurik推出的腳本語言欢顷,可以幫助我們測試App
4. Reveal Loader
RevealLoader幫助我們通過Reveal來偷窺別人的應用
  • 越獄使用方式(Reveal軟件所在的mac設備與越獄后的iOS設備置于同一個局域網(wǎng)內(nèi))
    (1). cydia搜索Reveal Loader安裝
    (2). ssh連接iphone
    ssh root@192.168.0.101
    (3). 安裝后去到 /Library路徑下是看是否有RHRevealLoader目錄
    cd /Library/
    (4). 如果沒有自己新建一個,然后將Reveal中的iOS動態(tài)庫libReveal.dylib復制到此目錄下
cd /Library
mkdir RHRevealLoader
cd RHRevealLoader
scp zl@192.168.0.102:/Users/zl/Desktop/iOSRE/libReveal.dylib .

(5).上面的都做好以后捉蚤,ihpone里找到 設置->Reveal->Enable Applications,然后打開你需要看的app,再在mac上打開Reveal,連接到你的iphone,就可以使用了抬驴。(注意要讓app處于前臺)

注:如何找到Reveal軟件的動態(tài)庫所在目錄
Mac上的Reveal自帶了兩個庫,一個是libReveal.dylib缆巧,一個是Reveal.framework布持。在未越獄的設備上使用庫是后者。

<1> 在mac上安裝好Reveal后打開陕悬,Help->Show Reveal Library In Finder->iOS Library题暖,就可以看到libReveal.dylib,這是越獄環(huán)境下要用的。
<2> 重新打開一個Terminal芙委,使用如下命令:

//找到目錄
cd /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries
//打開文件夾
open .

<3>安裝iExplorer逞敷。iExplorer可以查看你的Mac上所有iOS設備的備份文件,當然也包括非越獄設備的備份文件

LLDB & debug server

LLDB & debug server可以幫助我們調(diào)試應用痊乾。debug server在我們的設備連接Xcode調(diào)試時已經(jīng)被安裝在設備的/Developer/usr/bin中皮壁,但由于權(quán)限問題只能調(diào)試我們自己的App,還需要做一下配置哪审。

(1) ssh連接iPhone,從設備中拷貝debugserver到本地

cd /Developer/usr/bin
scp debugserver zl@192.168.0.102:/Users/zl/Desktop

(2) 給debugserver瘦身和重新簽名蛾魄,并放入/usr/bin/目錄下方便隨時調(diào)用(mac終端)
lipo -thin arm64 ./debugserver -output ./debugserver-arm64
(3) 配置task_for_id權(quán)限(mac終端)
下載http://iosre.com/ent.xml到debugserver所在目錄(確保已經(jīng)安裝了ldid)
ldid -Sent.xml debugserver-arm64
(4) 將處理過的debugserver放回iPhone,并配置x權(quán)限

scp debugserver-arm64 root@192.168.0.101:/usr/bin/debugserver
ssh root@192.168.0.101
chmod +x /usr/bin/debugserver

(5) 使用方式

  • 方式一: Wi-Fi連接(速度較慢)
    ssh root@192.168.0.101
    debugserver *:1234 -a "WeChat"
    表示依附在微信上監(jiān)聽來自任意ip:1234的lldb請求
ssh root@192.168.0.101 
iPhone:~ root# debugserver *:1234 -a "WeChat"
debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-340.3.51.1
 for arm64.
Attaching to process WeChat...
Listening to port 1234 for a connection from *...

process connect connect://192.168.0.101:1234

lldb                                                                     
(lldb) process connect connect://192.168.0.101:1234
Process 826 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
    frame #0: 0x0000000196da9be8 libobjc.A.dylib`objc_msgSend + 40
libobjc.A.dylib`objc_msgSend:
->  0x196da9be8 <+40>: br     x17
    0x196da9bec <+44>: cbz    x16, 0x196da9d80          ; _objc_msgSend_uncached_impcache
    0x196da9bf0 <+48>: cmp    x12, x10
    0x196da9bf4 <+52>: b.eq   0x196da9c00               ; <+64>
(lldb) 

連接到設備上的debugserver湿滓,出現(xiàn)上面結(jié)果就是連接成功了滴须。

  • 方式二: 使用usbmuxd工具通過USB口轉(zhuǎn)發(fā)ssh和調(diào)式信息

下載地址:
http://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz

使用配置:下載完成后保存在桌面

cd /Users/zl/Desktop/usbmuxd-1.0.8/python-client
//添加執(zhí)行權(quán)限
chmod +x tcprelay.py
./tcprelay.py -t 22:2222

使用方式:

完全脫離WiFi,使用USB連接到iOS叽奥,用lldb調(diào)試WeChat扔水。
i) 把本地2222(這個端口監(jiān)聽ssh)端口轉(zhuǎn)發(fā)到iOS的22端口(終端處于監(jiān)聽狀態(tài))
cd /Users/zl/Desktop/usbmuxd-1.0.8/python-client
./tcprelay.py -t 22:2222
ii) ssh過去并用debugserver attach到WeChat(新開一個終端)
ssh root@localhost -p 2222
debugserver *:6789 -a "WeChat"
iii) 把本地6789端口轉(zhuǎn)發(fā)到iOS的6789端口(再開一個終端)
cd /Users/zl/Desktop/usbmuxd-1.0.8/python-client
./tcprelay.py -t 6789:6789
iv) 用lldb開始調(diào)試(再開一個終端)
lldb
process connect connect://localhost:1234
  • LLDB常用的命令
A. 顯示當前所有進程信息
(lldb) image list -o -f
回車后, 即可看到以下信息

[  0] 0x00035000 /System/Library/CoreServices/SpringBoard.app/SpringBoard(0x0000000000036000)
[  1] 0x00019000 /Users/mac/Library/Developer/Xcode/iOS DeviceSupport/7.1.2 (11D257)/Symbols/usr/lib/dyld
[  2] 0x00453000 /Library/MobileSubstrate/MobileSubstrate.dylib(0x0000000000453000)
[  3] 0x0182f000 /Users/mac/Library/Developer/Xcode/iOS DeviceSupport/7.1.2 (11D257)/Symbols/System/Library/PrivateFrameworks/StoreServices.framework/StoreServices
...
上面的信息中, 左邊方括號的數(shù)字代表模塊的序號, 第二列如0x00035000代表ASLR偏移, 簡單理解為位移即可, 第三列代表模塊的全路徑, 括號后代表位移之后的起始地址. 我們關(guān)注的主要是第二列的位移.
B. 斷點設置
(lldb) br s -a address
如在某個地址前面打一個斷點, address代表十六進制的地址, 如下:
(lldb) br s -a 0x00234a
我們可以通過IDA反編譯二進制文件, 然后定位目標函數(shù)的位置, 找到偏移前的基地址, 然后通過LLDB查看ASLR偏移, 兩者相加, 即可找到目標函數(shù)的在運行時的真實地址, 通過上面的斷點設置, 直接在該目標函數(shù)下斷點. 來驗證我們的一些推理, 用以進一步的查找以及逆向.
C.斷點相關(guān)設置
當進程停止, 可輸入"c"讓進程繼續(xù):
(lldb) c
"c"即continue.
禁用所有斷點:
(lldb) br dis
"dis"即disable, "br"即breakpoint.
禁用某個斷點:
(lldb) br dis 6
6代表第幾個斷點.
啟動所有斷點:
(lldb) br en
啟動某個斷點:
(lldb) br en 5
刪除所有斷點:
(lldb) br del
刪除某個斷點:
(lldb) br del 5
在執(zhí)行某個指令之前, 預先設置一些指令:
(lldb) br del 8
打印寄存器的值:
(lldb) p $r6
執(zhí)行下一條指令, 并且進入函數(shù)體:
(lldb) ni
執(zhí)行下一條指令, 并且不進入函數(shù)體:
(lldb) si
給指定的寄存器賦值, 用以驗證分支:
(lldb) register write r5 0
上述命令作用為修改r5寄存器的值為0.

參考博客 http://www.cnblogs.com/ludashi/p/5730338.html

Hopper Disassembler
  • 簡介
    是一款是32位和64位的二進制反匯編工具,反編譯和調(diào)試朝氓∧校基本上滿足了工作上的反匯編的需要,包括偽代碼以及控制流圖(Control Flow Graph)赵哲,支持ARM指令集并針對Objective-C的做了優(yōu)化待德。
  • 下載鏈接
    www.sdifen.com/hopperdisassembler408.html
    鏈接里面安裝破解版非常詳細
  • 官網(wǎng)
    https://www.hopperapp.com/
    與 IDA 相同,官網(wǎng)也提供了 Demo 的試用版枫夺。試用版也可以進行反匯編磅网,但是不能保存 *.hop 文件。所以筷屡,用于學習的話 Hopper 的 Demo 版就足夠了涧偷。
  • 使用Hopper
    與 IDA 不同, Hopper 不能直接將 Mach-O 文件導入工作區(qū)毙死,需要下載應用的 *.ipa 文件燎潮,并將文件后綴改為 *.zip,解壓該 zip 文件后就可看到 Payload 文件目錄扼倘,在該目錄下就存有對應應用的 package 包文件(. app 文件)确封,將.app文件拖入Hopper分析除呵。


    01.png
02.png

當 Hopper 分析完全部二進制后,按住 Option + Enter 鍵爪喘,就可看到 Hopper 反編譯后的偽代碼.
與 IDA 相比颜曾, Hopper 反編譯后的偽代碼的邏輯與 IDA 反編譯得到的偽代碼邏輯類似,但多了 r0~r8 等寄存器秉剑,閱讀性相較而言差一些泛豪,但是,仍然可以根據(jù)偽代碼還原出源代碼.
Hopper 除了可以查看匯編代碼以外侦鹏,還可以直接對 Mach-O 文件進行修改诡曙,然后重新生成二進制文件(Demo 版沒有這個功能)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末略水,一起剝皮案震驚了整個濱河市价卤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渊涝,老刑警劉巖慎璧,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異跨释,居然都是意外死亡胸私,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門煤傍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盖文,“玉大人嘱蛋,你說我怎么就攤上這事蚯姆。” “怎么了洒敏?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵龄恋,是天一觀的道長。 經(jīng)常有香客問我凶伙,道長郭毕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任函荣,我火速辦了婚禮显押,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘傻挂。我一直安慰自己乘碑,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布金拒。 她就那樣靜靜地躺著兽肤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上资铡,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天电禀,我揣著相機與錄音,去河邊找鬼笤休。 笑死尖飞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的宛官。 我是一名探鬼主播葫松,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼底洗!你這毒婦竟也來了腋么?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤亥揖,失蹤者是張志新(化名)和其女友劉穎珊擂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體费变,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡摧扇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挚歧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扛稽。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖滑负,靈堂內(nèi)的尸體忽然破棺而出在张,到底是詐尸還是另有隱情,我是刑警寧澤矮慕,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布帮匾,位于F島的核電站,受9級特大地震影響痴鳄,放射性物質(zhì)發(fā)生泄漏瘟斜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一痪寻、第九天 我趴在偏房一處隱蔽的房頂上張望螺句。 院中可真熱鬧,春花似錦橡类、人聲如沸蛇尚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佣蓉。三九已至披摄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勇凭,已是汗流浹背疚膊。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虾标,地道東北人寓盗。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像璧函,于是被迫代替她去往敵國和親傀蚌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容