如图1是某一个应用程序的apk文件解压缩内容
点击查看可知,xml文件基本打不开,没有源码src文件夹,只能在res文件夹中查看非xml的图片资源,但是经过加密处理过的图片,也是看不到的.
apk文件的正常的反编译过程,需要三个重要的工具.
工具一 apktool
执行命令:apktool d com.bibu.popstar_4.apk (解压输出过程如下)
18:06:48 up 3 days, 23:36, 4 users, load average: 0.68, 0.50, 0.37
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
nft tty7 :0 一09 3days 24:06 14.46s /sbin/upstart --user
nft pts/1 :0 11:06 34:00 0.32s 0.32s /bin/bash
nft pts/21 :0 16:06 31:20 0.13s 9.69s /usr/bin/python /usr/bin/terminator
nft pts/23 :0 17:16 0.00s 0.06s 9.69s /usr/bin/python /usr/bin/terminator
I: Using Apktool 2.0.2-dirty on com.bibu.popstar_4.apk
I: Loading resource table…
I: Decoding AndroidManifest.xml with resources…
I: Loading resource table from file: /home/nft/apktool/framework/1.apk
I: Regular manifest package…
I: Decoding file-resources…
I: Decoding values / XMLs…
I: Baksmaling classes.dex…
I: Copying assets and libs…
I: Copying unknown files…
I: Copying original files…
其中d 是decode的意思,执行后会在该目录中生成一个对应apk名字的文件夹.如下图2
这个时候,查看生成文件夹之后中的res文件夹的xml文件就不会是乱码了,这一步就可以较为完整的看到res资源文件了.
工具二 Dex.jar jd-gui 主要用于反编译src源码
经过解压缩之后图1中的classes.dex 就是源代码打包之后的文件,将这个文件复制到dex2jar目录下( ~/下载/apktool/dex2jar$ )
执行命令: ./dex2jar.sh classes.dex
dex2jar version: translator-0.0.9.8
dex2jar classes.dex -> classes_dex2jar.jar (这是执行过程)
Done.
执行完之后,会在该目录下生成一个jar包,如图3
工具三 jd-gui 在拿到这个jar包之后,使用命令 ./jd-gui classes_dex2jar.jar
打开该jar包,就可以查看相关的源代码了.如图4所示.