APK 注入,重新编译 android 清单

APK injection, recompiling android manifest

我想达到的目标

反编译apk中的AndroidManifest.xml从二进制形式打包成正常的xml文件,编辑它并重新编译回apk可接受的二进制文件。基本上我需要一个 AXML 文件的驱动程序

短背景

我正在从事 APK 注入项目。 我的目标是

  1. Disassemble dalvik 二进制文件
  2. 阅读 AndroidManifest xml 并对其进行修改,例如更改 main activity 并添加权限
  3. 重建并签署 apk 文件

我使用apktool来组装和反汇编apk。但是,apk 工具仅适用于 --no-res 选项,如果 apk 被资源反汇编,则无法重新构建。 Here's a github issue describing this bug.

问题

由于我反汇编 apktool d --no-res app-debug.apk 没有 res 标志,生成的 android 清单以二进制形式出现。我可以使用 apktool disassemble 清单,但我无法将其组装回去。

我希望能够做什么

我需要:

到目前为止我尝试了什么

免责声明

虽然 Whosebug 是一个知识共享社区,但不判断它的用途 - 我看到很多人在类似问题上挑剔他人,指责他们从事非法活动。

我所做的是绝对合法的,不会被用来剥削任何人。

安装可能会在以下情况下给出解析错误,看看您是否遇到过 -

  • 签名后更改包名称:使用准确的名称作为 签名的包是(而不是,调整清单中的名称)
  • 包裹。 针对更高 API 级别进行编译:更正 API 级别 清单文件。
  • 包从 SD 卡执行:运行(安装)apk - 来自手机内存的文件或使用 adb 命令安装它。

您可以按照给定的方式手动签署您的 apk here

我发现使用纯文本 android 清单重新打包应用程序的唯一可靠方法是直接使用 aapt 重新打包它。

aapt package -f -M ./AndroidManifest.xml -S res1/ -S res2/ ... -I android.jar -F MyProject.apk.unaligned

创建apk,然后:

aapt add -f MyProject.apk.unaligned classes.dex

将编译后的源代码添加到包中。

然后使用 jarsigner 对包进行签名:

jarsigner -storepass <keystore password> -keystore <keystore filename> MyProject.apk.unaligned <key name>

我也遇到过类似的问题,不过运气好Easy APK tool

我打开了应用程序,然后导航到 options -> apktool 并检查了 don't decode classes.dex。然后我能够成功地重新编译应用程序。

另一种选择是使用 aapt,正如 Ben 已经说过的,但它需要更多 knowledge/effort。