iOS逆向常用操作筆記

如果你目前還做不了巨人,那么就去思考如何優(yōu)雅的站在巨人肩膀上。

此筆記只是把自己常用的一些操作命令記錄特碳,當做為個人逆向手冊吧。

一晕换、LLDB常用命令

1. 模塊操作:

? image list -o -f | grep MiaoPai //顯示 MiaoPai Image模塊的信息

? image lookup -r -n NUWebViewController //查詢NUWebViewController類或者方法在哪個模塊里面

2. 斷點操作:

2.1 基本斷點:

? br s -a 0xA5446 //在固定地址0xA5446下斷,此地址是絕對地址午乓。

? br s -a '0x0009a000 + 0xb446' //用ALSR+IDA偏移下斷,ALSR的獲取需要使用image list

? br s -n "[UIAlertView initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:]" //符號斷點這樣也行

? br s -n "initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:" //對所有含有initWithTitle方法的地方下斷點。

? br s -n alertControllerWithTitle:message:preferredStyle: //對所有含有alertControllerWithTitle方法的地方下斷點闸准。

? po (void*)class_getMethodImplementation(NSClassFromString(@"UIAlertView"),NSSelectorFromString(@"initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:")) //這個可以先打出[UIAlertView initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:]的內存地址益愈,然后使用br s -a addr下斷點。

2.2 條件斷點:

? br s -a 0x03193730 -c '(BOOL)[(NSString *)$x0 isEqualToString:@"winsong"]'

2.2 斷點命中行為:

? br command add index // 給序號為index的斷點增加命中后的行為

2.3 內存讀寫斷點:

? watchpoint set expression -w write -- addr //給addr地址處設置內存寫入斷點

? watchpoint set expression -w read -- addr //給addr地址處設置內存讀斷點

2.4 禁用斷點:

? br dis index

2.5 刪除斷點:

? br del index

2.6 查看斷點:

? br list //查看斷點列表 原型:breakpoint list

3.寄存器操作:

? re w r0 0 //把r0寄存器修改為0

? re read //查看所有寄存器的值

4.內存操作(可以用x 命令代替):

4.1 內存讀:

? mem r -s4 -fx -c16 addr // 查看addr處的內存情況夷家,這里主要解釋一下上面這條命令每個-的作用蒸其,-s主要是控制顯示的是以多少個字節(jié)顯示,如-s1就是Byte的顯示库快,如-s2就是以Word顯示摸袁,如-s4就是以Dword顯示。-f主要是控制顯示的格式其后面有效數(shù)值:

? mem r -s1 -fY -c0x20 0x38b0fe70

? mem r -o/Users/winsong/Desktop/temp.bin -c0x8CA000 -b 0xbffff3c0 //dump指定地址 指定大小的內存以Hex格式dump到文件中

? x -ff -c0xAC718 -o/Users/winsong/Desktop/temp.bin $x0--force //dump指定地址 指定大小的內存以浮點數(shù)格式dump到文件中

? x -b -c0xAC718 -o/Users/winsong/Desktop/temp.bin $x0--force //dump指定地址 指定大小的內存以Hex格式dump到文件中

4.2 內存寫:

? memory write -s1 -fx 0x144dade11 0x38 //對0x144dade11內存地址寫入一個字節(jié)為0x38

4.3 關于x命令的拓展

常規(guī)格式:

1).打印32位地址:

? (lldb) x -fx -c8 -l4 $r0 //-f(格式控制)义屏、-c(總個數(shù)控制)靠汁、-l(每一行的個數(shù)控制)

? 0x10004005: 0x7400001f 0x74000006 0x0f000006 0x74000067

? 0x10004015: 0x74000007 0x21000007 0x7400006b 0x74000009

2).打印字符串:

? (lldb) x -fY -c0x30 -l0x10 $r0 //-f(格式控制)、-c(總個數(shù)控制)闽铐、-l(每一行的個數(shù)控制)

? 0x10004005: 1f 00 00 74 06 00 00 74 06 00 00 0f 67 00 00 74 ...t...t....g..t

反斜杠格式“x/<n/f/u><addr>“說明 這里x代表用16進制來顯示結果添谊,w代表Word(16位)大小。所以x/3xw就是用16進制來顯示bytes所指空間的3個16位的元素內容。對于x命令的詳細格式可以參考這篇文章,或者這篇。常見的大小格式為:b – byte 1字節(jié),h – half word 2字節(jié)青团,w – word 4字節(jié)和最后的g – giant word 8字節(jié)诱贿。格式字符串則類似printf锨阿,x是16進制,f是浮點,d是十進制等等。

