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
版权声明:本文为博主原创文章,转载请附上博文链接!