apk反编译详解
这里的反编译的目的并不是修改别人的代码然后自己发布盗版apk,而且这种方法也做不到。这里的反编译只能查看作者的大致代码,目的是研究apk中某些效果的实现方法,知道大致的方法之后,具体代码还需自己写。
apk的反编译分为两部分,一是反编译classes.dex得到java代码,二是反编译资源文件以及xml布局文件,这两部分是分开的,并且使用的是不同的工具。
这些工具分别是apktool、dex2jar和jd-gui,其中apktool用于反编译xml文件;apktool用于反编译classes.dex,生成.jar文件,然后用jd-gui.exe查看这个jar文件中的java代码。
我用的apktool和dex2jar的版本分别是apktool1.5.2 和 dex2jar-0.0.9.15。
下载地址见文末。
一、反编译Apk得到Java源代码
先将apk文件的后缀名改成zip,然后解压这个zip文件,解压之后一般会得到包含如下文件的目录:
这里只有classes.dex文件有用,将这个classes.dex拷贝到dex2jar的dex2jar.bat所在目录,然后在命令行下定位到dex2jar.bat所在目录,运行:
dex2jar.bat classes.dex
然后在同一目录下就会生成classes_dex2jar.jar文件。
我们用jd-gui打开这个jar文件就可以看到java代码了。
从反编译出的代码可以看出,这个apk的代码混淆做的比较好,不容易分析出其代码结构。
二、反编译apk的xml,图片等资源文件。
直接解压apk也能得到图片、xml等资源文件,但是得到的xml是乱码,而图片资源也也不是原封不动的,特别是.9图片,全都变成了一般的图片。
apktool专门用于反编译这些资源文件。
下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载),将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar。
如果不知道怎么做,或者无法下载,直接使用我在文章末尾给出的工具包就行了,我已经弄好了。
首先定位到apktool所在的目录,然后执行:
apktool d souhushipin.apk souhushipin
命令行解释:apktool d [apk文件 ] [输出文件夹]
其中[apk文件 ]和[输出文件夹]都直接在apktool的根目录的话,就不需要写绝对路径了,直接写文件和目录名。
为了命令行书写方便我都是直接将apk文件放在同一目录下。如下:
其中[输出文件夹]只需指定就好了,不要自己新建目录,他会自动生成。如上图,执行了
apktool d souhushipin.apk souhushipin
之后,就会在同一目录下得到souhushipin文件夹。里面有这些东西:
和dex2jar反编译出的java代码不同,apktool反编译出的资源文件都是可以直接使用的,不存在混淆的问题。
重新打包修改过的apk
apktool还可以将反编译完的文件重新打包成apk,很简单,输入apktool b [文件夹](你编译出来文件夹)即可,命令如下:
apktool d b souhushipin
运行之后会在souhushipin目录下生成
build
dist
两个文件夹。
其中,打包生成的souhushipin.apk,在上面的dist文件夹下。
想想这种方法是不是可以用于apk的汉化呢。。。。
最后我把所有用到的工具都放在一个包中,而且apktool的两个东西我都已经弄在一起了,解压后就可以直接使用。
下载地址: 反编译工具集 。