Android反编译(Mac系统下的ApkTool、dex2jar、JD-GUI)
尝试多个帖子效果不好,好容易找到一个可行的,做一个记录,怕原帖删除。转载来源
一、对资源文件的反编译(Apktool)
Android中对资源文件的反编译一般使用ApkTool这个工具,它可以反编译resources. arsc、9.png和XML等文件。同时它也可以将经过修改的反编译文件重新打包成APK文件。
ApkTool支持windows/linux/mac
首先打开ApkTool官网安装说明+下载地址,找到对应的系统响应的安装说明
- 将wrapper script另存为apktool.bat文件
- 下载apktool.jar 建议新版,并命名为apktool.jar
- 将两个文件放入同一路径的文件夹中,同时通过命令chmod +x给这两个文件增加可执行权限。
appledeMacBook-Pro:~ apple$ chmod +x /usr/local/bin/apktool.jar
注意apktool这个脚本是为了方便我们在命令行Terminal中直接执行apktool命令而增加的,不使用这个脚本,则运行ApkTool工具的命令为:
appledeMacBook-Pro:~ apple$ java -jar /usr/local/bin/apktool.jar
使用apktool
//进入文件所在目录
appledeMacBook-Pro:Desktop apple$ cd /Users/apple/Desktop/androddemo/ProguardDemo/app/build/outputs/apk/release
//执行命令
appledeMacBook-Pro:release apple$ java -jar /usr/local/bin/apktool.jar d app-release.apk
//如果配置了apktool 则为apktool d app-release.apk
到这里会回去如下文件:
AndroidManifest.xml,清单文件;
assets资源目录,包含了图片和字体等资源;
build和dist为重新编译生成的,新apk在dist目录;
lib为so文件目录;
original保存了原签名和反编译前的清单文件;
res主要为layout,strings等xml文件;
unknown不用管;
- arm64-v8a:arm最新的64cpu构架,如骁龙810,820,835等都是基于此构架的,同时兼容A32,T32指令集;
- armeabi-v7a:32位cpu构架,如骁龙800,801等,兼容armv5,armv6;
- armeabi:armv5,armv6构架,基本已经淘汰了;
- x86:intel的32位cpu构架,即windows平台的32位cpu构架;
- x86_64:其实是amd出的兼容64位的32位cpu构架;
- arm构架都是向下兼容的,例如如果CPU是armv8,没有对应arm64-v8a文件夹,则会执行armeabi-v7a中的so文件。
二、Java代码的反编译(dex2jar+JD-GUI)
反编译java代码的常用工具是dex2jar,查看反编译后的结果是JD-GUI。
JD-GUI下载地址
dex2jar下载地址
JD-GUI安装后意外退出的解决:
//使用 brew 进行安装
brew cask install jd-gui
//如果没有brew命令,则进行安装
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
1. 将apk包修改成zip包并且解压,如果不能正常解压用命令:
appledeMacBook-Pro:~ apple$ unzip /Users/apple/Desktop/反编译工具/app-release.zip -d /Users/apple/Desktop/反编译工具
2. 将classes.dex拷贝到dex2jar-2.0中
3. 执行dex2jar命令进行反编译
//进入dex2jar的目录
appledeMacBook-Pro:release apple$ cd /Users/apple/Desktop/反编译工具/dex2jar-2.0
//声明d2j-dex2jar.sh文件执行权利
appledeMacBook-Pro:dex2jar-2.0 apple$ sudo chmod +x d2j-dex2jar.sh
//进行反编译
appledeMacBook-Pro:dex2jar-2.0 apple$ ./d2j-dex2jar.sh classes.dex
4. 查看反编译结果
用JD-GUI打开它。
将xx.jar拖拽到JD-GUI中即可查看