Android動態除錯so之dump記憶體資料
1.配置環境
一臺已root手機
IDA pro6.6
Android SDK
準備工作:
1.1把Android SDK新增到環境變數中
1.2把已root手機的系統中關鍵so拖到本地,必要時可以靜態讀取,獲取系統函式的偏移地址。
例如把手機系統的system/lib的檔案拖到本地debugging資料夾中。
adb pull /system/lib .\debugging\lib
1.3在IDA pro6.6中找出android_server,並把android_server放到手機system/bin中。push的時候沒有root許可權,可以如下操作:
adb push android_server /data/local/tmp adb shell su cp /data/local/tmp/android_server /system/lib
2.環境啟動
由於需要除錯程式啟動載入的so,所以步驟比較多。
2.1進入adb shell,在手機中執行android_server。
adb shell su android_server
2.2進行埠轉發
adb forward tcp:23946 tcp:23946
2.3使用除錯模式啟動程式,adb shell am start -D -n 包名/類名,以上一篇博文的dexunshellram為例,dexunshellram動態載入了crackme0201,啟動命令如下:
adb shell am start -D -n com.droider.dexunshellram/com.droider.crackme0201.MainActivity
2.4開啟IDA6.6,開啟需要除錯的so,然後選擇Debugger->Select debugger,選擇Remote ARM Linux/Android debugger。
然後選擇Debugger->Debugger options,勾選所有logging和Events裡的Suspend on thread start/exit和Suspend on library load/unload。
然後選擇Debugger->process options,在Hostname中填寫127.0.0.1,埠預設為23946。
然後選擇Debugger->attach a process,選擇com.droider.dexunshellram。
然後可能出現如下圖所示,需要add map,由於之前把手機系統的system/lib複製到電腦中,這樣可以指定到電腦的相應資料夾中,這樣就可以靜態除錯系統so。如果你覺得你用不著除錯系統函式,可以不用指定。
2.5在Android SDK中找出ddms.bat,雙擊開啟,為了後面執行jdb。
2.6在IDA中點選執行或者按F9,然後在cmd中執行一下命令啟動jdb
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
2.7IDA在linker中停下了,然後在path中找到相應除錯的libunshellram.so,選擇函式Java_com_droider_dexunshellram_unshellram_loadDex,這裡是記憶體動態載入dex的地方。在else語句之前進行斷點,就是loc_前一行插入斷點,按F2,然後再執行程式,按F9。
3.dump記憶體
如下圖所示,R0暫存器BE8F9144-48儲存著Dex檔案的地址。
可以看出暫存器儲存的地址為0x7653E008
檢視0x7653E018地址可以看出儲存的就是DEX檔案,DEX檔案是dex.035開頭的。而0x7653E038-3B儲存著是DEX檔案的長度25C5BC
把以下指令碼儲存成dump.py,通過在file->Script File,選擇dump.py。然後輸入0x7653E018,輸入長度0x25C5BC,最後輸入儲存的檔案C:\classes.dex。
import struct def dumpdex(start, len, target): rawdex = idaapi.dbg_read_memory(start, len) fd = open(target, 'wb') fd.write(rawdex) fd.close() def getdexlen(start): pos = start + 0x20 mem = idaapi.dbg_read_memory(pos, 4) len = struct.unpack('
把dex檔案dump到C盤中,由於是crackme0201的classes.dex,如果把dex放回之前博文的crackme0201的apk中,可以正常啟動應用。