zoukankan      html  css  js  c++  java
  • 反编译工具篇 1) Jadx-Gui 爆锤 jeb 和 GDA

    反编译工具篇 GDA Jadx-Gui Jeb的对比 Jadx-Gui优点

    00 前言:

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

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

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

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

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

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


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

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

    jadx-gui 1.2.0

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


    工具截图

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

    反编译工具 GDA JEB JADX

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

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

    01 apk样本相关

    样本1

    来源:

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

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

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

    dexguard jadx反编译源码

    样本2

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

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

    反编译工具demo

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


    02 JADX-GUI 登场

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

    jadx github

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

    当前演示版本:1.2.0

    Jadx-Gui的优点

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

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

    首先看源代码

    演示demo源码

    jadx反编译apk

    jadx smali 变量名

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

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

    jadx反编译成java代码


    这里看看友商的表现

    1.1.1 jeb出来挨锤

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

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

    jeb jadx反编译对比

    行吧,下一个。

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

    1.1.2 GDA出来挨锤

    jadx GDA反编译对比

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

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

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

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

    GDA反编译代码

    行吧 下一个吧。

    这一场 jadx-gui 成功 ko GDA .

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

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

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

    jadx反编译 smali

    jadx反编译java源码

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

    jadx反编译的效果

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

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

    看看友商是啥样

    1.2.1 GDA和JEB同时被锤。

    GDA JEB反编译代码

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

    不管是 p0 p1 p2 还是 arg8 arg10 arg11

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

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

    jadx搜索字符串

    2.1 GDA出来挨锤

    GDA搜索字符串

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

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

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

    害,下一个。

    2.2 JEB出来挨锤

    jeb搜索字符串

    查看引用之后

    jeb查看字符串引用

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

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

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

    行吧,下一个

    3. 免费

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

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

    jadx-gui 不要钱就是香。

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

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

  • 相关阅读:
    golang中,new和make的区别
    k8s客户端库
    k8s 拉取私有镜像
    kubernetes-client / python
    k8s集群外go客户端示例
    K8s获取NodePort
    KUBERNETES中的服务发现机制与方式
    Rancher容器目录持久化
    rancher k8s 实现pod弹性伸缩
    在Terminal里,使用Shift+Insert来代替鼠标右键来进行粘贴操作
  • 原文地址:https://www.cnblogs.com/shlyd/p/15228466.html
Copyright © 2011-2022 走看看