Android反编译工具的使用(保姆级教程)
网上关于Android反编译的文章很多,但是好多都比较杂,就打算自己写一下,顺便也能加深一下印象。
一、常用反编译文件的介绍
apktool
apktool也算是一个老牌的反编译软件了,可以提取出apk中的源代码,图片,XML配置,还有语言的资源,这个软件是没有gui页面的所以需要你利用命令行进行使用,也正是这个原因,我们可以很容易的将其放到Linux服务器上,然后进行自动的反编译并进行恶意性分析的操作。
官网:https://ibotpeaches.github.io/Apktool/
dex2jar
这个工具的主要功能是将dex文件转化为包含class文件的jar文件。至于dex文件,这个其实就是Android系统的可执行文件,包含应用操作的全部指令和运行时的数据,当Java编译成class文件后,我们以通过dx工具将class文件整合成一个dex文件,目的是让文件结构更加紧凑,大小更小,dex 文件可以分为3个模块,头文件、索引区、数据区(有点熟悉是不是)。
github网页:https://github.com/pxb1988/dex2jar
JD-GUI
相比于上面的两个反编译文件,JD-GUI的有点就是拥有GUI界面,使用起来会比较的方便。JD-GUI的主要功能是将class的jar包反编译成.java文件。可以和上面的dex2jar文件合起来使用。
github网页:https://github.com/java-decompiler/jd-gui
二、安装工具
apktool的安装
apktool的安装有点复杂,安装apktool的话需要java 1.8以上
首先我们下载apktool的jar包,然后将其重新命名为apktool。然后还要下载windows下的脚本,我直接将脚本代码贴在下面了,新建一个txt文件,将脚本贴进去,然后改文件名为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
之后我们将两个文件放到一个文件夹里
之后我们需要添加环境变量
这样我们的apktool就安装好了,直接双击apktool可以看到它的基础信息和简单的用法,然后我们还可以在命令行运行一下试试
D:\Environment\apktool>apktool.bat -version
2.6.1
显示的结果,说明没有问题
dex2jar
这个东西我们可以直接在官网上下载,我下载的v2.1的版本。
然后将其解压就可以了
JD-GUI
这个的安装也同样比较简单,我们在其官网上找到下载连接,下载和你系统相匹配的文件。
我们解压后直接运行jd-gui.exe就可以了。
吼,到这时我们就把所有的文件都给安装完成了。
三、开始逆向
apktool的逆向
我们首先使用apktool进行逆向,获取相应文件。
首先,我们把需要逆向的apk放到apktool的目录中
然后打开命令行,输入以下命令
apktool d app-release.apk
然后我们就发现出现了一个文件夹,里面就是我们反编译后获得的结果
里面就包含我们的布局文件。
dex2jar的逆向
我们找到dex2jar解压的目录,将刚才的apk放入到其中,打开命令行,然后输入以下命令
d2j-dex2jar.bat -f app-release.apk
然后我们可以得到结果
dex2jar app-release.apk -> .\app-release-dex2jar.jar
这就表明成功了,我们可以在目录中发现一个叫app-release-dex2jar.jar的一个文件,这就是我们反编译后得到的jar包。
jd-gui的逆向
我们上面得到jar包后,打开jd-gui.exe,然后将jar包放进去,当当当当~我们就可以得到java源代码了
而且如果这个代码没有被混淆的话,我们是可以清晰的看到它的变量名的。这样就完成了我们的逆向,然后我们就可以分析这个文件或者开发相应的游戏mod等。