什么是反编译
我们知道,Android的程序打包后会生成一个APK文件,这个文件可以直接安装到任何Android手机上,因此,反编译就是对这个APK进行反编译。Android的反编译分成两个部分:
一个是对 代码 反编译,也就是java文件的反编译。
一个是对 资源 反编译,也就是res文件的反编译。
反编译结构图
反编译并查看java代码的工具:
dex2jar: 把dex文件转成jar文件下载地址: https://sourceforge.net/projects/dex2jar/
jd-gui: 这个工具用于将jar文件转换成java代码
1 解压dex2jar。使用Dr.Unarchiver解压dex2jar-2.0.zip。
2 安装JD-GUI。官网http://jd.benow.ca/上下载的dmg安装包,无法安装。需要使用Mac上的软件包管理工具Homebrew来安装。
brew cask install jd-gui
反编译安装包、重新打包的工具
APKTool: 本文重要工具,APK逆向工具,使用简单下载地址: http://ibotpeaches.github.io/Apktool/install/
1 将下载的apktool、apktool_2.2.2.jar分别重命名为apktool、apktool.jar,拷贝到/usr/local/bin中
2 增加可执行权限
chmod +x apktool apktool.jar
反编译并查看java代码
1 解压后的文件夹中有很多文件。在Mac上我们需要用到dex2jar的是这三个东西(windows上对应用bat文件):
d2j-dex2jar.sh
d2j_invoke.sh
lib
2 AndroidStudio
打包好的 APK文件
的后缀,需改为 .zip
,然后使用Dr.Unarchiver解压
。从解压的文件中找到 classes.dex 文件,并将其放入 dex2jar 同一目录下,如下:
3 cmd中进入到dex2jar-2.0文件夹, 先修改权限,再反编译
chmod +x d2j-dex2jar.sh
chmod +x d2j_invoke.sh
./d2j-dex2jar.sh classes.dex
4 使用Finder->应用程序->JD-GUI.app,打开生成的classes-dex2jar.jar文件。
反编译安装包
1 使用apktool命令反编译,d是decode解码的意思,-o是输出文件目录。/usr/local/bin中会生成demo文件夹。
apktool d /Users/administrator/Desktop/demo.apk -o /Users/administrator/Desktop/demo
如果提示demo文件夹已存在,则使用-f参数强制覆盖。
apktool d /Users/administrator/Desktop/demo.apk -f -o /Users/administrator/Desktop/demo
2 打开桌面上的demo文件夹。
smaili文件夹存放java类文件。Android系统有自己的虚拟机Dalvik(一个冰岛渔村名字),反编译后生成的java类文件的扩展名是.smali,而不是.class。
修改安装包
修改apktool反编译后的文件夹中的内容。res文件夹中直接替换,java代码需参考smali语法修改.smali文件。
重新打包
cmd中进入桌面,执行命令。b是build的意思。
apktool b demo -o myDemo.apk