Android 反编译 (原作者 http://blog.csdn.net/u012209506/article/details/53079832)

前言:作为开发者,我们反编译的目的是查看别人优秀的代码,而不是破解别人的代码,恶意修改,植入广告,获取利益。目前已经有很多APP被反编译破解了,什么保卫萝卜,等等。对原开发者,和用户都造成利益上的损失。

接下来,我就开始直崩主题了。相信你已经看了很多篇反编译的博文了。首先要准备反编译的工具。(工作环境:Windows 7)

apktool  
   作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看
dex2jar
  作用:将apk反编译成Java源代码(classes.dex转化成jar文件)
jd-gui
  作用:查看APK中classes.dex转化成出的jar文件,即源码文件

我看到别人写的博文中都提供了工具下载地址,但他们的博文都是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,如图:



输入密码时:cmd默认不显示,而且一个字都不能输错,也不能回删。输错一个,只能重来。这些密码就是你创建的时候设置的。签名成功后,你就可以安装了。
命令解析: Jarsigner  –verbose  keystone  dxrx.jks(签名文件 )   new_rx.apk (要签名的包 ) dxdx(签名的别名(key alias)

我自己的研究也是站在巨人门的肩膀上: http://blog.csdn.net/guolin_blog/article/details/49738023 

百度云盘下载地址: http://pan.baidu.com/s/1eSl0zBk
官网链接先附上: https://ibotpeaches.github.io/Apktool/install/,那个apktool.bat下载,要右键点击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值