1. 前言
在工作中,当开发某个功能,或者通过对比两个apk的表现形式不同,想看看这个apk中的内部文件,无奈只是一个纯apk,而且不是自己开发的,又没有源码,那怎么办呢?这个时候你就需要用到反编译,好了,本篇文章来讲一下Ubuntu下反编译环境的安装和步骤。
2. 工具
反编译apk,我们需要如下3个开发工具:Apktool dex2jar jd-gui
Apktool : 这个工具是用来反编译apk中的资源文件,如res,AndroidManifest.xml等
dex2jar : 这个工具是用来反编译apk的代码
jd-gui : 这个用来查看代码的工具
2.1 apktool
官网下载地址:https://ibotpeaches.github.io/Apktool/install/
我们是Ubuntu开发环境,当然下载Linux版本的,如下:
Installation for Apktool
- Linux:
- Download Linux wrapper script (Right click, Save Link As
apktool
) - Download apktool-2 (find newest here)
- Rename downloaded jar to
apktool.jar
- Move both files (
apktool.jar
&apktool
) to/usr/local/bin
(root needed) - Make sure both files are executable (
chmod +x
) - Try running apktool via cli
- Download Linux wrapper script (Right click, Save Link As
按照上面的描述,我们一步一步操作
1. 第一步下载是apktool脚本执行文件,需要VPN翻墙才能下载到,文章结尾会把需要的工具统一打包共享出来
2. 下载最新的apktool_x.x.x.jar 包
3. 把下载的jar包重命名为 apktool.jar
4. 把
apktool 脚本文件 和 apktool.jar 这两个文件拷贝到
/usr/local/bin
下(root权限)
5. 给这两个文件添加可执行权限
最后结果如下:
工具安装完成后,我们开始反编译apk,然后查看里面的资源文件
步骤一: 把需要反编译的apk放置某个文件夹中,终端命令进入到该目录,执行
apktool d test.apk
d就是decode解码的意思
apktool d test.apk -o <dir>
-o 是output,代表输出目录
该命令可用于指定反编译后文件的存储位置,其中<dir>表示目标存储位置
如果遇到这样的错误:Destination directory already exists. Use -f switch if you want to overwrite it.,表示你所指定的目录已存在,可以改用命令:
apktool d -f test.apk -o <dir>
-f 是force 表示强制覆盖
执行过程如下:
成功后,会在同目录下生成一个test文件夹
步骤二: test文件夹中所有的资源文件都是可以查看的,不是乱码
字符串:
AndroidManifest.xml:
2.2 dex2jar
工具下载地址:dex2jar - Browse Files at SourceForge.net
把下载最新的dex2jar-x.xzip包解压到当前目录, 找到目标的脚本文件 d2j-dex2jar.sh
接下来我们在反编译apk代码:
步骤一: 我们把test.apk 后缀名修改为 test.zip, 然后解压到当前目录
打开test文件夹,有个classes.dex 该文件中存放的就是java代码
步骤二: 接下来将classes.dex文件拷贝到d2j-dex2jar的解压目录下,执行命令
sh d2j-dex2jar.sh classes.dex
过程如下:
home@home-MS-7B89:~/worktools/decodeapk/dex2jar-2.1/dex-tools-2.1$ sh d2j-dex2jar.sh classes.dex
dex2jar classes.dex -> ./classes-dex2jar.jar
接下来会在同级目录下生成一个 classes-dex2jar.jar 文件,则表示成功:
当dex 文件转换成 jar文件后,我们仍然无法直接查看jar中的class具体内容,这里我们需要借助于
jd-gui这个查看代码的工具
2.3 jd-gui
工具下载地址: Java Decompiler
选择Linux版本: jd-gui-1.6.6.deb
步骤一: 首先我们先安装一下这个工具,命令如下:
sudo dpkg -i jd-gui-1.6.6.deb
安装完成后,在Ubuntu 应用程序列表中找到jd-gui 工具打开
步骤二: 通过菜单选项 File -- openFile 打开刚才反编译出来的 classes-dex2jar.jar包
查看里面任何一个class文件,不会显示乱码
好了,到这里就大功告成了,本文中所有需要的开发工具打包后上传到这里: Android反编译apk工具包-Android文档类资源-CSDN下载 不需要C币,供有需要的小伙伴下载使用。