本帖最后由 gjden 于 2019-9-24 16:44 编辑
GDA3简介(下载链接: www.gda.wiki:9090)
GDA是一款由本人对反编译理论的长期研究和实践而形成的全交互式反编译器。GDA是国内第一款也是为一款全交互式反编译器,一款简洁、轻便、快速的交互式Android反编译分析工具,无需安装,也无需java和android sdk环境支持,目前支持apk、dex、multi-dex 、odex、oat类型的android文件反编译分析。
在Android可执行文件反编译分析上,GDA摆脱了使用java速度慢的问题,完全采用C++完成核心反编译引擎的编写,并且使用了字节码直接转java伪代码的解析方式,无需转换成smali汇编后在做反编译,大大提升了解析速度。
此工具提供了很多实用工具,如查壳功能、odex转dex、oat转dex、xml二进制解析器、算法工具、android设备内存dump等等功能,在交互式分析上,提供了( multi-dex的跨dex的 )字符串、方法、类和域交叉引用查询、调用者查询、搜索功能、注释功能、分析结果保存等等功能。
在GDA3中我重写了所有反编译器代码,从反汇编、数据流分析、中间语言优化、结构化分析等都做了重大算法改变,同时极大的优化DEX解析引擎、恶意行为检测引擎、查壳引擎,相比GDA1、GDA2,在分析速度、稳定性、使用体验方面都有极大的改善和提升。
运行环境:win7,xp,win8,win10(注意由于加壳的缘故使得win10或者杀毒软件报毒,请自行甄别)
【GDA反编译器实现原理】
GDA的反编译器实现采用了7阶段分析的模式,这也是一种类“ 前端 -反编译-后端”的实现方式,但与传统的反编译器实现上有所差别,同时在算法速度和反编译效果上做一些权衡,当然反编译器时刻都在进行优化和提升之中,由于反编译器的实现较为复杂,需要处理的细节比较多,所以此处仅仅是非常简单的介绍GDA的反编译核心实现,实际上也谈不上是实现原理。
1.dex文件解析
dex文件解析主要用于定位类,方法,域以及字符串等等信息,其中反编译器需要用到字节码是直接从method中解析得来,此外GDA还需获取try-catch信息,调试信息等以备后用(主要在代码生成时使用)。
2.指令解码
对方法的字节码进行解码,类似于反汇编,识别出240多条字节码并将其转化为低级中间表式(LIR)和高级中间表式(GDA的中间表式并非如llvm的文本型中间表示,而是内存结构型的表达式),然后对中间表式进行优化,剔除无效语句,然后生成控制流图。GDA中每个低级中间表式都一一对应着字节码指令,高级中间表式的数目小于等于低级中间表式的数目。此外,之后实现的污点传播分析引擎也是基于高级中间表达式进行的。
3.控制流图的生成
扫描每个高级中间表达式,查找分支、跳转指令建立基本块儿(同时把try-catch也考虑进去),进一步建立起控制流图。此外还需要对控制流图进行优化,简化控制流图,去除无意义的基本块,GDA还在这个阶段做一些反混淆的工作,用于对抗一些无用跳转,但是此处作用有限,更进一步的反混淆在数据流分析中实现。
4.数据流分析
有了控制流图,使用DFS遍历控制流图对基本块儿内及块间进行数据流分析,本处GDA并没有采用du(定义使用链)来实现,而是采用了比较快的使用定义计数法来实现数据流分析,对低级中间代码进行优化。此外,数据流分析中,GDA同时实现了类型推断,以给每个低级中间表式的输入输出值确定其类型。同时,反混淆也在数据流分析中实现。
5.高级中间代码生成
优化完成后,就可以生成高级中间代码,按照DFS遍历每个基本块,以基本块为单位进行高级中间代码生成,此处需要应用复制传播来进行低级中间表式的迭代,以生成大幅缩减的代码语句。同时应用调试信息来修改变量符号。
6.结构化分析
GDA到这个阶段实现了多复合条件的分析,并对二路(if-else)、多路(switch-case、try-catch)、环(while、do-while、for)结构进行了结构化分析,为最终代码输出做准备。结构化分析时对于非结构化图,只能采用goto来实现,确保反编译后逻辑正确性。
7.java代码生成
最后按照java的代码格式来生成代码,尤其对于try-catch型的结构,为了防止try块儿于代码的生成以method为单位也可以以类为单位进行代码生成。GDA主要以method为单位,并将类和方法进行了分离。
当然反编译器的实现还只是一个开端,要成为一个可用的交互式反编译器,还需要基于反编译器来支持更多的特性。
111.gif (833.38 KB, 下载次数: 9)
gda界面
2018-5-29 11:31 上传
222.gif (934.74 KB, 下载次数: 5)
search
2018-5-29 11:45 上传
333.gif (786.93 KB, 下载次数: 7)
hunxiao
2018-5-29 15:13 上传
GDA3.66
1.(需root)设备dump功能支持android 5以上,支持64位arm系统
2.修复内部类名称在package显示过程中的不一致问题
3.删除了反编译代码中的多余label
4.优化数组初始化的反编译显示
5.加强了URL搜索的特征
6.类成员名称自动重命名
7.import支持超链接
8.重写设计了代码着色器的着色算法,大大提高了超大方法作色速度
9.修复了在multi-dex分析中速度会明显变慢的问题
10.修复了误入HexView,再后退(esc)时的一些问题
GDA3.65
1.修复反编译结构化分析的一些问题
2.修复易语言编写的apk出现乱码的问题
3.修复了按“下箭头键”出现鼠标跟随的问题
4.优化了反编译代码
5.调整gda分析保存结果的文件处理,支持了multidex的分析保存。
6.按光标位置对相应的小括号高亮
GDA3.63
1.优化反编译器
2.纠正字体配置时,重启丢失问题
3.调整了反编译代码输出策略
GDA3.62更新
1.为反编译器编写了污点传播分析引擎,实现了正向污点传播识别sinks,以及反向污点传播识别source。加入大量source特征和sink特征,可以用于寄存器变量追踪、数据流分析、自动分析隐私泄露、恶意行为等。
2.对内容搜索(ctr+f)添加了搜索列表功能,以及双击列表项自动定位功能。<