mac环境下反编译Android apk

372 阅读3分钟

记录下apk反编译,方便后续使用

快速使用:进入 /usr/local/bin 文件夹,将apk拷贝到dex2jar文件夹中,执行命令 sh d2j-dex2jar.sh xxx.apk,打开JD-GUI工具,将生成jar包拖进去即可。

一:如何从Google Play上下载apk

  1. 打开Google Play官网
  2. 在界面中选择应用,可以在这里找自己想要的目标apk,也可以点击右上角的搜索框,在搜索框中搜索自己想要找的apk image.png

image.png 3. 点击目标应用图标,进入应用的安装页面

image.png

  1. 复制当前页面的链接
  2. 打开apk downloader页面,将刚才复制的页面链接粘贴到输入框中 apps.evozi.com/apk-downloa…

image.png

  1. 点击Analyze,出现下方页面

image.png

  1. 点击Zip files,出现download.zip,点击即可下载压缩包 image.png

二:工具准备

1. 相关工具下载

2.apktool工具准备

1. 把下载好的apktool脚本和apktool.jar文件移动到 /usr/local/bin 文件夹下

image.png

image.png

image.png

2.使用命令chmod +x 分别对apktool和apktool.jar文件进行提权

//先进入到/usr/local/bin文件夹下

cd /usr/local/bin
//执行命令
chmod +x apktool
//执行命令
chmod +x apktool.jar

3.测试是否成功,终端输入apktool,若成功,如下图

image.png

3.dex2jar工具准备

1.解压缩下载好的zip文件即可

image.png

image.png

4.JD-GUI工具准备

  1. 双击文件

image.png

2.双击.app安装

image.png

3.如果正常启动就完成了这部分的准备工作,如果出现下方的弹窗,则需要继续解决JD-GUI的安装问题

image.png

4.显示包内容

image.png

  1. 找到文件universalJavaApplicationStub ,使用文本编辑器打开

image.png

  1. 使用这个链接中的内容替当前换这个文件中的内容(来源于参考资料中的文章) 这个链接也可以: github.com/tofi86/univ…

找到 jd-gui.app 右键“显示包内容” 进入Contents目录,用记事本打开Info.plist文件 找到以下这一行

<key>MainClass</key>                    <string>org.jd.gui.OsxApp</string>

把OsxApp改成App即可

<key>MainClass</key>                    <string>org.jd.gui.App</string>

链接:www.jianshu.com/p/57a011174…

  1. 保存后,重新打开即可

三. 使用工具开始反编译

第一步: 使用apktool反编译APK文件,得到classes.dex文件,同时也能获取到资源文件以及布局文件.

1. 把你需要反编译的apk文件也复制到 /usr/local/bin 文件夹下,确保apktoolapktool.jar以及apk文件都在/usr/local/bin目录下

2. 执行 apktool d -s xxx.apk ,命令行添加-s,表示禁止将dex文件解码成smali

//如果当前已在/usr/local/bin 目录下,忽略此步
cd /usr/local/bin  

//开始反编译目标APK文件为dex
apktool d -s xxx.apk

image.png

3. (可选)将dex解码成smali

//如果当前已在/usr/local/bin 目录下,忽略此步
cd /usr/local/bin  

//开始反编译目标APK文件为smali
apktool d xxx.apk

image.png

第二步:使用dex2jar工具把classes.dex文件转化成.jar文件

1. 进入到你解压后的dex2jar文件夹下

2. 把classes.dex文件复制到解压后的dex2jar文件夹下,终端执行命令sh d2j-dex2jar.sh classes.dex

sh d2j-dex2jar.sh classes.dex

3. 执行完毕后,会在文件夹下生成一个.jar文件,里面就是java源码

image.png

第三步:使用JD-GUI软件查看jar包下的java源码

1. 打开安装好的JD-GUI,直接把第二步生成的.jar文件拖进去,就能看到反编译出来的java源码了

image.png

image.png

多dex情况下如何只输出一个jar包?

  1. 把apk放到dex2jar文件夹下
  2. 执行命令sh d2j-dex2jar.sh XXX.apk

image.png

可以看到最终输出了一个jar包。如果我们反编译时不需要apk中的资源文件,只关心class文件,可以直接使用这种方式,方便快捷。

参考文章