反编译工具篇 1) jadx 爆锤 jeb 和 GDA

  • A+
所属分类:移动安全

00 前言:

首先,这只是我对自己常用的几个反编译器的对比,带有强烈的主观倾向。

然后,我对这几个工具的作者都十分尊重,感恩他们写出了这么好的工具,这里并没有拉一个打一个,或者贬低谁的意思,我觉得都是大佬。

至少人家编译原理的熟悉程度,不是我不能比的,我还要再学挺久才能到达人家那个高度。

还有,对比的只是我自己经常用的功能,我并没有像素级的使用每个功能,并详细对比,结论也会一定程度的偏颇,大家这里做个参考就好。

这里,我只是站在一个普通使用者的角度。去开箱做对比,没人给我塞钱让我说好话或说坏话,毕竟我也没啥知名度,只是个小透明。


这里主要登场的工具版本号是

GDA3.95 免费版 (收费版我没用过,想着后续跟工地申请一下,买一年用下)

jadx-gui 1.2.0

jeb pro 3.19  (实测 jeb pro4.3跟这一版 区别不大)



工具截图

这里我经常用的反编译工具主要有3个  GDA jadx-gui  Jeb 这里先上一下工具截图

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

上图有的工具不是最新版,主要是因为懒得去更新,而不是因为我选的这个版本版本稳定啊之类的。

下面用网上的一个apk样本,和我自己写的一个apk样本, 简单说一下这三个工具的优缺点。

01 apk样本相关

样本1

来源:

https://www.52pojie.cn/thread-311989-1-1.html

样本1 是被 dexguard加固壳加固过的样本,dexguard在国内用户不多,是歪果仁写的加固壳, 这个加固壳的特点就是,java层混淆很强,比国内的很多壳强多了。

这个样本是14年的,混淆不是那么变态,这两年的dexguard真是让人看了就想直接回收站。

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

样本2

来源:一个不愿透漏姓名的某铁头 自己写的

某铁头自己写的这个apk,写了一个字符串加密的方法,并且进行了调用,就是为了让大佬们对比某工具,反混淆优化的效果。

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

之所以选择这两个样本,是为了更好的展示这几个反编译器的优缺点。


02 JADX-GUI  登场

github地址:https://github.com/skylot/jadx

编译好的release版本地址:https://github.com/skylot/jadx/releases

当前演示版本:1.2.0

Jadx-Gui的优点

1.反编译的代码可读性强

1.1 有调试信息的apk反编译对比:

首先看源代码

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

在有调试信息的apk里, 完美还原了所有的变量名。

看完smali, 看看反编译的java代码。

反编译工具篇 1) jadx 爆锤 jeb 和 GDA



这里看看友商的表现

1.1.1 jeb出来挨锤

首先是 debug版带调试信息apk  Jeb 和 Jadx反编译的对比

这里可以看到,参数和一个局部变量的名字并没有完美还原。

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

行吧,下一个。

行吧 这一场 jadx-gui 成功 ko Jeb .

1.1.2 GDA出来挨锤

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

这里e2  我猜测作者 可能是考虑到多重异常嵌套的情况下

为了区分,所以加了一个随机数?

但是这里类型都错了还是比较减分的。

同样的问题,换到3.85就没有了, 这里想着,可能是GDA作者做新功能 类似frida 支持啊之类的太累,所以出了bug?

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

行吧  下一个吧。

这一场 jadx-gui 成功 ko GDA .

1.2 无调试信息 被混淆过的apk反编译对比:

如果没有调试信息,又会咋样呢?

这里找了一个用Proguard混淆过代码,并且删除过.source信息的样本。

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

这里看看jadx对方法体对代码的还原。

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

这里可以看到,在没有任何调试信息,还被Proguard混淆过后,Jadx自己实现了一套重命名的规则。

简直是福音一样,代码变得清晰可见,吊打友商。

看看友商是啥样

1.2.1 GDA和JEB同时被锤。

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

这里GDA和jeb两个友商恢复的代码,可读性都不咋样

不管是 p0 p1 p2 还是 arg8 arg10 arg11

可读性都不强,自己一个一个改 可太累了


2. 字符串 搜索简单便捷 展示信息全

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

2.1 GDA出来挨锤

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

这里GDA搜索字符串 详情,只展示了字符串信息,没展示引用代码。

字符串所在的方法,对应的包名啊类名啊,都没有展示。

这里字符串少还好,如果十多个地方引用到了,我不得看看包名,类名,引用代码,然后定位我想要分析的位置吗。

害,下一个。

2.2 JEB出来挨锤

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

查看引用之后

反编译工具篇 1) jadx 爆锤 jeb 和 GDA

JEB这里搜索字符串这个步骤 就比较麻烦了,

多了一个查看交叉引用的操作,把操作分解成了2个操作。

而且详情展示这里,展示的也不是java代码 ,而是smali, 咋,是让我人肉翻译成java吗?

行吧,下一个

3. 免费

另外两个工具,JEB Pro 和 GDA Pro都是收费的

这个没啥说的,恰饭挺正常的。

jadx-gui 不要钱就是香。


后续还有两篇

2) jeb   爆锤 jadx 和 GDA

3) GDA 爆锤 jeb 和 jadx

每个工具都有自己优缺点,结合着用才爽


相关资料 公众号  直接回复 工具 就可以下载了

没排版是因为忙着睡觉


王某某于 0719 

本文始发于微信公众号(移动安全王铁头):反编译工具篇 1) jadx 爆锤 jeb 和 GDA

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: