反编译工具篇 2.1) jeb 爆锤 jadx 和 GDA
反编译工具篇 2.1) jeb 爆锤 jadx 和 GDA
1.反混淆优化 字符串解密(jeb的灵魂能力)
这里什么是灵魂能力。
我想起一句很有逼格的话
当你出场的时候,所有人都显得不过如此。
正文开始:
视频演示:https://space.bilibili.com/430241559
很多时候我用jeb分析apk的代码,就是为了jeb的反混淆优化。
这里,正常有字符串的代码是这样的
A方法(明文字符串,其他参数)
被加固壳或者其他源码混淆工具,混淆过的代码就是这样
A方法(字符串解密方法(密文字符串),其他参数)
普通反编译工具在字符串反混淆这块,不咋行。
普通反编译工具遇到字符串加密后,是这样的
原方法 : A方法(字符串解密方法(密文字符串),其他参数)
反编译后 : A方法(字符串解密方法(密文字符串),其他参数)
吊打友商的优秀反编译工具是这样的
原方法 : A方法(字符串解密方法(密文字符串),其他参数)
反编译后 : A方法(明文字符串,其他参数)
当然这里大佬们直接去 hook A方法,直接查看函数参数也是可以的。
但是,如果一眼看过去,都是这种函数,你也一个一个hook查看参数吗,不累吗
jeb吊打友商的反混淆优化


这里既然是JEB的灵魂能力,那当然是来几个友商,锤几个友商
这里为了更好的展示 jeb的灵魂反混淆能力,我还专门写了个apk 给大佬们看的更清楚些

下图这样的场景 你想不想 编译器优化成这个样子哪

这个场景,一般情况下,上JEB就可了。
来看一下jeb反混淆后的效果

下图是jeb的命令行输出,可以看到这里jeb成功解密了3个字符串
jeb命令行输出的相关解密日志

开不开心,惊不惊喜。
在看看另外两个友商:
GDA出来被锤

这里我很好奇 str_wang 原来的字符串在哪里, 看这个反编译把我搞懵了
我不仅不能一眼看出,被加密的字符串,解密之后是个啥。
我连开发者咋写的源码我都不知道了。。。
这里 猜测是作者做新版本太累了,GDA 3.85就没有这些错误,反编译后可读性很强

不过依然没有解决核心问题,还是不能一眼看出解密后的明文是啥
不同于 jadx , GDA这里对解密字符串还是提供了支持的。
网址:https://zhuanlan.zhihu.com/p/250771438

但是,这里搞起来有点麻烦,要手动定位解密函数和引用的密文,
我这种能躺着绝对不坐着的人,当然是懒的搞。
在遇到统一的字符串解密函数,就是一个apk里面,一个统一的方法,负责字符串的解密,这样的情况下,GDA这种方式还是蛮好用的。
但是如果碰到dexguard那种,一个类一个字符串解密函数,整个apk可能有几百个,几千个字符串解密函数。
这种情况下,如果写GDA字符串解密脚本,时间成本就会变的非常大。
遇到这种情况,强烈建议大佬们直接上 jeb 或者 simplify这种反混淆工具。
jadx-gui出来被锤

jadx-gui这里把中间变量搞没了,链式调用让代码看起来更精炼,紧凑,但是并没有解决核心问题。
我还是不能一眼看出,被加密的字符串,解密之后是个啥。