【GDA简介】
GDA是一款由本人对反编译理论的长期研究和实践而形成的全交互式反编译器,世界上唯一一款用c++写的android-java反编译器,中国第一款也是唯一一款全交互式反编译器。其简洁、轻便、快速,无需安装,也无需java和android sdk环境支持。支持apk、dex、odex、oat、jar、aar、class文件的反编译分析,GDA中包含多个由本人独立研究的高速分析引擎: 反编译引擎、漏洞检测引擎、恶意行为检测引擎、污点传播分析引擎、反混淆引擎、apk壳检测引擎等。
在Android可执行文件反编译分析上,GDA摆脱了使用java速度慢的问题,完全采用C++完成核心反编译引擎的编写,并且使用了字节码直接转java伪代码的解析方式,无需转换成smali汇编后在做反编译,大大提升了解析速度。
此外,在反编译引擎的基础上,我做了一些更加实用的功能,如路径求解、 漏洞检测、隐私泄露检测、查壳、odex转dex、oat转dex、加解密算法工具、android设备内存dump等等功能,在交互式分析上,提供了( multi-dex的跨dex的 )字符串、方法、类和域交叉引用查询、调用者查询、搜索功能、注释功能、分析结果保存等等功能。
快速上手:https://bbs.pediy.com/thread-220111.htm
新版下载:官网 或者github
运行环境:win7,xp,win8,win10(注意由于加壳的缘故使得win10或者杀毒软件报毒,请自行甄别)
GDA的反编译器实现采用了7阶段分析的模式,这也是一种类“ 前端 -反编译-后端”的实现方式,但与传统的反编译器实现上有所差别,同时在算法速度和反编译效果上做一些权衡,当然反编译器时刻都在进行优化和提升之中,由于反编译器的实现较为复杂,需要处理的细节比较多,所以此处仅仅是非常简单的介绍GDA的反编译核心实现,实际上也谈不上是实现原理。
dex文件解析主要用于定位类,方法,域以及字符串等等信息,其中反编译器需要用到字节码是直接从method中解析得来,此外GDA还需获取try-catch信息,调试信息等以备后用(主要在代码生成时使用)。
对方法的字节码进行解码,类似于反汇编,识别出240多条字节码并将其转化为LIR(低级中间表式)和HIR(高级中间表式)(注释GDA的中间表式并非如llvm的文本型中间表示,而是内存结构型的表达式),然后对中间表式进行优化,剔除无效语句,然后生成控制流图。GDA中每个低级中间表式都一一对应着字节码指令,高级中间表式的数目小于等于低级中间表式的数目。此外,之后实现的污点传播分析引擎也是基于低级中间表达式进行的,以支持准确的变量追踪与定位。
扫描每个高级中间表达式,查找分支、跳转指令建立基本块儿(同时把try-catch也考虑进去),进一步建立起控制流图。此外还需要对控制流图进行优化,简化控制流图,去除无意义的基本块,GDA还在这个阶段做一些反混淆的工作,用于对抗一些无用跳转,但是此处作用有限,更进一步的反混淆在数据流分析中实现。
有了控制流图,使用DFS遍历控制流图对基本块儿内及块间进行数据流分析,本处GDA并没有采用du(定义使用链)来实现,而是采用了比较快的使用定义计数法来实现数据流分析,对低级中间代码进行优化。此外,数据流分析中,GDA同时实现了类型推断,以给每个低级中间表式的输入输出值确定其类型。同时,反混淆也在数据流分析中实现。
优化完成后,就可以生成高级中间代码,按照DFS遍历每个基本块,以基本块为单位进行高级中间代码生成,此处需要应用复制传播来进行低级中间表式的迭代,以生成大幅缩减的代码语句。同时应用调试信息来修改变量符号。
GDA到这个阶段实现了多复合条件的分析,并对二路(if-else)、多路(switch-case、try-catch)、环(while、do-while、for)结构进行了结构化分析,为最终代码输出做准备。结构化分析时对于非结构化图,只能采用goto来实现,确保反编译后逻辑正确性。
最后按照java的代码格式来生成代码,尤其对于try-catch型的结构,为了防止try块儿于代码的生成以method为单位也可以以类为单位进行代码生成。GDA主要以method为单位,并将类和方法进行了分离。
1、隐私泄露检测
GDA的隐私泄露检测引擎是基于GDA反编译器的低级中间表示做寄存器追踪来实现的,其检测内核以轻量级高速污点传播引擎FlashFlow为基础, 通过扫描APP中的所有可能的敏感数据生成点(DataPin)做污点传播分析来确定泄露点。同时记录有效泄露点与敏感数据生成点之间的路径, 以方便做路劲回溯,并且输出隐私泄露报告。使用方法
2、漏洞扫描
GDA漏洞扫描引擎由漏洞检测引擎和规则解释引擎构成:漏洞检测引擎采用两级HASH TABLE来存储method,以实现method的快速定位, 同时结合GDA独有高速反编译内核、HIRA(高级中间表示分析器)、API链检测器等底层分析模块构建而成的一个高效漏洞检测引擎。 规则解释引擎采用基于堆栈状态机的规则判定法,同时采用了一种以动态执行的方式进行规则解释(动态规则解释器)。 其中规则表达式通过词法分析器和语法分析器将规则表达式存入堆栈,规则解释器是基于堆栈做规则表达式的解释执行。 这里之所以是动态的,体现在两个方面:1、词法分析器和语法分析器从左到右扫描规则,一旦检查出一条完整表达式后或者检测到算符优先级下降时, 就会调用解释器做堆栈执行,这里不会将整条规则解析到堆栈后再调用解释器执行;2、动态解释执行后的结果是一种布尔状态的值(结果中常常还会携带有更复杂的参数), 同样GDA的规则解释引擎也不会等到所有表达式执行完后再做规则判定,而是采用效率更高的动态判定方法。使用方法
3、GDA-路径求解
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-2-16 18:35
被gjden编辑
,原因: