反编译APK案例

社长第一次反编译的时候是一次项目开发中需要去监听系统闹钟,开发闹钟的同事没有用原生的闹钟Action,正巧也找不到人,于是打算把apk导出来反编译看看。还说挺不错的一个技巧,在尊重开发者的前提下让自己多了解些知识还是挺好的。


扯了这么多,接下来进入主题吧。


反编译有对代码的反编译和对资源文件的反编译,首先我们需要三个工具:

1、dex2jar 这个工具用于将dex文件转换成jar文件

下载地址:http://sourceforge.net/projects/dex2jar/files/

2、jd-gui 这个工具用于将jar文件转换成java代码

下载地址:http://jd.benow.ca/

3、apktool 这个工具用于最大幅度地还原APK文件中的9-patch图片、布局、字符串等等一系列的资源。

下载地址:http://ibotpeaches.github.io/Apktool/install/


第一步:

将apk文件打开得到里面的classes.dex,这个文件包含的就是代码啦。


我们需要先把它转换成jar,这个时候我们就用到了dex2jar工具了,将下载下来的dex2jar进行解压,将这个classes.dex文件放在dex2jar解压后的根目录。当然也可以不放进来,只是为了接下来方便一点。接下来Ait+Ctrl+t进入命令行cd到dex2jar的根目录,对了,社长是在Linux下进行的反编译,原理步骤都一样,和Windows下不同的就是命令吧。然后执行:


sh d2j-dex2jar.sh classes.dex



输出了.dex->.jar就表明已经成功了,有的可能会出现permission denied,则需要将d2j-dex2jar.sh和d2j_invoke.sh修改权限 chomd 777/+x 文件名,得到的结果:




可以发现多了一个classes-dex2jar.jar,这个jar就是通过dex2jar将.dex转换过来成为jar的啦。那么jar得到了接下来就是看他的代码了,下面开始要用到jd-gui工具。


第二步:

把下载的jd-gui解压然后打开得到的jar就可以看到代码啦。有的人可能打不开有可能是因为缺少32位的包,执行:

sudo apt-get install libgtk2.0-0:i386 libxxf86vm1:i386 libsm6:i386 lib32stdc++6

得到的结果:




对代码的反编译已经结束了,过程还是比较简单,那么有些还需要得到资源文件的,直接对apk解压可以得到一些资源文件不过打开之后你就会发现是一堆的乱码,这个时候我们就需要对资源文件的反编译。


第一步:

把apk文件放在apktool.jar的同级目录,和上面一样只是为了方便。

第二步:

执行:

java -jar apktool.jar d XXXX.apk


得到结果:




执行成功后会得到apk的解压包,如果执行失败的话,有可能是缺少同上所说的那个32位的包,执行同样命令就可以了,或者也可能以前生成过,有个1.apk找到删除就好了。好,来打开其中一个资源文件看看




很好,已经可以看到了。OK!好热回去吹空调了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值