APK注入,重新编译android清单

时间:2018-04-19 22:50:53

标签: java android apk code-injection apktool

我想要实现的目标

将apk中打包的 AndroidManifest.xml 从二进制格式转换为普通的xml文件,编辑并重新编译回apk可接受的二进制文件。基本上我需要一个AXML文件的驱动程序

短背景

我正在开发一个APK注入项目。 我的目标是

  1. 反汇编dalvik二进制文件
  2. 阅读AndroidManifest xml并添加修改,例如更改主要活动和添加权限
  3. 重建并签署apk文件
  4. 我使用apktool来组装和反汇编apk。但是,apk工具仅适用于--no-res选项,如果使用资源对apk进行反汇编,则无法构建它。 Here's a github issue describing this bug

    问题

    由于我在没有res标志的情况下反汇编apktool d --no-res app-debug.apk,因此生成的android清单以二进制形式出现。我可以使用apktool反汇编清单,但我无法回复它。

    我希望能做什么

    我需要:

    • 找到一种方法来反汇编清单,然后将其重新组合成二进制形式
    • 找到一种方法apktool使用资源

    到目前为止我尝试了什么

    声明

    虽然stackoverflow是一个知识共享社区,而不是判断它的用途 - 我看到很多人在针对非法活动的指控中挑选其他人。

    我所做的事情绝对合法,不会被用来利用任何人。

3 个答案:

答案 0 :(得分:6)

安装可以在以下条件下给出解析错误,看看是否遇到了任何问题 -

  • 签名后更改包的名称:使用确切的名称作为 已签名的包(相反,在Manifest中调整名称)
  • 包。 在更高的API级别上编译:更正API级别 清单文件。
  • 从SD卡执行包:运行(安装)apk - 来自手机内存的文件或使用adb命令安装它。

您可以手动将apk设置为给定here

答案 1 :(得分:0)

我发现使用纯文本androiod清单重新打包应用程序的唯一可靠方法是直接使用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>

答案 2 :(得分:0)

我也遇到过类似的问题,但我在 Easy APK tool 上很幸运。

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

另一种选择是使用 aapt,正如 Ben 已经说过的那样,但它需要更多的知识/努力。