5. 線程操作:

? th l //查看線程列表 原型:thread list

6. 通用操作:

? continue // 原型:process continue

? dis -s 908FF0 -c 50 -b //在指定地址處開始顯示匯編代碼 顯示50行數(shù) 和顯示Opcode

? expr ((long long (*)())0x10258f910) //直接調用內存地址CALL:

? po [[[UIWindow keyWindow] rootViewController] _printHierarchy] //針對8.0以上的系統(tǒng)

? po [[UIWindow keyWindow] recursiveDescription]

? expr (void)[CATransaction flush] //刷新UI

二、iOS調試技巧

1. LLDB+DebugServer遠程調試

    請參考:http://bbs.iosre.com/t/debugserver-lldb-gdb/65

     1). debugserver localhost:1234 -a "SpringBoard"  // attach方式調試(iOS端運行)

     2). debugserver -x backboard *:1234 /var/mobile/Applications/BFC441A6-3F4B-4F18-BA15-3C5DF7148F40/testapp/test  //啟動方式調試(iOS端運行)  

     3).process connect connect://localhost:1234  //lldb連接 (MacOS端運行l(wèi)ldb連接debugserver)

     4).process launch --stop-at-entry  //

2. 使用USB來SSH:

    請參考:http://bbs.iosre.com/t/usb-ssh-ios/193

? 小技巧<AutoSsh>:復制下面深綠文字到新建的AutoSSh.sh文件里面雙擊運行即可,$path是路徑

? #! /bin/bash

? $path/tcprelay.py -t 22:2222 &

? $path/tcprelay.py -t 1234:1234 &

3. iOS越獄免登陸SSH

? ssh-copy-id -i ~/.ssh/id_rsa.pub root@IP

三、關于chisel的使用記錄:

? 1.pviews //參數(shù):無 功能:在程序斷下來的情直接輸出當前UI的層次結構

? 2.presponder //參數(shù):控件地址 功能:遞歸顯示出這個控件之前的Responder

? 3.fa11y //參數(shù):字符串 功能:通過給定字符串找出對應控件的地址

? 4.caflush //參數(shù):無 功能:改變了UI的情況下刷新UI緩存

? 5.flicker //參數(shù):控件地址 功能:快速閃速一下控件方便定位

? 6.paltrace //參數(shù):View

? 7.pinternals //參數(shù):控件地址 功能:查看控件詳細內部結構

? 8.pvc //參數(shù):viewController 功能:找出viewController和View的對應關系和地址

? 9.taplog //參數(shù):無 功能:可以找對應的控件點擊事件

? 10.show/hide逛钻、mask/unmask僚焦、border/unborder、

? 11.visualize //參數(shù):控件地址或者圖片的內存地址 功能:用mac上的preview顯示出

? 12.binside //參數(shù):地址 功能:下斷曙痘,針對那種有ASLR的方便使用

四芳悲、其他技巧:

5.1 將NSData寫到Docments目錄:

? expr (id)[$x0 writeToFile:(id)[NSString stringWithFormat:@"%@/123.bin",(NSString*)[NSSearchPathForDirectoriesInDomains( 9,1, YES) lastObject]] atomically:YES] //將寄存器X0指針里面buff寫到沙盒Document目錄下

5.2 對于iOS有彈窗(UIAlertView或者UIAlertController)的代碼的快速定位

? 1).可以直接下個斷br s -n initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles: 然后在App操作斷下來之后通過棧回溯定位關鍵代碼

? 2).或者可以: po (void*)class_getMethodImplementation(NSClassFromString(@"UIAlertView"),NSSelectorFromString(@"initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:")); //這就能準確的找出對應類的函數(shù)边坤。

5.3 查找按鈕的Target點擊事件

? po [myButton allTargets] //myButton 為按鈕的內存地址
? {(
? <MagicEventListener: 0x7fb58bd2e240>
? )}

? (lldb) po [$myButton actionsForTarget:(id)0x7fb58bd2e240 forControlEvent:0]
? <__NSArrayM 0x7fb58bd2aa40> _handleTap:)

? 現(xiàn)在你或許想在它發(fā)生的時候加一個斷點名扛。在 -[MagicEventListener _handleTap:] 設置一個符號斷點就可以了,在 Xcode 和 LLDB 中都可以茧痒,然后你就可以點擊按鈕并停在你所希望的地方了肮韧。

5.4 App瘦身和簽名

? 利用lipo命令留下支持armv7s的header

? 1.lipo -thin armv7s <SrcFile> -output <DesFile>

