【移动端】APP(android)简单反编译介绍
APP(android)反编译介绍
在我们安卓开发当中,我们不仅需要掌握基础的开发技能,也需要掌握软件的安全技能,这样才可以让我们的软件能够成为一款能够真正可以进行发布的软件,同时也可以让自己的核心技术不会被别人所盗取。
首先我们应当了解的是,对于正常的反编译我们一共需要三个工具,它们分别是:APKTool、dex2jar 和 jd-gui。
APKTool:用于解析apk的res文件以及AndroidManifest.xml文件
dex2jar:用于把apk解压后生成的classes.dex文件解析为后缀为jar的文件,与下面的jd-gui工具联合使用则可以得到我们的核心Java代码
jd-gui:将上一步所得到的jar文件解析为Java文件,从而得到软件的核心代码
注意:这就是反编译的核心流程,凡是没有被MD5算法加密,或者未被加固过的APK都可以利用这个方法来进行反编译破解。
APP(android)反编译步骤
大概流程如下:
解析apk中的图片、视图资源 —>通过apktool d 工具 —> 解析出图片、视图资源
解析apk中的jar包---->通过dex2jar工具 ----->解析出jar包
解析 jar为Java源码---->通过jd-gui工具------>查看Java源码
下载Apktool并解析Apk包
apktool 官方网址:https://ibotpeaches.github.io/Apktool/install/
快速检查
- 至少已安装Java 1.8吗?
- java -version在命令行/命令提示符下执行是否返回1.8或更高?
- 如果没有,请安装Java 8+并使其成为默认值。(Java 7现在也可以使用)
安装Apktool
-
Windows:
- 下载Windows 包装程序脚本(右键单击,将链接另存为
apktool.bat
) - 下载apktool-2(在这里找到最新的)
- 将下载的jar重命名为
apktool.jar
- 将两个文件(
apktool.jar
&apktool.bat
)移至Windows目录(通常为C://Windows
) - 如果您无权访问
C://Windows
,则可以将两个文件放在任何位置,然后将该目录添加到环境变量系统PATH变量中。 - 尝试apktool通过命令提示符运行
- 下载Windows 包装程序脚本(右键单击,将链接另存为
-
Linux:
- 下载Linux 包装器脚本(右键单击,将链接另存为
apktool
) - 下载apktool-2(在这里找到最新的)
- 将下载的jar重命名为
apktool.jar
- 将两个文件(
apktool.jar
&apktool
)移动到/usr/local/bin
(需要root) - 确保两个文件均可执行(
chmod +x
) - 尝试apktool通过cli 运行
- 下载Linux 包装器脚本(右键单击,将链接另存为
-
macOS:
- 下载Mac 包装器脚本(右键单击,将链接另存为
apktool
) - 下载apktool-2(在这里找到最新的)
- 将下载的jar重命名为
apktool.jar
- 将两个文件(
apktool.jar
&apktool
)移动到/usr/local/bin
(需要root) - 确保两个文件均可执行(
chmod +x
) - 尝试apktool通过cli 运行
或者您可以通过Homebrew安装apktool :
- 如本页所述安装Homebrew
brew install apktool
在终端中执行命令(无需root)。最新版本将安装/usr/local/Cellar/apktool/[version]/
并链接到/usr/local/bin/apktool
。- 尝试apktool通过cli 运行
- 下载Mac 包装器脚本(右键单击,将链接另存为
注意 -包装脚本不是必需的,但很有用,因此您不必java -jar apktool.jar一遍又一遍地输入。
使用方法
使用命令如下命令即可,注意默认反编译文件同在apk所在目录
apktool d 指定需要反编译的apk
这样我们的反编译过程就完成了,如下所示:
$ apktool d test.apkI: Using Apktool 2.4.1 on test.apkI: Loading resource table...I: Decoding AndroidManifest.xml with resources...I: Loading resource table from file: 1.apkI: Regular manifest package...I: Decoding file-resources...I: Decoding values */* XMLs...I: Baksmaling classes.dex...I: Copying assets and libs...I: Copying unknown files...I: Copying original files...
其中的res文件夹是程序当中的所有资源文件,smali文件夹下存放了程序所有的反汇编代码。apktool这个工具主要是用来解析资源res和资源AndroidManifest.xml的,除此之外的,我们还需要另外的工具来解析Java源码,利用下以下两个工具则可以用于解析Java源代码,它们分别是:dex2jar和jd-gui.
利用dex2jar工具把apk或者dex文件解析成后缀为jar的文件
dex2jar的下载网址是:https://sourceforge.net/projects/dex2jar/files/latest/download
1.下载到我们刚刚安装apktool的文件夹下,然后解压,更改解压后的文件名为dex2jar
-
如果是macos 需要设置文件夹dex2jar/的执行权限,命令如下:
chmod -R +x dex2jar/
-
.bash_profile 中增加环境变量(由于d2j-dex2jar名字太长了,我们增加一个别名方便以后通过
dex2jar
命令即可使用):alias dex2jar='/Users/summer/Downloads/dex2jar/d2j-dex2jar.sh'
2.执行以下命令将apk文件解析出jar包:
注意默认解析的jar路径为dex2jar包根目录,但我们增加了环境变量,则默认是你命令执行的当前目录;
./d2j-dex2jar.sh xxx.apk
或 dex2jar xxx.apk
当然我们可以改变输出目录,如我放在desdisk目录下,可以增加一个-o参数即可。如下
./d2j-dex2jar.sh xxx.apk -o /desdisk/xxx.jar
或 dex2jar xxx.apk -o /desdisk/xxx.jar
利用jd-gui工具将jar文件解析为Java文件
- 首先下载jd-gui,网址如下,根据自己的操作系统下载对应的安装包即可,支持Linux、mac-os、windows:
https://github.com/java-decompiler/jd-gui/releases/ - 将刚刚解析的jar拖入jd-gui窗口就可以查看到源码了,如下图所示;
最后总结
APKTool是GOOGLE提供的APK编译工具,能够反编译及回编译apk,同时安装反编译系统apk所需要的framework-res框架,清理上次反编译文件夹等功能。但这些基础都在用app没有被其他工具加密或加固的前提下,加固过的反编译有些复杂,这里不再阐述,大家可以查询网上其他资料;另外市面上也有大量的apk破解工具也就是基于上述几种工具的一种包装组合,更方便用户使用!如何加固自己的app有很多种解决方案,如360加固、腾讯加固等;更多加固探讨文章请参看 《移动安全专场——APP加固新方向(演讲速记)》
更多相关文章
- Android NDK rb5 文档之使用 Android 工具链作为一个独立编译器
- android应用安装成功之后删除apk文件
- Android sdk自带的9patch工具(9妹)
- 针对文件转移情况的Android SDK离线安装方法
- Android开发中定制自己的日志工具
- Android Studio第4部分:调试工具和生产力插件