反编译工具篇 1) jadx 爆锤 jeb 和 GDA
反编译工具篇 GDA Jadx-Gui Jeb的对比
00 前言:
视频演示:https://space.bilibili.com/430241559
首先,这只是我对自己常用的几个反编译器的对比,带有强烈的主观倾向。
然后,我对这几个工具的作者都十分尊重,感恩他们写出了这么好的工具,这里并没有拉一个打一个,或者贬低谁的意思,我觉得都是大佬。
至少人家编译原理的熟悉程度,不是我不能比的,我还要再学挺久才能到达人家那个高度。
还有,对比的只是我自己经常用的功能,我并没有像素级的使用每个功能,并详细对比,结论也会一定程度的偏颇,大家这里做个参考就好。
这里,我只是站在一个普通使用者的角度。去开箱做对比,没人给我塞钱让我说好话或说坏话,毕竟我也没啥知名度,只是个小透明。
这里主要登场的工具版本号是
GDA3.95 免费版 (收费版我没用过,想着后续跟工地申请一下,买一年用下)
jadx-gui 1.2.0
jeb pro 3.19 (实测 jeb pro4.3跟这一版 区别不大)
工具截图
这里我经常用的反编译工具主要有3个 GDA jadx-gui Jeb 这里先上一下工具截图
image-20210718135911756上图有的工具不是最新版,主要是因为懒得去更新,而不是因为我选的这个版本版本稳定啊之类的。
下面用网上的一个apk样本,和我自己写的一个apk样本, 简单说一下这三个工具的优缺点。
01 apk样本相关
样本1
来源:
https://www.52pojie.cn/thread-311989-1-1.html
样本1 是被 dexguard加固壳加固过的样本,dexguard在国内用户不多,是歪果仁写的加固壳, 这个加固壳的特点就是,java层混淆很强,比国内的很多壳强多了。
这个样本是14年的,混淆不是那么变态,这两年的dexguard真是让人看了就想直接回收站。
image-20210717142632323样本2
来源:一个不愿透漏姓名的某铁头 自己写的
某铁头自己写的这个apk,写了一个字符串加密的方法,并且进行了调用,就是为了让大佬们对比某工具,反混淆优化的效果。
image-20210718145316084之所以选择这两个样本,是为了更好的展示这几个反编译器的优缺点。
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反编译对比:
首先看源代码
image-20210717154736883 image-20210717153949792 image-20210717154456741在有调试信息的apk里, 完美还原了所有的变量名。
看完smali, 看看反编译的java代码。
image-20210717234041817这里看看友商的表现
1.1.1 jeb出来挨锤
首先是 debug版带调试信息apk Jeb 和 Jadx反编译的对比
这里可以看到,参数和一个局部变量的名字并没有完美还原。
image-20210718000632314行吧,下一个。
行吧 这一场 jadx-gui 成功 ko Jeb .
1.1.2 GDA出来挨锤
image-20210718004615153这里e2 我猜测作者 可能是考虑到多重异常嵌套的情况下
为了区分,所以加了一个随机数?
但是这里类型都错了还是比较减分的。
同样的问题,换到3.85就没有了, 这里想着,可能是GDA作者做新功能 类似frida 支持啊之类的太累,所以出了bug?
image-20210718183131721行吧 下一个吧。
这一场 jadx-gui 成功 ko GDA .
1.2 无调试信息 被混淆过的apk反编译对比:
如果没有调试信息,又会咋样呢?
这里找了一个用Proguard混淆过代码,并且删除过.source信息的样本。
image-20210717180807532 image-20210719000739307这里看看jadx对方法体对代码的还原。
image-20210717181451405这里可以看到,在没有任何调试信息,还被Proguard混淆过后,Jadx自己实现了一套重命名的规则。
简直是福音一样,代码变得清晰可见,吊打友商。
看看友商是啥样
1.2.1 GDA和JEB同时被锤。
image-20210719000610974这里GDA和jeb两个友商恢复的代码,可读性都不咋样
不管是 p0 p1 p2 还是 arg8 arg10 arg11
可读性都不强,自己一个一个改 可太累了
2. 字符串 搜索简单便捷 展示信息全
image-202107190201019682.1 GDA出来挨锤
image-20210718011005022这里GDA搜索字符串 详情,只展示了字符串信息,没展示引用代码。
字符串所在的方法,对应的包名啊类名啊,都没有展示。
这里字符串少还好,如果十多个地方引用到了,我不得看看包名,类名,引用代码,然后定位我想要分析的位置吗。
害,下一个。
2.2 JEB出来挨锤
image-20210718011140925查看引用之后
image-20210718011216640JEB这里搜索字符串这个步骤 就比较麻烦了,
多了一个查看交叉引用的操作,把操作分解成了2个操作。
而且详情展示这里,展示的也不是java代码 ,而是smali, 咋,是让我人肉翻译成java吗?
行吧,下一个
3. 免费
另外两个工具,JEB Pro 和 GDA Pro都是收费的
这个没啥说的,恰饭挺正常的。
jadx-gui 不要钱就是香。