反编译-Apktools的使用

Apktool 作用
这里就不多说了,前面已经说过:Android .apk逆向工程(安装篇):Windows下Apktool安装,下载以及使用

命令介绍
以下命令需要在 apktool根目录下完成操作:

作用
可以随时执行的选项。 通过 apktool或者apktool.bat实现

-version, --version

输出当前版本。

-v, --verbose

详细输出。必须作为第一个参数来使用。

-q, --quiet

隐藏输出,即输出不显示详细信息,必须是第一个参数来使用。

-advance, --advanced

提前使用输出,输出详细信息。
空框架目录
这些是清除框架目录时的所有选项。 

-f, --force

强制删除目标目录。

-p, --frame-path <DIR>

从中加载框架文件的位置
解码(反编译)
这些是解码apk时的所有选项, 也就是咱么所用来反编译操作的选项。通过apktool d testapp.apk来实现,也支持apktool.bat操作方式。

-api, --api-level <API>

要生成的smali文件的数字api级别(默认为targetSdkVersion)

-b, --no-debug-info

防止baksmali写出调试信息(.local,.param,.line等)。如果您要比较来自不同版本的相同APK的smali,则首选使用。行号和调试将在版本之间发生变化,这会使DIFF报告变得很痛苦。

-f, --force

强制删除目标目录。尝试解码到已存在的文件夹时使用,也就是再次反编译会覆盖之前已经存在的目录文件。

--force-manifest- v2.3.1

无论资源标志的解码如何,都强制解码AndroidManifest。

--keep-broken-res- 高级

如果出现“检测到无效配置标志。删除资源...”之类的错误。这意味着APK具有与Apktool可以处理的不同结构。这可能是较新的Android版本或与标准不匹配的随机APK。运行此操作将允许解码,但是您必须手动修复其中包含-ERR的文件夹。

-m, --match-original- 用于分析

匹配尽可能与原始文件最接近的文件,但会阻止重建。

--no-assets- v2.3.0

防止解码/复制未知资产文件。

-o, --output <DIR>

apk被写入的文件夹的名称,也就是反编译后输出的指定目录。

-p, --frame-path <DIR>

应存储/读取框架文件的文件夹位置

-r, --no-res

这将阻止资源的反编译。这保持resources.arsc完整无需任何解码。如果只编辑Java(smali),那么这是更快反编译和重建的推荐操作

-s, --no-src

这将阻止dex文件的反汇编。这将保留apk dex文件,并在构建期间简单地移动它。如果您只是编辑资源。这是更快拆卸和组装的推荐操作

-t, --frame-tag <TAG>

使用通过标记的框架文件 <TAG>
重建(编译)
这些是构建apk时的所有选项。通过 apktool b apptest来使用。

-a, --aapt <FILE>

从指定的文件位置加载aapt,而不是依赖路径。$PATH如果没有找到文件,则回退到加载。除非$PATH引用prebuilt custom aapt。这很可能不起作用。

-c, --copy-original

将原始文件夹AndroidManifest.xml和META-INF文件夹复制到内置apk中。官网准备计划弃用,可用于保持签名。

-d, --debug

添加debuggable="true"到AndroidManifest文件。在debug模式下打包。

-f, --force-all

在构建期间覆盖现有文件,重新组装resources.arsc文件和dex文件,在打包时重写已经存在的文件,强制覆盖。

-o, --output <FILE>

写入的apk的名称和位置,输出apk的位置和名字。

-p, --frame-path <DIR>

从中加载框架文件的位置,保存framework文件到指定目录。

--use-aapt2- v2.3.2

使用aapt2二进制代替appt
其他补充
framework文件
一般来说,在用apktool反编译前不需要做其他任何事情,然而有些厂商,如小米,htc,三星等,定制了framework文件并且他们在系统应用中使用了这些文件,因此,为了能够正常反编译这些apk,则必须拷贝反编译apk依赖framework文件。

如,我们尝试编译小米桌面的MiuiHome.apk,将会得到如下错误:

使用:apktool if/install-framework <framework.apk>

再次尝试反编译MiuiHome.apk:

签名问题
使用apktool b testapp –o out\testapp.apk,不出意外程序就会编译成功,单编译生成的testapp.apk并没有签名,还不能安装测试。一般情况下,保持原始签名不变,使用-c选项来保持。否则就要使用其他的签名工具来对apk签名了,如signapk.jar,auto-sign等。

META-INF包含apk的签名,使用-c/--copy-original来保持签名,使用原始的AndroidManifest.xml文件。但是如果修改AndroidManifest.xml文件,签名也就丢失了。就要重新对其签名。

反编译使用
将要反编译的apk放到 apktool目录下:

使用命令行输入:

 apktool.bat d test.apk


正在反编译中...

当然你也可以

apktool.bat d  test.apk  objectFolderPath  


其中,objectFolderPath为可选项,如果此项不存在,软件将会在apktool文件夹下新建一个apk文件名的文件夹,否则存储到目标文件夹;

其他操作,请根据 具体实际需要,根据命令进行 操作:

反编译之后的文件夹:

编译之前,反编译之后,程序全局配置文件对比:

参考文献:

Apktool官方网站:http://ibotpeaches.github.io/Apktool/
--------------------- 
作者:Soinice 
来源:CSDN 
原文:https://blog.csdn.net/Soinice/article/details/88087828 
版权声明:本文为博主原创文章,转载请附上博文链接!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值