IDA遠端除錯 在記憶體中dump Dex檔案

☆綠茶☆發表於2016-08-02

1. 首先使用除錯JNI_OnLoad函式的方法,先將apk以除錯狀態掛起,使用IDA附加上去。

2. 然後在libdvm.so中的dvmDexFileOpenPartial函式上下一個斷點

3. 然後我們點選繼續執行,程式就會在dvmDexFileOpenPartial()這個函式處暫停,R0暫存器指向的地址就是dex檔案在記憶體中的地址,R1暫存器就是dex檔案的大小

4. 然後我們就可以使用ida的script command去dump記憶體中的dex檔案了。

static main(void)
{
  auto fp, begin, end, dexbyte;
  fp = fopen("C:\\dump.dex""wb");
  begin = r0;
  end = r0 + r1;
  for ( dexbyte = begin; dexbyte < end; dexbyte ++ )
      fputc(Byte(dexbyte), fp);
}

 Dump完dex檔案後,我們就可以用工具來檢視了。

 當然這只是最簡單脫殼方法,很多高階殼會動態修改dex的結構體,比如將codeoffset指向記憶體中的其他地址,這樣的話你dump出來的dex檔案其實是不完整的,因為程式碼段儲存在了記憶體中的其他位置。

 

http://www.cnblogs.com/shaoge/p/5425229.html

相關文章