工具介绍:

apktool

 作用:主要查看res文件下xml文件、AndroidManifest.xml和图片。(注意:如果直接解压.apk文件,xml文件打开全部是乱码)

dex2jar

 作用:将apk反编译成Java源码(classes.dex转化成jar文件)

jd-gui

 作用:查看APK中classes.dex转化成出的jar文件,即源码文件

下载与安装

Apktool 工具

背景说明:通过 Apktool 工具,能完整的从 apk 安装包中提取出 resource、dex、manifest、xml 等文件;也可以修改资源文件之后 rebuild 一个apk。本文主要说明该工具如何安装以及使用。如果感觉该工具的下载和配置过程繁琐,私信我直接发你配置好的文件。

官网链接: https://ibotpeaches.github.io/Apktool/

下载apktool-xxx.jar 改名为 apktool.jar 新建BAT文件 apktool.bat 文件内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@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
1
apktool d target.apk

dex2jar

背景说明: 1、dex2jar 工具主要是将 dex 文件转换为包含 class 文件的 jar 文件。 2、JD-GUI 工具是针对从dex 转为jar后的文件,进行可视化读取与展示。 3、apk安装包是一个zip压缩包,如果仅仅是想获取源码文件,并不关心具体资源文件,可跳过第一步 apktool 工具的操作,直接到第二步进行 dex 到 jar 文件的转换。

一、dex2jar 工具官网下载: dex2jar 工具 GitHub链接:https://github.com/pxb1988/dex2jar

直接获取 Release 的最新版本(我操作时最新版本是 V2.1 版本) 跳转到 Releases 页面 Assets 目录,直接下载可执行文件的压缩文件。 解压后,命令行进入到该 dex-tools-2-2.1 路径下进行 dex 操作。

二、目标 dex 文件操作: apk 安装包本质是经过特殊处理的压缩包,可以直接将 target.apk 修改后缀名为 target.zip,然后通过解压工具解压,解压后的文件夹包含各种资源文件和文件夹,以及 dex 文件,如果apk是多个 dex 文件组成,解压后会有多个dex 存在,可逐个操作。

需要注意的是,直接通过 zip 解压出来的文件,资源文件(比如 manifest 等文件)都是一些二进制码,无法直接查看,如果想要查看,请看该专题的第二篇文章来操作。

执行脚本:sh d2j-dex2jar.sh classes.dex

三、通过JD-GUI 工具查看 jar 文件

JD-GUI官网链接:http://java-decompiler.github.io/ 下载对应对应系统的工具。 下载完成后解压,直接打开JD-GUI 文件工具 直接将 之前通过dex2jar生成的 jar文件拖入 JD-GUI 即可查看源码 通过工具可以查看到源码是否有混淆。