IDA远程调试 在内存中dump Dex文件


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文件其实是不完整的,因为代码段保存在了内存中的其他位置。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM