Java APK注入,重新编译android清单 我想达到的目标
将apk中打包的AndroidManifest.xml从二进制格式反编译到普通xml文件中,编辑它并重新编译回apk可接受的二进制文件。基本上我需要一个AXML文件的驱动程序 短背景 我在做一个APK注射项目。 我的目标是Java APK注入,重新编译android清单 我想达到的目标,java,android,apk,code-injection,apktool,Java,Android,Apk,Code Injection,Apktool,将apk中打包的AndroidManifest.xml从二进制格式反编译到普通xml文件中,编辑它并重新编译回apk可接受的二进制文件。基本上我需要一个AXML文件的驱动程序 短背景 我在做一个APK注射项目。 我的目标是 拆解dalvik二进制文件 读取AndroidManifest xml并向其添加修改,如更改主活动和添加权限 重建并签署apk文件 我使用apktool来组装和拆卸apk。但是,apk工具仅适用于--no res选项,如果apk使用资源解除配置,则无法重新构建 问题 由于我在
--no res
选项,如果apk使用资源解除配置,则无法重新构建
问题
由于我在没有res标志的情况下禁用了apktool d--no res app debug.apk,生成的android清单以二进制形式出现。我可以使用apktool
反汇编清单,但无法将其重新汇编
我想做什么
我需要:
- 找到一种方法来分解清单,然后将其重新组装成二进制形式
- 找到将apktool与资源一起使用的方法
- 将二进制文件AndroidManifest.xml替换为纯文本版本,然后生成。将生成
。但是,将应用程序安装到设备失败,并出现“解析错误解析包时出现问题”apktool
- 使用不同版本的
:apktool
,v2.3.2
,v2.3.1
,v2.3.0
,v2.2.0
,v2.2.1
v2.2.2
- 使用以下项目编译axml:李>
我所做的是绝对合法的,不会被用来攻击任何人。安装程序可以在以下条件下给出解析错误,看看是否有人遇到你-
- 签名后更改了包的名称:请使用正确的名称 已签名的包是(改为调整清单中的名称)
- 包裹。 在更高的API级别上编译:请更正中的API级别 清单文件
- 从SD卡执行包:运行(安装)apk -从手机内存中下载文件或使用adb命令安装
您可以按照给定的方式手动对apk进行签名。我发现使用纯文本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>
jarsigner-storepass-keystore MyProject.apk.unaligned
我也遇到过类似的问题,但我很幸运
我打开了应用程序,然后导航到选项->apktool
并选中不解码类。dex
。然后我成功地重新编译了这个应用程序
另一种选择是使用aapt,如前所述,但它需要更多的知识/努力。
但应用程序不运行
然后会发生什么?它会在LogCat中生成任何有意义的日志吗?@MattClark事实上它甚至没有安装,设备只是显示解析错误。我无法精确定位logcat日志。我假设您使用的是adb install/path/to/new.apk
和Parse error解析软件包时出现问题
是否有响应?好的,那么你可能看不到LogCat日志是有道理的,因为它将在Android操作系统中,并且可能会被抑制。另外,当您说您“退出apk文件”时,您是否使用第一次安装它时使用的密钥库来退出它?否则您将有签名冲突。最后,您在没有资源的情况下进行了反编译,在重新编译APK时是否也需要这些资源?是的,签名没有问题。如果我用二进制清单重建同一个项目,一切正常@MattClarkk只是想澄清一下,你想在不更改签名的情况下执行此操作,还是可以更改签名?我100%确定这不是签名问题。有一个叫做axml的东西,它是android资源的二进制xml标准。Apk必须包含这些资源,因此我不希望安装时出现问题,因为我没有将android xml重新编译到axml类型中。这就是这个问题的重点我确信,因为我在没有反编译资源的情况下重新打包了apk,然后将其重新打包回apk并手动签名,因此不推荐使用它,因为它只创建v1签名。更好地使用Android SDK构建工具中的apksigner
。