原文地址:http://bbs.pediy.com/showthread.php?t=203916
原文作者:gjden
分析工具:GDA
编写环境:vc6,MFC
内部版本:11.0
发布版本:1.11
运行环境:win7,xp,其它未测试过
工具特色:
独立于java和android sdk,无需安装java和android sdk即可使用,完全使用c++编写,快速解析dex或apk,odex转dex,直接指令修改,修正后的xml解析器(可解析腾讯加壳处理过xml),快速dump设备内存,交叉引用(字符串,方法,类和域),快速字符串搜索,还算友好的smali阅读界面等等,希望对逆向分析能有点用吧。
后 续:由于时间和精力有限,还有很多想实现的功能还未实现。
意见反馈:请加qq群37432877,敬请指教。
一、简介:
GDA(GJoy Dex Aanalyzer),写这个工具主要是为了便于自己分析,有的功能还比较鸡肋,只在xp和win7上测试过,自己的主要需求是:方便脱壳和破解,不想在电脑和各虚拟机里都安装java才能用,不想每次分析个功能还需要反编译,希望可以直接修改dex的指令,能够直接连接android设备,dump自己想要的内存模块等等。另外,在做分析过程中很多做了处理或者加了壳的apk往往等了很久结果却冒出来一个反编译失败,这种情况常常遇到,于是决定了利用空闲时间写了这么个小工具,但是目前只能反汇编smali,对于反编译java这个也试着在写,反编译java代码写得很累,可以参考的资料很少,还不知道啥时候能完成,只能尽力而为了。
工具没有什么技术含量,很多代码都参考于互联网,欢迎拍砖,大量的时间都花在了解决一下界面显示问题,结构设计问题和调试排错上,确实很累人。GDA工具的反汇编引擎使用的是开源的dexdump,按照自己的需要做了修改和加强,并修复了一些bug。
如果只使用这个工具静态分析病毒或者研究壳的话,需要一定的smali汇编阅读能力,废话不多说,以下简单介绍使用方法,文档写得有些草率,有些小的功能和逻辑还没来得及介绍,还望谅解。
二、使用说明
界面布局和简单功能介绍:
![](http://bbs.pediy.com/attachment.php?attachmentid=99887&thumb=1&d=1441526822)
工具实现了如下功能:
1. APK/DEX/ODEX文件解析,二进制xml解析(能够正确解析加固版的xml二进制文件)。
2. ODEX文件中提取DEX文件
3. 直接对DEX的指令进行编辑修改(方便破解,不用反编译),单指令反汇编,smali操作码编译成字节码(后续有时间支持整条smali编译)
4. 对方法,类,字符串等进行快速搜索
5. 支持方法,类,字符串等的交叉引用
6. 方法访问回滚,方法跳转。
7. 简单的命令支持
8. 连接android设备,对指定进程的内存进行dump。
9. 十六进制显示非方法区域。
10. 命令行shell。
其他主要窗口简介:
类基本信息显示
![](http://bbs.pediy.com/attachment.php?attachmentid=99876&thumb=1&d=1441526598)
所有字符串
![](http://bbs.pediy.com/attachment.php?attachmentid=99882&thumb=1&d=1441526649)
Xml显示窗口
![](http://bbs.pediy.com/attachment.php?attachmentid=99883&thumb=1&d=1441526649)
内存dump窗口
![](http://bbs.pediy.com/attachment.php?attachmentid=99879&thumb=1&d=1441526598)
![](http://bbs.pediy.com/attachment.php?attachmentid=99878&thumb=1&d=1441526598)
CMD命令窗口
![](http://bbs.pediy.com/attachment.php?attachmentid=99877&thumb=1&d=1441526598)
搜索窗口,双击结果行,可直接进入结果所在的方法
![](http://bbs.pediy.com/attachment.php?attachmentid=99881&thumb=1&d=1441526598)
其他的自己去发觉吧。
三、快捷键
ctr+c 拷贝数据
ctr+f 查找当前窗口的字符串
m/M 光标置于指令行时编辑指令
g/G 跳转到指定偏移地址
s/S 从全局搜索字符串或者选中的字符串
x/X 交叉引用(支持字符串,类,方法,域的交叉引用)
d/D dump当前访问的二进制数据
<-/backspace/esc 回到上一次访问方法
-> 下一个访问过的方法
UP 把焦点放在左边树形控件上,按下up键可以访问基于内存的上一个方法
Down 把焦点放在左边树形控件上,访问基于内存的下一个方法
Enter 对所有编辑框的输入修改生效
四、破解与脱壳的简单使用步骤:
破解步骤:
1.打开dex,可选中optload进行自动定位到入口activity,只有AndroidManifest.xml中描述的package与dex中的package相同才能凑效(如果选中后打开dex文件,只解析com包的类,解析完成后如果classes.dex目录下存在AndroidManifest.xml,会自动解析此文件,并且定位到其中指定的第一个执行的activity.如果打开之后点击,则会直接定位到主activity)
2.s查找字符串,找到关键点,
3.m修改跳转指令
光标移动要修改的指令处M,显示如下:
![](http://bbs.pediy.com/attachment.php?attachmentid=99884&thumb=1&d=1441526649)
1)向偏移框中填入偏移地址可用反汇编地址处的指令,修改后enter
2)指令框中可用直接修改指令,修改后enter
3)smali框可修改操作码,如if-ltz改为if-nez,修改后enter
4.open->save modify保存修改,如果打开的是apk,选save dex as
5.dex拖入apk压缩包中,签名即可。
脱壳与分析步骤:
这部分功能还比较弱,需要root才能dump,以后会引入注入模块来实现更强的功能。
1.打开dump窗口(点击按钮dump,或者菜单tools->open device)
2.等待窗口链接设备,直到显示出所有进程,有时候有点慢。
3.双击所选进程行,或者右键打开进程,等待显示所有进程模块
4.单击要dump的模块,或者选中多行右键菜单dump即可dump出此模块,dump的文件存放在{GDA当前目录}/dum/{进程名}/{模块名}
5.打开dump出的odex或者dex,如果是odex可以在菜单open->save as dex将odex转化为dex.
6.如果需要修复dex,那只能靠自己了。
7.打开dex并分析。
链接: http://pan.baidu.com/s/1jGkyeNk 密码: y482
|