1. 程式人生 > >IDA附加除錯apk程式,並修改記憶體,編寫IDA指令碼程式,把修改後的dex檔案dump到本地

IDA附加除錯apk程式,並修改記憶體,編寫IDA指令碼程式,把修改後的dex檔案dump到本地

我的測試環境:模擬器 Android 4.2 armeavi-v7a

 

1.IDA附加除錯apk程式

找到IDA所在目錄,在dbgsrv資料夾下找到程式android_server

在這裡按住“Shift +滑鼠右鍵”,開啟控制檯


把程式android_server     push到安卓裝置/data/local/tmp/目錄下、提權並執行


轉發埠

在開啟一個控制檯


 

注意:在這裡我們要先在裝置中執行之前安裝的apk。

 

之後開啟IDA程式

 


到這裡就附加成功了,我們下一步就可以修改程式的記憶體了。

2.修改程式記憶體


這個程式是一個算加法的程式,正常結果是13,我們修改記憶體中方法的二進位制程式碼,將其改為減法。

 


再開啟一個IDA,找到方法的程式碼相對於dex檔案的偏移。

將apk檔案解壓,把解壓出的dex檔案在IDA中開啟,找到這個方法的偏移大小

因為這個測試程式是自己寫的,所以我知道方法就在MainActivity這個類中,為了快速找到,我們“Ctrl +F "直接搜尋


我們看到相對於dex檔案頭的偏移大小是0x13F808

 

然後我們在附加程序的IDA中找到記憶體中dex頭的地址大小

在附加程序的IDA介面按快捷鍵“Ctrl + S”,選擇dex檔案


在Hex View-1檢視中點選滑鼠右鍵,完成如下操作


找到dex頭在記憶體中的地址 0x4BD6B028

到這了我們就可以算出方法在記憶體中的位置

dex頭在記憶體中的地址 0x4BD6B028  + 相對於dex檔案頭的偏移大小是0x13F808 = 記憶體中方法的地址是 4BEAA830

 

我們在附加程序的IDA中找到這個地址位置

快捷鍵“G”,輸入地址0x4BEAA830

我們將90 改為 91,便將方法中的加法改為減法了

滑鼠點選90,按快捷鍵“F2”,將其修改為91,之後在按F2 儲存

之後點選執行程式

結果為1,我們已經將加法變為減法了


3.接下來我們將記憶體中的dex檔案通過執行IDA指令碼程式dump到本地

前面我們已經知道了dex頭在記憶體中的地址 0x4BD6B028

接著來要知道dex檔案的大小

瞭解檔案結構的話,就知道0x261A94就是dex檔案的大小

不知道,那也沒關係,我們使用工具010 Editor執行dex模板檢視,結果相同

接著我們編寫IDAdump指令碼,並執行。

開啟指令碼視窗- File–ScriptCommand 或直接用快捷鍵“Shift +F2”

static main(void){
    auto fp, begin, end, dexbyte;
    //開啟或建立一個檔案
    fp = fopen("d:\\dump.dex", "wb");
    //dex基址
    begin =  0x4BD6B028;    
//dex基址 + dex檔案大小
end = begin + 0x261a94;
    for ( dexbyte = begin; dexbyte < end;     dexbyte ++ ){
//按位元組將其dump到本地檔案中
fputc(Byte(dexbyte), fp);
}
}
 

我們發現dump下來的dex檔案,與我們本身的dex檔案是不同的

 

用工具Beyond Compare,選擇16進位制比較

找到不同的地方後用010 Editor工具檢視具體情況。

後續更近。。。