安装IDA调试服务: adb push android_server /data/local/tmp
运行IDA调试服务:adb shell & cd /data/local/tmp & ./android_server (确保 adb是root权限下运行调试服务)
设置端口转发: adb forward tcp:23846 tcp:23946
运行程序: adb shell am start -D -n com.ali.tg.testapp/com.ali.tg.testapp.MainActivity
IDA设置:
IDA附加进程:Debugger->Attach->Remote ARMLinux/Android debugger
Ctrl + F -> ali 选择进程附加
在模块视图中搜索 libdvm.so
在libdvm.so中搜索 dvmDexFileOpenParth
双击函数调转到位置下断点
运行jdi调试服务:jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
在IDA中使之运行到断点处,查看寄存器的值,R0对应着dex的内存地址,R1对应着dex文件大小
运行脚本dump文件:
static main(void) { auto fp, begin, end, dexbyte; fp = fopen("d:\dump.dex", "wb"); //打开或创建一个文件 begin = R0; //dex基址 end = begin + R1; //dex基址 + dex文件大小 for ( dexbyte = begin; dexbyte < end;dexbyte ++ ) { fputc(Byte(dexbyte), fp); //按字节将其dump到本地文件中 } }