什么是反编译

我们知道,Android的程序打包后会生成一个APK文件,这个文件可以直接安装到任何Android手机上,因此,反编译就是对这个APK进行反编译。Android的反编译分成两个部分:

一个是对 代码 反编译,也就是java文件的反编译。

一个是对 资源 反编译,也就是res文件的反编译。

反编译结构图

dmg怎么转ios dmg怎么转换成apk_jar

反编译并查看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

dmg怎么转ios dmg怎么转换成apk_安装包_02

反编译安装包、重新打包的工具

APKTool: 本文重要工具,APK逆向工具,使用简单下载地址: http://ibotpeaches.github.io/Apktool/install/

dmg怎么转ios dmg怎么转换成apk_dmg怎么转ios_03

1 将下载的apktool、apktool_2.2.2.jar分别重命名为apktool、apktool.jar,拷贝到/usr/local/bin中

dmg怎么转ios dmg怎么转换成apk_dmg怎么转ios_04

2 增加可执行权限

chmod +x apktool apktool.jar

反编译并查看java代码

1 解压后的文件夹中有很多文件。在Mac上我们需要用到dex2jar的是这三个东西(windows上对应用bat文件):

d2j-dex2jar.sh

d2j_invoke.sh

lib

dmg怎么转ios dmg怎么转换成apk_反编译_05

2 AndroidStudio 打包好的 APK文件 的后缀,需改为 .zip ,然后使用Dr.Unarchiver解压 。从解压的文件中找到 classes.dex 文件,并将其放入 dex2jar 同一目录下,如下:

dmg怎么转ios dmg怎么转换成apk_jar_06

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文件。

dmg怎么转ios dmg怎么转换成apk_安装包_07

dmg怎么转ios dmg怎么转换成apk_dmg怎么转ios_08

反编译安装包

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。

dmg怎么转ios dmg怎么转换成apk_安装包_09

修改安装包

修改apktool反编译后的文件夹中的内容。res文件夹中直接替换,java代码需参考smali语法修改.smali文件。

重新打包

cmd中进入桌面,执行命令。b是build的意思。

apktool b demo -o myDemo.apk