GDA反编译器与其他android逆向工具对比

GDA反编译器与其他android逆向工具对比

目前市面上各种逆向工具比较多,许多工具是集成核心解析工具的集成软件,极少数才是真正拥有核心反编译技术的,能称得上反编译器的工具必须实现核心的反编译技术:图的构造、低级中间语言/高级中间语言生成与分析、数据流分析、控制流分析、结构化分析,最后通过代码生成模块输出高级语言。


一、核心解析工具,其主要功能通过java编写而成


Apktool: 解包apk,反编汇出smali代码,重打包apk.

Smali2java: 将smali代码反编译成java代码

Dex2jar:将Dex文件转换为java的jar文件,使用asm库将dex转化为java的calss文件(jadx也使用了同样的方法)。

Jd-gui:java反编译器,但是交互式操作非常差。


二、集成化反编译工具


以下是常用的各种集成化反编译工具,他们几乎都离不开上面这几款核心解析工具,这些工具提供一个UI界面来显示和管理以上核心解析工具的运行结果。

Smali2JavaUI: apktool+smli2java。将smali代码反编译成java代码的工具,依赖于apktool工具反汇编出smali文件。缺点:反编译易出错,交互性差。

Android逆向助手: 集成apktool、dex2jar、jd-gui

ApkToolkit: apktool+dex2jar+jd-gui,…

Android Killer:apktool+dex2jar+jd-gui

JEB:著名的商业化交互式反编译器,真正意义的daviki反编译器, 反编译器是自己实现的,但也集成了大量第三方工具。


另外需要特别提的是JEB,也是最为昂贵的反编译工具(每年都支付巨额资金,使用盗版的就另当别论了)。其核心的反编译引擎是自己实现的。因此具有非常好的交互性,如进入方法查看、交叉引用、注释等等。但是也集成了大量的工具,所以体积相当大,目前最新版本已经超过500M了,下面只是他用到的第三方工具的冰山一角。


此外Jadx工具利用asm和java反编译技术实现dex的反编译,实际也并非daviki反编译器。她的实现流程大致为:

解析apk->解析dex->生成smali代码->利用asm生成class文件->java反编译处理->得到java代码。

由于其反编译器采用的java反编译器,所以反编译效果不错,不过对于复杂app以及在转换成为class过程中会出问题, 当然交互性也不好,没有交叉应用等功能。

当然这些工具无论是用windows可执行文件实现还是利用字节码程序(java编写的),都离不开java虚拟机。因此导致反编译速度慢,即使像JEB这样的工具号称直接字节码转java,也同样速度很慢,当然比起其它的集成化UI工具来说快很多了。

因此,根据以上提及的Android APK反编译工具,实际上只有两个反编译引擎的现实案例Smali2java和JEB(Jd_gui实际上是java的反编译器,暂时不列入对比),而且都是不开源的。

三、GDA反编译分析工具

GDA是本人独立开发的dalvik反编译器,通过C++实现,完全不依赖于java执行,功能强大、分析速度快、程序轻便,无需各种繁琐的配置和安装,直接一个2M多的程序即可快速运行,内存占用小,CPU消耗低。



当然GDA和JEB还有各自特有的某些功能,比如GDA还有支持包过滤的分析功能,提供有算法工具,文件转换工具等等。而最新JEB则支持字节码调试功能(当然目前用起来还不太好用,希望改进),PDF解析功能,最重要的是提供了API可以自定义分析处理。在反编译方面与JEB比起来还有优化的空间,当然JEB是一整个公司团队在做开发维护,GDA只是本人一个在做开发,而且空余时间有限,所以不足之处还请谅解。

编辑于 2019-06-11