写程序永远避不开的一个话题就是破解、反编译,这里,简单介绍一下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源码也就要从这个文件入手。
具体有两步:
- 将dex文件转为jar文件
- 读取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 | C:\Documents and Settings\Administrator>enjarify.bat |
linux/oxs 使用脚本
1 | ln -s "$PWD/enjarify.sh" ~/bin/enjarify |
android-classyshark
android-classyshark,Github地址是谷歌出的一款查看和分享android文件(APK/Zip/Class/Jar)的工具。