Android APK 反编译工具介绍

本篇博客主要针对 MacOs,介绍几种常用的反编译工具。

1. ApkTool

APKTool 是 Google 提供的 APK 编译工具,能够反编译及回编译 apk,我们一般用来反编译资源文件,代码反编译之后都是 smali 文件。需要 java 支持。

功能
  • 还原 Apk 中所包含的 resources.arsc、classes.dex、9.png 和 xml 等资源文件
  • 对 Apk 进行重新(二次)打包
  • 反编译依赖于 Framework 的 apk 文件
  • 运行调试 Smali 文件
安装
  1. 将下载好的 apktool 文件与 apktool.jar 文件准备好
  2. 将 apktool.jar 与 apktool 移动到 /usr/local/bin 目录下(可以通过在终端中输出命令 open /usr/local/bin 来打开这个目录)
  3. 为上述两个文件增加可执行权限,即在终端中输入并执行:
1. chmod +x apktool.jar
2. chmod +x apktool
  1. 在终端输入 apktool 看是否可以运行,如果可以运行,输出结果如下图。(如果不可以,则需要在系统偏好设置中打开安全与隐私中点击仍要运行apktool.jar)
使用

我们可以利用 ApkTool 反编译 apk 获得 AndroidManifest.xml、xml文件和图片资源。
在终端执行以下操作:

1. cd /你存放apk的目录或在下面命令中使用xxx.apk文件的绝对路径
2. apktool d xxx.apk //该命令执行后会在同级目录下生成一个与你编译的apk同名的目录

以某版本的 docs.apk 为例:

解析出来的文件目录结构如下:

APkTool 只能提取资源文件,对于 .dex 类型的文件是无法查看的,这时候需要用到 dex2jar 了。


2. dex2jar

dex2jar 是一个能操作 Android 的 dalvik(.dex) 文件格式和 Java 的 (.class) 的工具集合。

功能
  • dex-reader/writer : 用于读写 Dalvik Executable (.dex) 文件格式. 包含一个简单的API (与ASM相似)
  • d2j-dex2jar : 执行 .dex 到 .class 的文件格式转换
  • smali/baksmali : 与 smali 工具功能一致,但是对中文更友好
安装

直接解压即可。

使用
  1. 先将 apk 文件进行解压,可使用解压软件,也可将文件后缀改为 .rar 然后再通过终端 unzip xxx.rar 命令行解压。(注意:直接解压 apk 和使用 ApkTool 反编译 apk 都能获得AndroidManifest.xml,但直接解压获得的 AndroidManifest.xml 是乱码的,无法直接查看;同时,直接解压 apk 获得 res 资源文件是不包含 resources.arsc 部分的,而使用 ApkTool 反编译出来的 res 是包含的。)
  2. 从上图中可以看到,直接解压后有3个 classes.dex 文件(应用了 MultiDex 所致),这就是项目的源码。将这几个 classes.dex 文件拷贝到解压的 dex2jar 目录下,然后执行在终端如下命令进行反编译:
1. cd /你的dex2jar解压目录
2. sh d2j-dex2jar.sh classes.dex 
3. sh d2j-dex2jar.sh classes2.dex
4. sh d2j-dex2jar.sh classes3.dex

PS:如果出现 permission denied d2j_invoke.sh 的提示,则需要在终端里执行:

sudo chmod +x d2j_invoke.sh // chmod +x 命令为取消权限

然后再重新执行:

sh d2j-dex2jar.sh classes.dex
  1. 通过上面的步骤,我们已经将 .dex 转换成 .jar,接下来就可以使用 JD-GUI 或 jadx 来查看反编译后的程序源码了。


3. JD-GUI

一款免费的 Java 反编译工具,使用 C++ 开发

功能
  • 该工具可以反编译单个、多个 jar 包
  • 拥有独立图形界面,只要把文件拖到软件的那个框框里面,就可以看到源码了
使用

不需要安装,直接双击运行 jd-gui-1.4.0.jar 打开软件,然后将 classes-dex2jar.jar 文件拖拽到 JD-GUI 界面上即可,然后就可以愉快地查看源码了。

还可以将反编译后的文件保存,然后再用 Android Studio 打开。


4. jadx

一款跨平台的有 GUI 界面的反编译工具

功能
  • 可以直接将 apk 文件进行反编译
  • 反编译输出 Java 代码
  • 图形化的界面,拖拽式的操作,强大的搜索功能
  • 导出 Gradle 工程
安装

方式一:下载并解压后点击 bin 目录下的 jadx-gui 即可打开。
方式二:由于 jadx 本身是 github 上的一个开源项目,所以可以直接 clone 源代码,打开终端执行以下命令,进行编译安装。

1. git clone https://github.com/skylot/jadx.git
2. cd jadx
3. ./gradlew dist

然后将 build/jadx/bin 加入到环境变量即可。

使用

双击 bin 目录下的 jadx-gui 即可打开,使用方式同 JD_GUI 一致,也同样可以通过 File->Save All 来保存反编译后的文件再用 Android Studio 打开。
除此之外,jadx 也支持直接用命令行来反编译文件:

1. jadx -d out classes.dex #直接输出.java文件到out目录
2. #or
3. jadx-gui classes.dex #使用gui打开

另外,可以直接用 jadx-gui 打开apk 文件进行反编译。


总结

  • 如果只是想得到 .xml 文件和图片资源等,则直接使用 ApkTool 来反编译 apk 。
  • 如果想查看项目源代码,则有以下两种方式:
  1. 可以先将 apk 直接解压,再利用 dex2jar 将文件由 .dex 转换为 .jar,然后使用 JD-GUI 或 jadx 打开 .jar 文件即可看到源码,可选择保存再用其他 IDE 打开。
  2. 直接用 jadx 反编译 apk 。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容