APK 注入,重新编译 android 清单
APK injection, recompiling android manifest
我想达到的目标
反编译apk中的AndroidManifest.xml从二进制形式打包成正常的xml文件,编辑它并重新编译回apk可接受的二进制文件。基本上我需要一个 AXML 文件的驱动程序
短背景
我正在从事 APK 注入项目。
我的目标是
- Disassemble dalvik 二进制文件
- 阅读 AndroidManifest xml 并对其进行修改,例如更改 main activity 并添加权限
- 重建并签署 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 清单,但我无法将其组装回去。
我希望能够做什么
我需要:
- 找到一种方法来消除assemble清单,然后assemble将其恢复为二进制形式
- 找到一种使用
apktool
资源的方法
到目前为止我尝试了什么
- 将二进制
AndroidManifest.xml
替换为纯文本版本,然后构建。 apktool
将构建。但是,将应用程序安装到设备失败并显示“解析错误,解析包时出现问题”。
- 使用不同版本的
apktool
:v2.3.2
、v2.3.1
、v2.3.0
、v2.2.0
、v2.2.1
、v2.2.2
- 使用以下项目编译xml:https://github.com/rednaga/axmlprinter ; https://github.com/ZaratustraN/axml-parser ; https://github.com/shazam/axmlparser
免责声明
虽然 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。
我想达到的目标
反编译apk中的AndroidManifest.xml从二进制形式打包成正常的xml文件,编辑它并重新编译回apk可接受的二进制文件。基本上我需要一个 AXML 文件的驱动程序
短背景
我正在从事 APK 注入项目。 我的目标是
- Disassemble dalvik 二进制文件
- 阅读 AndroidManifest xml 并对其进行修改,例如更改 main activity 并添加权限
- 重建并签署 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 清单,但我无法将其组装回去。
我希望能够做什么
我需要:
- 找到一种方法来消除assemble清单,然后assemble将其恢复为二进制形式
- 找到一种使用
apktool
资源的方法
到目前为止我尝试了什么
- 将二进制
AndroidManifest.xml
替换为纯文本版本,然后构建。apktool
将构建。但是,将应用程序安装到设备失败并显示“解析错误,解析包时出现问题”。 - 使用不同版本的
apktool
:v2.3.2
、v2.3.1
、v2.3.0
、v2.2.0
、v2.2.1
、v2.2.2
- 使用以下项目编译xml:https://github.com/rednaga/axmlprinter ; https://github.com/ZaratustraN/axml-parser ; https://github.com/shazam/axmlparser
免责声明
虽然 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。