天天看點

ios逆向小試牛刀之操作手記

一、環境準備

    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 i
    command>bt
    command>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`puts

lldb)(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

版權聲明:本文為CSDN部落客「weixin_33898233」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_33898233/article/details/92280130