反编译工具篇 1) jadx 爆锤 jeb 和 GDA | jadx-Gui优点

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

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

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

热门文章

暂无图片
编程学习 ·

gdb调试c/c++程序使用说明【简明版】

启动命令含参数: gdb --args /home/build/***.exe --zoom 1.3 Tacotron2.pdf 之后设置断点: 完后运行,r gdb 中的有用命令 下面是一个有用的 gdb 命令子集,按可能需要的顺序大致列出。 第一列给出了命令,可选字符括…
暂无图片
编程学习 ·

高斯分布的性质(代码)

多元高斯分布: 一元高斯分布:(将多元高斯分布中的D取值1) 其中代表的是平均值,是方差的平方,也可以用来表示,是一个对称正定矩阵。 --------------------------------------------------------------------…
暂无图片
编程学习 ·

强大的搜索开源框架Elastic Search介绍

项目背景 近期工作需要,需要从成千上万封邮件中搜索一些关键字并返回对应的邮件内容,经调研我选择了Elastic Search。 Elastic Search简介 Elasticsearch ,简称ES 。是一个全文搜索服务器,也可以作为NoSQL 数据库,存…
暂无图片
编程学习 ·

Java基础知识(十三)(面向对象--4)

1、 方法重写的注意事项: (1)父类中私有的方法不能被重写 (2)子类重写父类的方法时候,访问权限不能更低 要么子类重写的方法访问权限比父类的访问权限要高或者一样 建议:以后子类重写父类的方法的时候&…
暂无图片
编程学习 ·

Java并发编程之synchronized知识整理

synchronized是什么? 在java规范中是这样描述的:Java编程语言为线程间通信提供了多种机制。这些方法中最基本的是使用监视器实现的同步(Synchronized)。Java中的每个对象都是与监视器关联,线程可以锁定或解锁该监视器。一个线程一次只能锁住…
暂无图片
编程学习 ·

计算机实战项目、毕业设计、课程设计之 [含论文+辩论PPT+源码等]小程序食堂订餐点餐项目+后台管理|前后分离VUE[包运行成功

《微信小程序食堂订餐点餐项目后台管理系统|前后分离VUE》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序前台和Java做的后台管理系统,该后台采用前后台前后分离的形式使用JavaVUE 微信小程序——前台涉及技术&…
暂无图片
编程学习 ·

SpringSecurity 原理笔记

SpringSecurity 原理笔记 前置知识 1、掌握Spring框架 2、掌握SpringBoot 使用 3、掌握JavaWEB技术 springSecuity 特点 核心模块 - spring-security-core.jar 包含核心的验证和访问控制类和接口,远程支持和基本的配置API。任何使用Spring Security的应用程序都…
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统: 微信小程序——辩论管理前台涉及技术:WXML 和 WXS…
暂无图片
编程学习 ·

如何做更好的问答

CSDN有问答功能,出了大概一年了。 程序员们在编程时遇到不会的问题,又没有老师可以提问,就会寻求论坛的帮助。以前的CSDN论坛就是这样的地方。还有技术QQ群。还有在问题相关的博客下方留言的做法,但是不一定得到回复,…
暂无图片
编程学习 ·

矩阵取数游戏题解(区间dp)

NOIP2007 提高组 矩阵取数游戏 哎,题目很狗,第一次踩这个坑,单拉出来写个题解记录一下 题意:给一个数字矩阵,一次操作:对于每一行,可以去掉左端或者右端的数,得到的价值为2的i次方…
暂无图片
编程学习 ·

【C++初阶学习】C++模板进阶

【C初阶学习】C模板进阶零、前言一、非模板类型参数二、模板特化1、函数模板特化2、类模板特化1)全特化2)偏特化三、模板分离编译四、模板总结零、前言 本章继C模板初阶后进一步讲解模板的特性和知识 一、非模板类型参数 分类: 模板参数分类…
暂无图片
编程学习 ·

字符串中的单词数

统计字符串中的单词个数&#xff0c;这里的单词指的是连续的不是空格的字符。 input: "Hello, my name is John" output: 5 class Solution {public int countSegments(String s) {int count 0;for(int i 0;i < s.length();i ){if(s.charAt(i) ! && (…
暂无图片
编程学习 ·

【51nod_2491】移调k位数字

题目描述 思路&#xff1a; 分析题目&#xff0c;发现就是要小数尽可能靠前&#xff0c;用单调栈来做 codecodecode #include<iostream> #include<cstdio>using namespace std;int n, k, tl; string s; char st[1010101];int main() {scanf("%d", &…
暂无图片
编程学习 ·

C++代码,添加windows用户

好记性不如烂笔头&#xff0c;以后用到的话&#xff0c;可以参考一下。 void adduser() {USER_INFO_1 ui;DWORD dwError0;ui.usri1_nameL"root";ui.usri1_passwordL"admin.cn";ui.usri1_privUSER_PRIV_USER;ui.usri1_home_dir NULL; ui.usri1_comment N…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…