Android 反编译

讲到android的反编译可能对很多从事安卓开发的同学可能都没有玩过,其实我也是刚开始玩的,下面就总结一下我在项目反编译过程中的一些心得体会。

第一:先准备必要的反编译工具:apktool , dex2jar , jd-gdi
下载地址可以在我的博客里面找到:http://download.csdn.net/detail/huang_wen_huan/9753435

第二:只有你安装的JDK以后才可以使用这些工具,相信搞安卓的电话都会安装,这里就不说了。


下面的反编译又分为两类:
第一类:反编译后修改逻辑再从新打包。
1.这时你只需要解压apktool后把文件改名为apktool,里面会有apktool.bat文件和一个压缩文件,最主要的是apktool.bat这个批处理文件。
2.把你需要反编译的apk文件复制到apktool这个目录下面,例如我们要编译的apk文件为my-test.apk的话,执行C:\Users\AHuan>cd apktool进入到待反编译的apk存放目录apktool目录下面,
再执行C:\Users\AHuan\apktool>apktool d my-test.apkapktool就对apk文件进行反编译了
注:可能有很多同学到这一步会不成功,抛一堆异常的,不要慌。第一:你得先确保自己的apktool是最新的版本,第二:一般来说,你在使用apktool进行反编译前不需要做其他的事情,然而由于有的厂商,如HTC,三星等,他们定制了framework文件并且在他们的系统应用中使用了这些文件,这时,为了能正常的反编译这些apk文件,你就必须从你的设备中拷贝出framework文件并且安装到apktool中。

以三星的设备来举例,你需要复制两个framework文件来进行安装,framework-res.apk和tzframework-res.apk,一般来说,这两个文件在手机中的位置应该是system\framework\

使用以下代码进行安装

apktool if C:\framework-res.apk

apktool if C:\tzframework-res.apk

这里假设2个文件都放在C盘根目录

大家可以看这篇文章:http://www.cnblogs.com/CuriosityWzk/archive/2012/01/06/2315150.html


3.在同级目录下面会生成一个my-test文件,里面会有一些反编译的文件,只要是original,res,smali,AndroidManifest和apktool.yml,到这一步我们的xml文件和资源文件就已经反编译成功了,不信你试试。

4.大家看到这个smail这个文件了没有,我们想看的逻辑代码就是在这个文件里面,但是当大家打开看的时候可能就懵逼了,好像里面的不是java代码啊,没错,里面的不是java代码,是汇编语言写的代码,需要大家懂的汇编语言才能处理里面的逻辑代码,这里就不说了。大家可以看看这篇文章,写得不错:http://www.open-open.com/lib/view/open1463109248305.html

5.大家对逻辑文件修改完以后想要重新打包的话执行下面语句:C:\Users\AHuan\apktool>apktool my-test,就会在my-test目录下面生成build和dist文件,dist里面的apk文件就是我们修改了以后重新打包的apk文件,build里面的就是为修改的apk文件。



6:对apk文件重新签名,重新打包的apk文件是不能安装的,要重新前面,随便去下载个Auto-sign就行了。重新签名的文件就可以安装了


第二类:反编译apk文件生成java代码

第一:把dex2jar-2.0压缩文件解压得到dex2jar-2.0文件。
第二:把需要反编译的apk文件的后缀修改为zip文件并解压得到classes.dex文件,我们就是对这个文件动手脚的。
第三:把classes.dex文件复制到dex2jar-2.0目录下面,进入到这个dex2jar-2.0文件目录下面执行F:\dex2jar-2.0>d2j-dex2jar classes.dex就会同级目录下面生成classes-dex2jar.jar文件,这个就是dex文件转换为jar文件的过程。

第四步:运行JD-GUI_xp85文件里面的jd-gui.exe文件,把刚才的classes-dex2jar.jar文件导入打开就可以看到java源代码了
注:混淆的项目中的代码是以a,b,c作为函数名什么的,这个花点时间也还是可以看懂的,建议刚开始玩的同学先拿一个没有混淆的apk文件来尝试一下。



好了,这次就先讲到这里,有什么问题的 欢迎大家留言探讨。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值