参考文章: http://www.52pojie.cn/thread-435746-1-1.html
①. 运行IDA服务端并端口转发
②. 以调试方式启动app
adb shell am start -D -n com.CMapp/com.e4a.runtime.android.StartActivity
③. 使用IDA远程附加
④. 在libc.so中找到mmap函数设置断点,为了方便,直接设置到函数末尾了
⑤. 打开ddms或者Eclipse (必要,为了使用jdb命令),获取应用程序的端口号, F9运行程序
在命令行中执行:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700 其中port=8700是从ddms中看到的。
此时程序会断下来
⑥. 多次F9后,会来到libjiagu.so模块中,到反调试的函数中将反调试去掉
⑦. 将以上两处反调试去掉后,就可以只保留mmap函数的断点,一直F9了,查看堆栈直到出现
⑧. 内存观看r0寄存器所指向的地址,F8单步十几步之后,就可以看到解密好的dex文件,然后使用ida脚本 dump
static main(void) { auto fp, begin, end, dexbyte; fp = fopen("C:\\dump.dex", "wb"); begin = 0x5E650000; end = 0x5E650000 + 0x0004BC38; //偏移0x20处,取4字节为dex文件大小 for ( dexbyte = begin; dexbyte < end; dexbyte ++ ) fputc(Byte(dexbyte), fp); }
⑨. 使用工具查看dump.dex文件或者重打包apk文件
样本是用易安卓写的。
样本链接: http://pan.baidu.com/s/1dEpUTXn
密码: rp6u
时间: 2024-10-29 00:22:53