? 2.ldid -Sent.xml SrcFile(如果此方法不行就換下面第二種)//注意此處“-S”選項與“ent.xml”之間是沒有空格的。

? 3.codesign -s - --entitlements ent.plist -f <SrcFile> //注意這里的SrcFile是進過處理的,最后復制到IOS機器上并給其權限chmod +x <SrcFile>//注意這里的SrcFile是進過處理的

5.5.文件的拷貝:(可以用PP助手代替)

? scp -P 2222 root@localhost:/Developer/usr/bin/debugserver ~/debugserver //將手機上的debugserver 拷貝至MAC當前目錄(已經端口轉換了)

? scp SrcFile zj-dt0094@192.168.43.141:/Users/zj-dt0094/desktop //將手機上的SrcFile 拷貝至Mac的desktop上(前提是已經ssh上手機了)

? scp SrcFile root@172.17.6.97:/var/mobile/Downloads //將電腦上的SrcFile 拷貝至手機上

? scp -rp /var/mobile/Applications/431430A4-6F89-45ED-BA3E-B257DFD0B99C/MiaoPai.app zj-dt0094@192.168.43.141:/Users/zj-dt0094/desktop //拷貝整個目錄

5.6.砸殼

? 進入APP的Document目錄后 執(zhí)行以下命令:DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/BFED82A3-3238-4F41-B797-C1CB584CBE05/qqlive.app/qqlive

? 具體見: http://www.reibang.com/p/a4373b5feca0

5.7.對于swift+OC混編的程序如何快速定位關鍵代碼

? 1. 第一步還是和之前分析OC程序一樣的通過View找到對應的ViewController旺订,

? 2. 第二步就和之前OC(拿到ViewController之后就去對應的頭文件找對應的事件)不一樣弄企,這里是到IDA的String Windows里面去找,假設找到的 是:<Trigraphy.EditorEffectsMenuViewController: 0x1276c65b0>区拳,那就復制EditorEffectsMenuViewController在String Windows里面搜索拘领,雙擊紅色框里面的就可以找到對應的metaData了。

5.8 lldb 自動帶入庫

? 打開終端:(依次輸入,什么都沒提示樱调,打開xcode項目约素,有Hook 1(expr --@import UIKit等提示,意味著成功))

? touch ~/.lldbinit

? echo display @import UIKit >> ~/.lldbinit

? echo target stop-hook add -o \"target stop-hook disable\" >> ~/.lldbinit

5.9 App打包成IPA

? mkdir Payload

? mv test.app Payload

? zip -ry test.ipa Payload

6.0 在iDA去除SVC

? IDA 二進制byte搜索 “01 10 00 D4” 將其替換為 nop 1F 20 03 D5

六笆凌、砸殼技巧:

? 1圣猎、Clutch砸殼

? 2、dumpdecrypted.dylib
? 使用dumpdecrypted砸殼乞而,出現(xiàn)killed:9 請參考此處 // https://iosre.com/t/ios-9-3-3-dumpdecrypted-killed-9/4489

? 3送悔、CrackerXI (cyida插件方便)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子放祟,更是在濱河造成了極大的恐慌鳍怨,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跪妥,死亡現(xiàn)場離奇詭異鞋喇,居然都是意外死亡,警方通過查閱死者的電腦和手機眉撵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門侦香,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纽疟,你說我怎么就攤上這事罐韩。” “怎么了污朽?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵散吵,是天一觀的道長。 經常有香客問我蟆肆,道長矾睦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任炎功,我火速辦了婚禮枚冗,結果婚禮上,老公的妹妹穿的比我還像新娘蛇损。我一直安慰自己赁温,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布淤齐。 她就那樣靜靜地躺著股囊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪更啄。 梳的紋絲不亂的頭發(fā)上稚疹,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音锈死,去河邊找鬼贫堰。 笑死穆壕,一個胖子當著我的面吹牛待牵,可吹牛的內容都是我干的。 我是一名探鬼主播喇勋,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼缨该,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了川背?” 一聲冷哼從身側響起贰拿,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蛤袒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后膨更,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妙真,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年荚守,在試婚紗的時候發(fā)現(xiàn)自己被綠了珍德。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡矗漾,死狀恐怖锈候,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情敞贡,我是刑警寧澤泵琳,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站誊役,受9級特大地震影響获列,放射性物質發(fā)生泄漏。R本人自食惡果不足惜势木,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一蛛倦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧啦桌,春花似錦溯壶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至板驳,卻和暖如春又跛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背若治。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工慨蓝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人端幼。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓礼烈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親婆跑。 傳聞我的和親對象是個殘疾皇子此熬,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容