“愛加密” 動態脫殼法

我是小三發表於2014-11-21

測試環境為:

安卓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)

相關文章