Android反编译浅析

写程序永远避不开的一个话题就是破解、反编译,这里,简单介绍一下Android的反编译基础。
apk文件其实是一个压缩包,如果我们将文件的后缀改为zip的话,就可以用压缩工具去对其进行解压。

反编译资源文件

解压apk得到的文件夹里面,有res文件夹,里面肯定就藏了我们熟知的资源文件了。
但实际上,这个res文件夹里面的相关资源文件都是乱码,要想获取一个apk的资源文件,就需要一个命令行工具——Apktool
当前用的都是Apktool2.X了,对应的,使用之前,要先确保已有java1.7环境
安装步骤如下(以Windows为例,Linux以及Mac OS类似,可以参考官方文档):

  • 下载脚本文件apktool.bat
  • 下载最新的Apktool2.x.jar,下载下来后,重命名为apktool.jar
  • 将上面两个文件放到Windows目录下(一般为C://Windows),当然,也可以放到自己的目录下,然后将自己的目录添加到环境变量

上面的步骤完成后,就能在命令行中使用Apktool工具了。
使用也很简单,在命令行中输入下面的命令就行了:

1
apktool d ***.apk

这之后,就会在apk所在目录生成一个以apk的名字命名的文件夹,里面就能找到我们熟知的资源文件了。

反编译java源码

解压apk得到的文件夹里面,有一个classes.dex文件,它是java文件编译然后通过dx工具打包成的生成的。我们要获取java源码也就要从这个文件入手。
具体有两步:

  1. 将dex文件转为jar文件
  2. 读取jar文件中的源码

将dex转为jar

使用很简单,下面两步:

  • 下载dex2jar工具并解压。
  • 将classes.dex复制到dex2jar.bat所在目录

然后,在命令行下定位到dex2jar.bat所在目录,并执行命令:

1
dex2jar.bat classes.dex

之后就生成了我们需要的classes_dex2jar.jar文件。这个就是源码jar包了。

读取jar文件中的源码

去下载喜闻乐见的读源码工具——jd-gui
将上面生成的classes_dex2jar.jar文件拖进去,OK,就能读源码了。

其他工具

onekey-decompile-apk

onekey-decompile-apk主要功能如下:

  • 集成apktool/dex2jar/jd-gui
  • 只需执行一步即可反编译出apk所有文件(资源文件和jar等等)
  • 反编译完毕后自动打开jd-gui反编译jar文件

使用方法:

  • 下载onekey-decompile-apk.zip, 解压缩到类似D:\downloads\onekey-decompile-apk
  • 将apk文件放到onekey-decompile-apk目录下
  • 将apk文件拖拽到_onekey-decompile-apk.bat上

执行结果:

  • 在onekey-decompile-apk目录下生成和apk同名的目录(放置了apktools反编译出来资源)
  • 在onekey-decompile-apk目录下生成和apk同名的jar文件(dex2jar反编译出来的class)

enjarify

enjarify是是谷歌出品的一款反编译工具,它可以将dalvik字节码转化成java字节码。然后就可以使用JD-GUI之类的java逆向工具来分析app了。
enjarify可以运行在任意装有python3的平台上。

使用方法

直接使用
1
python3 -O -m enjarify.main yourapp.apk
win使用批处理
1
2
3
4
5
6
7
8
9
10
11
12
C:\Documents and Settings\Administrator>enjarify.bat
usage: enjarify [-h] [-o OUTPUT] [-f] [--fast] inputfile
enjarify: error: the following arguments are required: inputfile

//注意批处理里面的调用是 python3,默认的安装完后的 exe 是 python,改下两边任意一个的 name 就好了.

C:\Documents and Settings\Administrator>enjarify.bat "C:\Documents and Settings\Administrator\My Documents\下\Root-Explorer-3.3.4.apk"
1000 classes processed
2000 classes processed
3000 classes processed
Output written to C:\Documents and Settings\Administrator\My Documents\下\Root-Explorer-3.3.4-enjarify.jar
3244 classes translated successfully, 0 classes had errors
linux/oxs 使用脚本
1
2
3
4
ln -s "$PWD/enjarify.sh" ~/bin/enjarify
enjarify yourapp.apk
enjarify classes2.dex
enjarify yourapp.apk -o yourapp.jar

android-classyshark

android-classysharkGithub地址是谷歌出的一款查看和分享android文件(APK/Zip/Class/Jar)的工具。