ios逆向小试牛刀之操作手记
2019獨角獸企業重金招聘Python工程師標準>>>
一、環境準備
????1、vmware中安裝osx系統,參照鏈接:http://jingyan.baidu.com/article/ff411625b9011212e48237b4.html
????2、osx上安裝lldb命令行版(安裝xcode6.4后lldb版本太低,會造成調試時指令解析錯誤)
$xcode-select?--install ;打印命令行工具路徑 $xcode-select?-p /Library/Developer/CommandLineTools$cd /Library/Developer/CommandLineTools/usr/bin $./lldb -v;查找文件目錄 ;/var/mobile/Containers/Bundle/Application/ ;/var/mobile/Containers/Data/Application/ $find . -name "appname" -print;導出頭文件 class-dump -S -s -H ./WeChat -o ./headers/;砸殼 Clutch -b com.tencent.xin https://github.com/KJCracks/Clutch/releases/latest? ?3、ios設備上安裝debugserver,參考:http://bbs.iosre.com/t/debugserver-lldb-gdb/65
? ?4、安裝facebook的chisel.py插件,支持更多高級命令
;安裝brew $/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" ;更新 $brew update;安裝chisel $brew install chisel二、開始調試
????1、附加進程調試
????????(1)附加進程
;*.1234?端口號?-a?附加(appname/進程id) $debugserver?*:1234?-a?"SpringBoard"? $debugserver?*:1234?-a?procID?????? ?(2)osx使用lldb連接
$lldb lldb)platform?select?remote-ios?????????????????????;沒有sdk效果不好 lldb)po [[UIApp keyWindow] recursiveDescription] ;all view lldb)hide/show 0xffffffff ;show/hide view lldb)presponder 0x13fae98a0 ;找到button響應鏈 lldb)command script import /usr/local/opt/chisel/libexec/fblldb.py ;加載chisel腳本支持bmessage命令 lldb)bmessage -[MyViewController viewDidAppear:] lldb)process?connect?connect://(iosip):1234 lldb)image?list?-o?-f?????????????;列出所有加載的模塊基地址 lldb)di?-s?addr;??????????????????;-f?反匯編整個函數塊?-A?thumb/arm模式切換 lldb)b?-[T1CommerceOfferHowWorksView?setHiddenObserver:]?;下函數名斷點 lldb)process?continue????????;進程繼續執行,類似c lldb)br?s?-a?base+offset?????;直接根據IDA中獲取的函數偏移下函數斷點 lldb)br mod -c '*(int*) ($esp+4) == 10' lldb)br?command?add?1????????;給斷點1增加命令command>p?icommand>btcommand>DONE lldb)po?$r0??????????????????;ios中特別支持的打印對象數據,特別好用 lldb)x/10xw?addr?????????????;查看內存,類型gdb?length?10?x?hex?w?word lldb)process?interrupt???????;強制進程中斷 lldb)register?read?all???????;讀取所有的寄存器 lldb)exit????????????????????;退出 lldb)memory read --force --outfile ~/data.dump 0x000d6000 0x000d2000+0x00000000000d6000 ;dump內存 lldb)watchpoint set expression -w read -s 1 -- 0xbfffcbd8 ;地址執行斷點 lldb)watchpoint set variable -w read myvar ;地址執行斷點 lldb)memory find addr addrend -s 'xx' ;內存查找 lldb)memory write -s 4 'addr+4' 'abcdef15' ;內存修改 lldb) im loo -n puts 1 match found in /usr/lib/system/libsystem_c.dylib:Address: libsystem_c.dylib[0x0000000000011d9a] (libsystem_c.dylib.__TEXT.__text + 69850)Summary: libsystem_c.dylib`putslldb)(lldb) settings set target.run-args 1 2 3 (lldb) run or:(lldb) process launch -- <args> (lldb) process launch --stop-at-entry -- -program_arg value????2、啟動進程調試,斷在函數入口
?????????(1) ios上使用debugserver啟動可執行程序
$debugserver?-x?backboard?*:1234?/var/mobile/Containers/Bundle/Application/3F55C4D3-FC36-4A08-85D4-287BED0D0B06/APP.app/APP /private/var/mobile/Containers/Data/Application/306D682A-0A72-4765-AA4B-1881001FE306????????(2)osx上lldb連接調試
$lldb lldb)process?connect?connect://192.168.1.104:1234 lldb)ni????????????????;ni多次直到出現下面 invalid?thread lldb)process?interrupt?;此時將進程中斷,稍等片刻即可中斷 lldb)image?list?-o?-f??;模塊都已經加載,此時是進程最開始時候,可以隨便下斷點????3、有符號支持的調試(因沒有sdk有條件的同學可以一試)
;將ios設備上的可執行程序下載到osx可以使用scp吧 $target?create?-arch?armv7?~/APP $b?-[T1CommerceOfferHowWorksView?setHiddenObserver:] $image?lookup?--address?0x100123aa3?--verbose三、問題與總結
1、lldb版本太低造成指令解析與ida中不對稱
>卸載xcode,使用xcode-select --install直接安裝最新的命令行工具,我安裝后的版本是340,之前的330會有這個問題
2、脫殼app
>在終端執行下面這條命令,前提是下載好dumpdecrypted.dylib文件即可
;cycsrit附加要調試的進程 $cycsrit -p pid;獲取進程的臨時目錄 cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0] #"file:///var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents/";將dumpdecrypted.dylib拷貝到進程的目錄下 $cd /var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents/ $cp /var/root/dumpdecrypted.dylib dumpdecrypted.dylib $DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /private/var/mobile/Containers/Bundle/Application/1E821425-7743-4D5A-B704-6515694D420A/APP.app/APP?;執行完成后會在目錄下生成APP_decrypted?
3、怎么知道app的架構?
>
查看架構
otool -f app
查看架構
lipo -info Twitter
4、osx+wireshark抓包
>在終端執行下面這條命令,前提是下載好dumpdecrypted.dylib文件即可
$rvictl -s $instruments -s devices $brew install ideviceinstaller $idevice_id -l $rvictl -s 07c815ece77928322b48aaadbf3599d521eb5fb1?
參與鏈接:
http://versprite.com/og/ios-reverse-engineering-part-one-configuring-lldb/
https://aigudao.net/archives/244.html
http://casatwy.com/shi-yong-lldbdiao-shi-cheng-xu.html
http://bbs.iosre.com/t/debugserver-lldb-gdb/65
轉載于:https://my.oschina.net/u/2424583/blog/651309
總結
以上是生活随笔為你收集整理的ios逆向小试牛刀之操作手记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle Redefine tabl
- 下一篇: yield return关键字怎么使用?