反编译工具

记录反编译的方法,方便自己用的时候比较方便,起到记录的作用;
运用场景:排查混淆问题,反编译apk,看类是否被混淆;
运用场景:查看jar的代码,以及是否被打入apk中;
运用场景:其他需要反编译的时候;
运用场景:某个技术点想参考别的app,或者研究竞争对手的app等等;(注意:不要用于非法事情)
反编译步骤
工具准备
apktool —— 官方下载 ,其作用是拿到apk 中的dex文件;(可选工具,非必须)
下载地址: https://ibotpeaches.github.io/Apktool/
dex2jar—— 官方下载,见名知意,就是把dex转化为jar文件,这是最关键的一步;
下载地址: https://down.52pojie.cn/Tools/Android_Tools/
gui —— 官方下载,这是一个图形化工具,查看jar里面的代码。(非必需,有其他可替代工具)
下载地址:https://down.52pojie.cn/Tools/Android_Tools/
总结:大致就三步,第一:从apk文件中拿到dex文件;第二:把dex文件转化为jar包文件;第三:查看jar文件中代码;

一:从apk到dex文件
从apk到dex,可以利用jartool ,当然有替代方法:就是解压软件直接解压,这种方式最快,最省事,和jartool 没有区别。

上面两图介绍了解压软件解压apk后的解压产物,可以拿到dex文件。

通过jartool 方式

基本命令: java -jar apktool.jar  d  待解压的apk 

// 注意apktool.jar是刚才下载后的jar的名称,d参数表示decode
// 在这个命令后面还可以添加像-o -s之类的参数,例如
// java -jar apktool.jar d yourApkFile.apk -o destiantionDir -s
// 几个主要的参数设置方法及其含义:
-f 如果目标文件夹已存在,强制删除现有文件夹
-o 指定反编译的目标文件夹的名称(默认会将文件输出到以Apk文件名命名的文件夹中)
-s 保留classes.dex文件(默认会将dex文件解码成smali文件)
-r 保留resources.arsc文件(默认会将resources.arsc解码成具体的资源文件)
示例:

apktool.jar 和 apk放在同一个目录下

最后,我们可以看到解压后文件为:

dos命令行截图中一共运行了两个jar命令,第二个命令是 解压app-debug.apk 文件到app-debug-1文件夹,并保持dex文件 。另外,现在app为了突破最大方法数量限制,用了多dex 方式,所以这里apk内部可能会有多个dex文件。

这里,后续还可以研究下,apk文件由什么组成,各部分代表什么。这里,参考一下其他的博主介绍

我们已经得到一个可以用文本编辑器打开的阅读的AndroidManifest.xml文件、assets文件夹、res文件夹、smali文件夹等等。original文件夹是原始的AndroidManifest.xml文件,res文件夹是反编译出来的所有资源,smali文件夹是反编译出来的代码。注意,smali文件夹下面,结构和我们的源代码的package一模一样,只不过换成了smali语言。它有点类似于汇编的语法,是Android虚拟机所使用的寄存器语言。

这时,我们已经可以文本编辑器打开AndroidManifest.xml文件和res下面的layout文件了。这样,我们就可以查看到这个Apk文件的package包名、Activity组件、程序所需要的权限、xml布局、图标等等信息。其实我们把Apk上传到应用市场时,应用市场也会通过类似的方式解析我们的apk。

note1:其实还有一种方法,可以省去每次解包时,都要输入java -jar apktool.jar xxx这行命令,官网也有说明,就是将这个命令包装成shell脚本,方法见:Apktool - How to Install 。而这个shell的脚本在有些博客里介绍是 jartool.bat 文件,其实其作用就是上面的说的。

二、 从dex到jar
这一步是最重要的,需要dex2jar工具,

接下来,我们把第一步获取的dex文件放到 刚刚解压的文件中,然后运行命令:

Mac:sh d2j-dex2jar.sh classes.dex classes2.dex
Windows: d2j-dex2jar.bat classes.dex

会得到jar 文件,见上面的截图中红色框框。

第三步:用gui 图形化工具查看代码
下载好工具后,双击exe文件,然后把jar文件拖入其中即可

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值