測試環境為:
安卓2.3
IDA6.6
下面看具體操作步驟:
具體怎樣用IDA動態除錯我就不多說了,網上己經有很多文章了,下面直接進入正題。
1.準備好調式環境後 用IDA附加程式。
2.附加成功後按"G"鍵 跳到dvmDexFileOpenPartial函式與fopen函式與fgets函式去下好斷點。
3.下好斷點後我們來說說它的反除錯吧,下面我給兩張圖片大家可能就會明白它的反除錯是怎麼一回事了。
在除錯狀態下檢視程式 TracerPid 不為0
在非除錯狀態下檢視程式 TracerPid 為0
上面TracerPid: 23131
不為0時表示跟蹤當前程式的程式ID,如果是0,表示沒有跟蹤。
4.明白了反除錯後就可以進下面脫殼步驟了 F9 執行 斷在fopen
5.開啟程式成功後使用fgets獲得資訊 當獲得如下資訊進我們將其修改為 0
修改為 0 後
6.我在測試時它檢查了兩次,都修改後就會來到這裡。
7.這樣就得到了解密後的DEX開始地址與大小,R0為存放DEX資料開始地址,R1為Dex大小,Dump出來。
8.寫個簡單的過idc指令碼將其dump出來,開始地址加上dex大小就是結束地址了。
0x446DC4E4為開始地址加上大小後等於0x4472AFBC(結束地址)
auto fp, dexAddress;
fp = fopen("C:\\test.dex", "wb");
for ( dexAddress=0x446DC4E4; dexAddress < 0x4472AFBC; dexAddress++ )
fputc(Byte(dexAddress), fp);
9.使用idc指令碼將其dump出來
執行完指令碼後c盤就會出來明文的DEX了,到此脫殼完成。
重新打包時一定要刪除AndroidManifest.xml檔案中
android:name="com.shell.SuperApplication" 殼入口。
這樣原始的dex檔案就被dump出來了。
完.
樣本及文件下載
http://yunpan.cn/cASwMkjaMwaTy (提取碼:ce81)