反编译需要使用到三个工具,获取apk里面的资源使用apktool,反编译Java代码使用dex2jar,查看反编译之后的jar文件使用jd-gui。
1、apktool工具可以反编译apk文件,然后拿到apk里面的AndroidManifest.xml等资源文件文件
Apktool - How to InstallApktool - How to Installhttps://ibotpeaches.github.io/Apktool/install/
apktool.jar下载地址:
iBotPeaches / Apktool / Downloads — Bitbuckethttps://bitbucket.org/iBotPeaches/apktool/downloads/
在windows中的使用说明:
(1)下载apktool.jar文件(我下载的是最新的 apktool_2.6.1.jar)
(2)下载apktool.bat文件 (下载地址:https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat)
如果你下载不了,可以自己新建一个apktool.bat文件,然后复制如下代码到apktool.bat文件中并保存:
@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul
set java_exe=C:\Program Files\Java\jdk-11.0.15.1\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
注意:修改 set java_exe=C:\Program Files\Java\jdk-11.0.15.1\bin\java.exe 路径为你的jdk路径。
(3)把 apktool.jar 和 apktool.bat 放到同一个目录中,例如我放在F:\Android\apktool目录里面。然后把这个目录添加到系统环境变量中,即在系统变量path中新增一条F:\Android\apktool
(4)双击运行apktool.bat,正常情况下你会看见:
如果报错:C:\Program' is not recognized as an internal or external command
你可以修改下载的apktool.bat文件:
把文件中的多行代码
set java_exe=java.exe
if defined JAVA_HOME (
set java_exe="%JAVA_HOME%\bin\java.exe"
)
修改为下面一行:(注意:C:\Program Files\Java\jdk-11.0.15.1\bin\java.exe 改为你自己安装的jdk目录)
set java_exe=C:\Program Files\Java\jdk-11.0.15.1\bin\java.exe
(5)将你要反编译的apk文件放到F:\Android\apktool目录,然后运行cmd,并切换到F:\Android\apktool目录,再运行编译命令:
apktool d app.apk -o test
命令说明:反编译app.apk文件,反编译后的文件存储到F:\Android\apktool\test目录中,命令执行成功后,你会看到test目录中有反编译后的资源文件。
2、dex2jar工具可以把apk里面的classes.dex转化成jar文件
github上有更新的版本:
在windows中的使用说明:
(1)下载dex2jar(我这里下载的是 dex2jar-2.0.zip,建议下载github上的新版dex2jar-2.1.zip),解压 dex2jar-2.0.zip,我解压后的目录为:F:\Android\dex2jar-2.0
(2)将你要反编译的apk文件后缀名改为.rar或.zip,并解压得到其中的classes.dex文件(可能有多个*.dex文件,它就是java文件编译后的class文件再通过dx工具打包而成的);
(3)将获取到的classes.dex文件放到之前解压出来的工具dex2jar-2.0 文件夹内,即我这里是F:\Android\dex2jar-2.0目录中,在命令行下定位到dex2jar.bat所在目录,输入命令:
d2j-dex2jar.bat classes.dex
会生成反编译后的文件:
classes-dex2jar.jar
现在就可以使用jd-gui工具打开它,查看其中的代码了。
3、jd-gui工具用于查看jar文件
Java DecompilerJD Java Decompilerhttp://java-decompiler.github.io/
window版下载地址:
https://github.com/java-decompiler/jd-gui/releases/download/v1.6.6/jd-gui-windows-1.6.6.ziphttps://github.com/java-decompiler/jd-gui/releases/download/v1.6.6/jd-gui-windows-1.6.6.zip在windows中的使用说明:
(1)下载 jd-gui-windows-1.6.6.zip,并解压
(2)进入解压后的文件目录中,双击jd-gui.exe文件运行:
在打开的程序窗口,点击File -> Open File -> 选中上一步用dex2jar反编译的 classes-dex2jar.jar 文件即可查看代码了,如:
这里给一份我下载的包,包括apktool_2.6.1、dex-tools-2.1和jd-gui-windows-1.6.6,百度网盘地址:
链接:https://pan.baidu.com/s/1l6tOpsxs8LLJfbNeAuc7Qg
提取码:ytza