转-【CTF环境搭建之】如何使用Jadx反编译软件
2017-05-22 00:06
686 查看
Jadx
Android开发(/学习)有时候需要用到反编译工具,Window上有很多工具,而Mac上则不多,这里稍微介绍一下Mac上可用的反编译工具Jadx.
准备
clone 仓库,编译mkdir jadx git clone https://github.com/skylot/jadx.git cd jadx ./gradlew dist #这个需要稍微等待一下
开始反编译
等完毕后,可以开始了,我就介绍个最简单最常用的用法把apk改成zip
解压zip获取class.dex文件
将class.dex文件放到jadx目录下
cd build/jadx/ bin/jadx -d out class.dex # 反编译后放入out文件夹下(如果out不存在它会自动创建) #or bin/jadx-gui class.dex # 会反编译,并且使用gui打开
效果图
OK,就这样,后续还可以配置环境变量,更加方便.
引子
承接我的上一篇文章Android ClassyShark vs ApkTool,感谢读者@weishu的提醒,jadx是我遗漏的一个非常好用的android反编译gui工具。下面就来介绍下jadx工具。首先给出jadx的github地址
使用方式
其实github上已经给出了很详细的使用说明。但是作者这里形式性地解读下吧(- -|)。
1.安装
依次运行以下命令:git clone https://github.com/skylot/jadx.git cd jadx ./gradlew dist
主要是拉下来jadx的git主工程,然后跑对应的gradle task。之后会生成运行脚本,大概就是多出了这个目录
jadx脚本目录
1.运行
cd build/jadx/ bin/jadx -d out lib/jadx-core-*.jar #or bin/jadx-gui lib/jadx-core-*.jar
以上命令是git给出的运行示例,主要就是反编译jadx源码的一个jar包。
由于之前文章对比classyShark 和apktool时用的是淘宝apk,那么这里继续用淘宝apk,便于三者的横向比较。
bin/jadx-gui taobao.apk
当然如果你不喜欢使用命令行外加找文件路径,你可以直接双击下图脚本文件即可
jadx-gui脚本文件
会弹出以下界面,对应选中你想反编译的.dex, .apk, .jar or .class即可(可以看到支持的格式还是很丰富的,赞)。
选中taobao.apk
选中淘宝apk,并且反编译完成后,结果如下:
反编译taobao.apk结果
可以看到结果中即反编译了资源文件和源码,这个效果对比,apktool+dex2jar+jd-gui这三个工具集来说操作简便了太多。
结果横向对比(classyshark,apktool+dex2jar+jd-gui)
主要就是来对比下反编译后源码的可读性。同样选用com.taobao.allspark包下的AllsparkLoader来进行对比,用jadx反编译后的结果为:AllsparkLoader反编译结果
我们可以看到可读性非常高,要是去掉混淆的影响,已经很接近源码了!!!(细心的读者可以发现该gui还包含了一部分编译器的功能,很实用)
另外几个很赞的功能介绍
1.支持全局class查询
全局class查询
2.支持全局text查询
全局text查询
3.支持导出gradle工程(你可以用as直接看反编译的工程了)
导出gradle工程
那么我们最终看看在as中打开导出工程后的结果:
as中打开导出工程
很赞对不对
Android反编译工具jadx的简单操作使用
Android上面的反编译工具很多,我个人比较喜欢jadx,操作简单,界面简洁。下载jadx并解压,点击“bin”目录下面的“jadx-gui.bat”文件,出现下图所示的界面
选中要反编译的apk文件后,界面变成下图所示
任意点开一个类,我们就可以看到该类的源代码了
有的类的变量和方法名都变成了a,b,c,d。。。,如下图所示
这是由于Android工程进行了代码混淆
总结
看了以上之后,我们就来说下jadx对比classyshark和(apktool+dex2jar+jd-gui工具集)的优劣势吧。优点:
1.操作方便快捷,一步到位
2.有较为完善的gui界面,带有较多实用功能
3.反编译代码可读性高
缺点:
1.没有classyshark类似的方法总数统计以及图形化分布界面
2.对比apktool直接反编译出来的资源文件有相应的缺失(这个有心的童鞋可以自己尝试下,这里就不给截图了)
总体来说jadx还是你反编译工具的最佳选择,当然有些时候可能还是需要你去配合使用,毕竟现在看来三者还是各有优劣的。
相关文章推荐
- 转-【CTF环境搭建之】如何使用Android反编译软件
- 如何使用编译生成的release搭建nfs boot环境
- 如何使用免费软件搭建J2ME开发环境?
- 如何使用efi toolkit搭建编译efi app的环境
- 如何使用编译生成的release搭建nfs boot环境
- Linux 软件安装使用(5)交叉编译环境
- Ubuntu(Linux)使用Eclipse搭建C/C++编译环境
- 如何在ubuntu中搭建交叉编译环境
- 如何使用Phantom系统构建和维护软件测试环境
- ubuntu 11.04下搭建android开发/编译环境 安装必要工作用软件
- buntu(Linux)使用Eclipse搭建C/C++编译环境
- Windows下使用VIM,搭建Mainframe开发环境(二)---编译VIM
- arm-linux-gcc 安装和使用(交叉编译环境搭建)
- Windows下使用VIM&Cygwin,搭建Mainframe开发环境(六)---用awk/sed合并PLI/Cobol编译结果
- objective 学习教程 如何搭建和使用 Xcode 开发环境 注非本人写的
- Ubuntu使用eclipse搭建c/c++编译环境----CDT插件
- Linux 软件安装使用(1) java编译环境
- ubuntu9.10使用第一天(教育网直通车+源修改+C++编译环境搭建+输入法安装)
- c#中如何使用mapserver之一环境搭建
- 如何编写Build对文件手机软件的编译--使用antenna和ant