前言:作为开发者,我们反编译的目的是查看别人优秀的代码,而不是破解别人的代码,恶意修改,植入广告,获取利益。目前已经有很多APP被反编译破解了,什么保卫萝卜,等等。对原开发者,和用户都造成利益上的损失。
接下来,我就开始直崩主题了。相信你已经看了很多篇反编译的博文了。首先要准备反编译的工具。(工作环境:Windows 7)
我看到别人写的博文中都提供了工具下载地址,但他们的博文都是2013年的,比较老了,所以那些工具的地址,或者那些工具的版本都太低了。我下载后使用,总是会报如下错误。
出现这种错误,就是Apktool的版本太低。所以,我直接翻墙去官网下载了最新版的。但还是出错,因为我只下了apktoo.jar,还有一个是apkrool.bat,如果他两版本相差太大,也会报错。于是在官网都下载好了相同版本的。终于不报错了。这就浪费了我好多时间。这个问题解决后,后面的问题就轻松多了。文末附上我已下载好的工具集合包链接,和官网链接。
1.拆包:
先拿到一个Apk包,后缀名改成.zip然后解压,解压后的文件目录如下:
我们可以看到里面有个classes.dex文件,有的包会有好几个dex文件。还有AndroidManifest.xml文件,res资源文件等等。但目前打开AndroidManifest.xml就会是乱码的。不然就不需要我们反编译了。
2.反编译dex
我们先使用dex2jar将.dex文件反编译成java源代码;
将上一步中的classes.dex拷贝到dex2jar文件夹根目录。再打开cmd,切换到该目录,输入命令 d2j-dex2jar.bat classes.dex ;成功后会生成classes-dex2jar.jar文件,运行结果如图:
可以看到,命令一定要正确输入,不然就会报错。
3.jd-gui查看源代码:
双击这个工具后,找到classes-dex2jar.jar文件,就能查看源码了。如图:
如果这个Apk没有混淆的话,你就能90%的查看源代码了。毕竟还有那些id,是还原不了的。会显示对应的整数。
4.解码:
我们还有一个工具还没有使用,就是apktool了,直接切换到apktoo目录下,cmd执行 apktool d xxx.apk , d是decode的意思。如下图:
成功后就会对应生成一个 xxx文件夹,在文件夹中,你会看到有androidManifest.xml文件们还有res资源文件夹,这时候的文件都可以清晰的看到源码了。还有一个重要的文件夹smali,破解的人就会去修改这个文件夹中的内容。我们现在就只修改下androidManifest.xml中的包名。修改完成后,就可以重新打包了。执行命令:apktool b rx -o new_rx.apk
5.重新签名
别高兴太早,打包后还要重新签名的,你解压的时候,以前的签名就已经被破坏了。源apk的签名文件你是拿不到的,所以你得自己创建一个。请看我前面的哪一篇文章。拿到签名文件后,直接执行命令Jarsigner –verbose –keystore dxrx.jks new_rx.apk dxrx,如图: