android反编译

打卡第二天,今天腾讯云的备案幕布到了,进行了域名备案。即开发了微信小程序之后,公司又下发了新的开发任务。通过蓝牙指令控制别人的硬件设备,但是别人不给详细的demo,故想到了android反编译该apk的源文件。

首先介绍三个必须的软件
1.反编译资源文件(apktool)
该软件用于最大幅度的还原APK文件中的9-patch图片、布局、字符串等等一系列资源
windows软件



2.将APK文件中的代码反编译
  • dex2jar 这个工具用于将dex文件转换成jar文件 

  • jd-gui 这个工具用于将jar文件转换成java代码 
下载地址: http://jd.benow.ca/

接下来进行反编译操作
第一步,将需要被反编译的apk文件copy到apktool的文件夹中,然后cmd进入到这个目录中,再cmd中执行如下代码

apktool d SmartMilk .apk

其中d是decode的意思,表示我们要对Smartmilk.apk这个文件进行解码。除了这个基本用法之外,还可以再加上一些附加参数来控制decode的更多行为:

-f 如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)。
-o 指定解码目标文件夹的名称(默认使用APK文件的名字来命名目标文件夹)。
-s 不反编译dex文件,也就是说classes.dex文件会被保留(默认会将dex文件解码成smali文件)。
-r 不反编译资源文件,也就是说resources.arsc文件会被保留(默认会将resources.arsc解码成具体的资源文件)。

正常我是进行的 apktool d SmartMild.apk -s命令得到dex的文件

第二步,将classes.dex的这个文件copy到dex2jar-2.0目录下,其中我们要用到的是d2j-dex2jar.bat这个文件,当然如果你是linux或mac系统的话就要用d2j-dex2jar.sh这个文件。

这个classes.dex文件就是存放所有java代码的地方了,我们将它拷贝到dex2jar解压后的目录下,并在cmd中也进入到同样的目录,然后执行:

d2j-dex2jar classes .dex

会得到如下的文件,可以看到,classes-dex2jar.jar这个文件就是我们借助工具之后成功转换出来的jar文件了。

对于我们而言,jar文件也不是可读的,因此这里还需要再借助一下jd-gui这个工具来将jar文件转换成java代码。
下面就很简单了,使用jd-gui工具打开classes-dex2jar.jar这个文件,结果如下图所示:


由此可见,代码反编译工作已经成功了,基本已经做到了90%以上的还原工作。但是如果想要做到100%的代码还原还是非常有难度的,因为像setContentView()方法传入的参数,其实就是一个资源的id值而已,那么这里反编译也就只能将相应的id值进行还原,而无法变成像R.layout.activity_main这样直观的代码展示。
另外,很多其它的代码也被反编译出来了,因为当前项目有引用support-v4和support-v7的包,这些引用的library也会作为代码的一部分被打包到classes.dex文件当中,因此反编译的时候这些代码也会一起被还原。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值