Android逆向系列之脱壳篇–Dump Dex

111111111

一、环境准备
alictf-apk-300、IDA、DDMS、模拟器(或真机)、其他必备环境,如有问题请移步前面的工具篇等文章

二、原理简介
dvmDexFileOpenPartial函数是执行dex文件,因此会有真正地关于dex文件的一些主要的信息
函数原型:
int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex);
第一个参数就是dex内存起始地址,第二个参数就是dex大小。所以在这个函数下断点可以直接dump出明文dex.

三、Dump dex步骤

调试步骤可参考JNI_Onload《动态调试so文件》一文,这里仅说明简单步骤
1、adb remount
2、adb push android_server /system/bin
3、adb chmod 777 android_server
4、adb forward tcp:23946 tcp:23946
5、adb shell am start -D -n 包名/类名
6、开启IDA
7、选择debugger–>attach–>remote armlinux/android debugger–>localhost–>选择对应进程
8、debugger–>debugge options–>勾选在lib load挂起两个选项
9、寻找dvmDexFileOpenPartial函数并下断点
方法1:
IDA中找到module窗口,ctrl+f输入libdvm.so,然后双击该模块,ctrl+f输入dvmDexFileOpenPartial,右键,点击add breakpoint
方法2:
adb pull /system/lib/libdvm.so —>IDA打开找到dvmDexFileOpenPartial函数偏移
ctrl+s打开,找到libdvm.so基地址;计算出绝对地址=基地址+偏移地址
按g输入绝对地址跳转到相应位置,按F2下断点
10、打开DDMS,勾选相应进程
11.jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
12.F9运行,第一次断在linker、再运行一次,则断在dvmDexFileOpenPartial函数处,如下图:
断点2
13、查看寄存器的值
寄存器
14,File–>script command–>输入代码(如下图)–>run–>Dump 成功
脚本

四、反编译dex文件
方法多样,这里使用baksmali
baksmali

参考资料:

[AliCTF-evilAPK300]dex加固初级破解与webview利用


http://drops.wooyun.org/tips/6840

本文属于原创,转载请注明出处tasfa.cn 如有问题请联系管理员root@tasfa.cn

发表评论

电子邮件地址不会被公开。

You must enable javascript to see captcha here!