• 反编译工具篇 2.1) jeb 爆锤 jadx 和 GDA | jeb 反混淆 解密字符串


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

    1.反混淆优化 字符串解密(jeb的灵魂能力)

    这里什么是灵魂能力。

    我想起一句很有逼格的话

    当你出场的时候,所有人都显得不过如此。

    大家好,我是王铁头 一个乙方安全公司搬砖的菜鸡
    持续更新移动安全,iot安全,编译原理相关原创视频文章
    视频演示:https://space.bilibili.com/430241559


    正文开始:

    很多时候我用jeb分析apk的代码,就是为了jeb的反混淆优化。

    这里,正常有字符串的代码是这样的

    A方法(明文字符串,其他参数)
    

    被加固壳或者其他源码混淆工具,混淆过的代码就是这样

    A方法(字符串解密方法(密文字符串),其他参数)
    

    普通反编译工具在字符串反混淆这块,不咋行。

    普通反编译工具遇到字符串加密后,是这样的

    原方法   : A方法(字符串解密方法(密文字符串),其他参数) 
    反编译后 : A方法(字符串解密方法(密文字符串),其他参数)
    

    吊打友商的优秀反编译工具是这样的

    原方法   : A方法(字符串解密方法(密文字符串),其他参数) 
    反编译后 : A方法(明文字符串,其他参数)
    

    当然这里大佬们直接去 hook A方法,直接查看函数参数也是可以的。

    但是,如果一眼看过去,都是这种函数,你也一个一个hook查看参数吗,不累吗

    jeb吊打友商的反混淆优化

    jeb jadx 反混淆字符串对比

    jeb GDA 反混淆字符串对比

    这里既然是JEB的灵魂能力,那当然是来几个友商,锤几个友商


    这里为了更好的展示 jeb的灵魂反混淆能力,我还专门写了个apk 给大佬们看的更清楚些

    字符串反混淆demo

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

    字符串解密优化 demo

    这个场景,一般情况下,上JEB就可了。

    来看一下jeb反混淆后的效果

    jeb反混淆 解密字符串

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

    jeb命令行输出的相关解密日志

    jeb输出解密字符串

    开不开心,惊不惊喜。

    在看看另外两个友商:

    GDA出来被锤

    GDA反混淆 反编译效果

    这里我很好奇 str_wang 原来的字符串在哪里, 看这个反编译把我搞懵了

    我不仅不能一眼看出,被加密的字符串,解密之后是个啥。

    我连开发者咋写的源码我都不知道了。。。

    这里 猜测是作者做新版本太累了,GDA 3.85就没有这些错误,反编译后可读性很强

    GDA反编译代码

    不过依然没有解决核心问题,还是不能一眼看出解密后的明文是啥


    不同于 jadx , GDA这里对解密字符串还是提供了支持的。

    网址:https://zhuanlan.zhihu.com/p/250771438

    GDA批量解密字符串

    但是,这里搞起来有点麻烦,要手动定位解密函数和引用的密文,

    我这种能躺着绝对不坐着的人,当然是懒的搞。

    在遇到统一的字符串解密函数,就是一个apk里面,一个统一的方法,负责字符串的解密,这样的情况下,GDA这种方式还是蛮好用的。

    但是如果碰到dexguard那种,一个类一个字符串解密函数,整个apk可能有几百个,几千个字符串解密函数。

    这种情况下,如果写GDA字符串解密脚本,时间成本就会变的非常大。

    遇到这种情况,强烈建议大佬们直接上 jeb 或者 simplify这种反混淆工具。

    jadx-gui出来被锤

    jadx 没有解密字符串功能

    jadx-gui这里把中间变量搞没了,链式调用让代码看起来更精炼,紧凑,但是并没有解决核心问题。

    我还是不能一眼看出,被加密的字符串,解密之后是个啥。


    持续更新移动安全,iot安全,编译原理相关原创视频文章
    视频演示:https://space.bilibili.com/430241559

    相关资料关注公众号 回复 工具 下载:
    移动安全王铁头

  • 相关阅读:
    Arduino学习笔记34
    Arduino学习笔记33
    Arduino学习笔记32
    Arduino学习笔记31
    iOS7新JavaScriptCore框架入门介绍
    iOS7新JavaScriptCore框架入门介绍
    Objective C类方法load和initialize的区别
    Objective C类方法load和initialize的区别
    关于performSelector调用和直接调用区别
    apk签名原理及实现
  • 原文地址:https://www.cnblogs.com/shlyd/p/15228489.html
Copyright © 2020-2023  润新知