• layout 文件和 manifest 文件的反编译
  • 步骤一
  • 步骤二
  • classesdex 文件的反编译
  • 步骤三
  • 步骤四
  • 步骤五
  • 步骤六
  • 步骤七
  • 项目的混淆打包处理
  • 步骤八
  • 步骤九
  • 反编译工具下载


有些时候,我们想知道他人项目中的某个小功能怎么写的。我们需反编译他人的项目,然后仔细研究其代码逻辑,这是逆向工程范畴的东西。

我们先来了解大体思路。

首先,把 layout——>可以看到 layout 文件
其次,把 manifest ——>可以看到 manifest 文件
最后,把 .class 文件——> java 文件

这里介绍三个工具:
apktool-v2.0.0RC2:这个把 layout 和 manifest 文件,反编译成可以看到
dex2jar-0.0.9.8:这个可以把 .class 文件反编译成 java 文件
jd-gui-0.3.3.windows:这个可以把反编译的 java 文件,直接拖进入查看源码

工具如下图:

android sdk防止反编译 反编译androidmanifest_根目录

首先,我们查看一般的apk解压并打开文件。

android sdk防止反编译 反编译androidmanifest_android_02

如下图,分别打开res 中的 layout 文件AndroidManifest.xml 文件classes.dex 文件,发现都是二进制乱码,不能查看源码。

android sdk防止反编译 反编译androidmanifest_android_03

接下来,将介绍反编译的步骤。

layout 文件和 manifest 文件的反编译

步骤一

app-release.apk文件,放到apktool-v2.0.0RC2的根目录下。然后在命令行下,到其根目录中。

android sdk防止反编译 反编译androidmanifest_android_04

步骤二

在其命令行下,编写apktool d app-release.apk,点击回车键。将反编译 layout文件和manifest文件,直到结束。

android sdk防止反编译 反编译androidmanifest_根目录_05

结束之后,将在apktool-v2.0.0RC2的根目录下。出现app-release的文件夹,打开可以看到有layout文件夹和manifest文件,将两者打开,可以看到其源码。

至此,layout文件和manifest文件反编译成功。

classes.dex 文件的反编译

之前,我们把app-release.apk解压了,看到里面有一个classes.dex文件。没错,接下来将把其编译成java文件。

步骤三

先把classes.dex文件放到dex2jar-0.0.9.8的根目录下。我们将在命令行中,使用dex2jar.bat进行批处理。

android sdk防止反编译 反编译androidmanifest_android_06

步骤四

在命令行中,到dex2jar-0.0.9.8的根目录下。

android sdk防止反编译 反编译androidmanifest_android sdk防止反编译_07

步骤五

在命令行中,输入dex2jar classes.dex,之后看到下图中红色框中的done出现,则反编译完成。

android sdk防止反编译 反编译androidmanifest_jar_08

此时,dex2jar-0.0.9.8的根目录下,将出现刚才编译好的jar包:classes_dex2jar.jar文件。

android sdk防止反编译 反编译androidmanifest_jar_09

步骤六

打开jd-gui-0.3.3.windows目录下的,jd-gui.exe可执行程序。

android sdk防止反编译 反编译androidmanifest_根目录_10

步骤七

把刚才编译的classes_dex2jar.jar文件,直接拖拽进去,就可以看到源码了。

android sdk防止反编译 反编译androidmanifest_根目录_11

看这个mainactivity,里面的源码也太清楚了吧。这是因为我们打包时,没加混淆的原因。混淆的目的是为了增加反编译的难度,把里面的变量和代码都给模糊处理了。这样一来,阅读反编译后的源码,难度就大大增加了。

接下来,我们介绍混淆处理。

项目的混淆打包处理

步骤八

将项目的,app目录下的build.gradle中的buildTypes里面的minifyEnabled false改为minifyEnabled true。然后进行打包编译。

android sdk防止反编译 反编译androidmanifest_反编译_12

步骤九

之后,按上面的步骤对其进行反编译操作,发现layout文件和manifest文件还是和之前一样,没进行混淆。然而,classes.dex文件则进行了充分的混淆。如下图:

android sdk防止反编译 反编译androidmanifest_jar_13