1、首先我们应当了解的是,对于反编译我们一共需要三个工具,它们分别是:APKTool,dex2jar,和jd-gui。
2、APKTool:用于解析apk的res文件以及AndroidManifest.xml文件。
3、dex2jar:用于把apk解压后生成的classes.dex文件解析为后缀为jar的文件,与下面的jd-gui工具联合使用则可以得到我们的核心Java代码。
4、jd-gui:将上一步所得到的jar文件解析为Java文件,从而得到软件的核心代码。
这就是反编译的核心流程,凡是没有被MD5算法加密,或者未被加固过的APK都可以利用这个方法来进行反编译破解。至于被加密或者加壳的,反编译的难道就大了,反正我是没试过。因此要防止自己的APK不被反编译,泄露源代码,该从什么地方入手就很明显了。
接下来就是正题,如何进行反编译了。
环境及工具下载
1、下载网址:https://ibotpeaches.github.io/Apktool/install/
第一个文件如果确实不会下载,新建一个apktool.bat文件,并将下面的代码拷贝到apktool.bat文件中即可
@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul
set java_exe=java.exe
if defined JAVA_HOME (
set java_exe="%JAVA_HOME%\bin\java.exe"
)
rem Find the highest version .jar available in the same directory as the script
setlocal EnableDelayedExpansion
pushd "%~dp0"
if exist apktool.jar (
set BASENAME=apktool
goto skipversioned
)
set max=0
for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB
:skipversioned
popd
setlocal DisableDelayedExpansion
rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
if "%~1"=="" goto load
if not "%~2"=="" goto load
set ATTR=%~a1
if "%ATTR:~0,1%"=="d" (
rem Directory, rebuild
set fastCommand=b
)
if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
rem APK file, unpack
set fastCommand=d
)
:load
%java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %*
rem Pause when ran non interactively
for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause
2、然后把下载的两个文件都放在同一个文件夹下。同时我们也需要把下载的第二个文件apktool-2.X.X.jar更改成apktool.jar,不然是无法运行这个工具的。同时把需要反编译的apk文件移动到这个文件夹下。此时我们的文件夹下只有(apktool.jar,apktool.bat,XXX.apk)这三个文件。
3、开始反编译
win+R进入DOS界面,进入到刚才存放文件的文件夹下(ps:要是这个操作都不会,就别反编译了^_^)。然后输入以下命令
apktool d 您拿到这个文件夹下的需要反编译的apk文件名.apk
如下图所示(图是借的):
这样我们的反编译过程就完成了。此时文件夹中就会多了一个和apk的文件名相同的文件夹,资源文件就被反编译出来了。
其中的res文件夹是程序当中的所有资源文件,smali文件夹下存放了程序所有的反汇编代码。apktool这个工具主要是用来解析资源res和资源AndroidManifest.xml的,除此之外的,我们还需要另外的工具来解析Java源码,利用下以下两个工具则可以用于解析Java源代码,它们分别是:dex2jar和jd-gui.
1、首先我们把刚刚用于解析的apk文件的后缀改为zip或者rar,然后把它解压就可以了
2、在解压文件中找到一个classes.dex文件,这就是需要解析的源代码文件包。
3、利用dex2jar工具把dex文件解析成后缀为jar的文件
(1)dex2jar的下载网址是:https://bitbucket.org/pxb1988/dex2jar/downloads/
(2)下载dex2jar到我们刚刚安装apktool的文件夹下,然后解压,更改解压后的文件名为dex2jar;
(3)将刚刚所得到的classes.dex文件拷贝到dex2jar文件夹下
(4)打开命令行cmd模式,利用cd命令将目录切换到dex2jar的文件夹下,同时键入以下代码:
d2j-dex2jar.bat classes.dex
此时dex2jar文件夹中,在classes.dex文件后面就会多一个classes_dex2jar.jar文件。
(5)使用将jd-gui工具将此jar文件打开,即可查看源代码
jd-gui工具下载地址:https://github.com/java-decompiler/jd-gui/releases/
注:如果被混淆过,源代码看起来就有点头疼了,如下图:
附工具包下载地址 工具包