Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java APK注入,重新编译android清单 我想达到的目标_Java_Android_Apk_Code Injection_Apktool - Fatal编程技术网

Java APK注入,重新编译android清单 我想达到的目标

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使用资源解除配置,则无法重新构建 问题 由于我在

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

短背景 我在做一个APK注射项目。 我的目标是

  • 拆解dalvik二进制文件
  • 读取AndroidManifest xml并向其添加修改,如更改主活动和添加权限
  • 重建并签署apk文件
  • 我使用apktool来组装和拆卸apk。但是,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:
    免责声明 虽然stackoverflow是一个知识共享的社区,不判断它的用途——但我看到很多人在类似的问题上指责他人进行非法活动


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

    安装程序可以在以下条件下给出解析错误,看看是否有人遇到你-

    • 签名后更改了包的名称:请使用正确的名称 已签名的包是(改为调整清单中的名称)
    • 包裹。 在更高的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