一、前言
众所周知,APK是由源码编译生成的,那么反过来,源码也是有可能是由APK反编译的。近来学习Android逆向工程,所以写写博客记录学习过程还是很有必要的,那么就从反编译一个简单的APK开始吧。
二、工具
1、apktool
作用:资源文件获取,可以提取apk中的图片文件和布局文件
下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads
2、dex2jar
作用:将apk反编译成java源码(从classes.dex转化成jar文件)
下载地址:http://sourceforge.net/projects/dex2jar/files/
3、jd-gui
作用:将dex2jar转化成的jar文件打开,展示其源码文件
下载地址:http://jd.benow.ca/
三、反编译过程
1、为方便操作,将上面三个工具下载完成放到同一文件夹下
将dex2jar 和 jd-gui 解压到当前目录。
同时准备一个将要被反编译的apk,放于当前目录
2、apktool反编译获取资源文件
打开cmd命令窗口,通过cd指令切换到工具所在目录
cd D:\AndroidProgramming\AndroidDevelopTools
d:
运行apktool.jar包完成反编译
java -jar apktool_2.4.0.jar d -f D:\AndroidProgramming\AndroidDevelopTools\decompile_apk\app-release.apk -o decompiled
//在java中,运行可执行jar包的命令是:java -jar jar包名.jar
//以上的命令意义是:启动apktool_2.4.0.jar将位于指定路径文件(D:\AndroidProgramming\AndroidDevelopTools\decompile_apk\app-release.apk)反编译,生成的文件存放到当前目录下的一个decompiled文件夹(文件名可以自定义)中。
运行图如下则反编译成功
反编译成功后即可在decompiled文件夹下看到 AndroidManifest.xml 文件 和 res资源
3、dex2jar反编译获取dex文件
将要反编译的APK后缀名改为.rar或者 .zip,并解压,得到其中的classes.dex文件
将获取到的classes.dex放到之前解压出来的工具 dex2jar-2.0 文件夹内
在命令行下定位到dex2jar.bat所在目录,输入
d2j-dex2jar classes.dex
然后就可以看到生成了个classes-dex2jar.jar文件
4、jd-gui反编译查看源码
双击启动jd-gui文件夹下jd-gui.exe文件,在窗口页面打开上述获取到的classes-dex2jar.jar
然后就可以看到源码了(代码混淆过的话,类文件名称以及里面的方法名称会以a,b,c....之类的样式命名)
操作完发现并不难,不过需要注意的是在实际中apk会有一些混淆和加固,所以以上仅对简单apk有效,更进一步的反编译还需进一步学习逆向工程相关内容。