首发于逆向工程

GDA关于android脱壳的问题说明

有不少人来问我GDA(官网下载)如何脱壳的问题,这里做一个统一说明。首先需要声明的是GDA的Dumper工具是我在2015年做的,期间很少维护,当时主要用于dump加密的dex, 也用于dump一些固定的内存区域,实际上不适合用于脱壳,更好的自动化脱壳方法有很多,请自行搜索。早些的壳都把原始apk或者dex文件加密隐藏起来,等加固代码运行起来后再对其进行解密、加载、执行,这种壳只需要把内存中的dex dump出来就可以了。但是目前的许多加固方案会抽取代码或者将代码纳入到so中执行,对于这种情况直接dump出来是不完整的DEX,需要自己对DEX文件进行修复。此外,目前的越来越多的Android恶意代码开始使用一些定制化的打包技术躲避查杀,在很多情况下使用GDA Dumper抽取出来的恶意代码DEX是能够正常分析的。

使用GDA进行android内存dump实在太简单,大部分问我的人应该是初学者,Dump内存3步走:1.打开设备->2.选择并打开进程->3.选中要dump的内存段dump即可。

首先需要你将手机连接上电脑(模拟器不需要),点击GDA的dump按钮(1)或者菜单栏的Tools->Device dump,然后GDA就会连接手机把android系统中的进程列举出来。默认情况下,GDA只列举app进程,如果需要查看所有运行的进程可以通过右键菜单->所有进程来查看:

然后选中一个你感兴趣的进程(当前行出现淡蓝色背景为选中)双击或者右键菜单(2)->打开进程(3),GDA便会列出该进程的内存模块。默认情况下显示dex,你还可以选择odex、so、jar、apk等模块进行查看。下图是打开其中一个进程后过滤出来的dex模块。

接下来就可以dump你感兴趣的模块了,鼠标选中模块右键(1)->DUMP Module(2)。等候即可,如果模块是连续的多个内存段,可以鼠标拖拉选中多个模块进行DUMP。小等一会儿,便会弹出对话框提升dump成功还是失败,如果成功,GDA Dumper便会把dump出的dex文件存放在GDA工具的同目录下,最后点击OK按钮可以查看dump出来的dex文件(3)。

4.有部分手机或者模拟器会dump失败,原因是GDA没有成功的将Gdump程序推入到Android系统中,所有需要手动将这个工具push进去。Gdump工具存放在GDA的工作目录%APPDATA%\GDA(C:\Users\jonh\AppData\Roaming\GDA)下,有一个Gdump工具,你需要将这个工具push到Android系统的/data/local/tmp目录下,如图:

adb push %APPDATA%\GDA\Gdump /data/local/tmp


然后修改Gdump的读写执行权限即可。

adb shell chmod 777 /data/local/tmp/Gdump

adb shell /data/local/tmp/

Gdump(测试是否可以执行)


那么现在你就可以是用GDA来dump指定模块了。

编辑于 08-20

文章被以下专栏收录