gpt4 book ai didi

java - 在java中以编程方式编辑apk文件

转载 作者:行者123 更新时间:2023-11-29 09:11:02 28 4
gpt4 key购买 nike

这个问题有点复杂,所以请耐心等待:我有一个 apk 文件,我试图在安装后以编程方式修改它。我正在用另一个应用程序编辑它。我首先尝试使用用于 zip 文件管理的内置 java 类来执行此操作,但是当我尝试完全复制除我要修改的文件之外的所有文件并更改我要修改的文件时,应用程序将不再运行。我假设这是因为签名或其他原因,但是当我用 winRAR 做同样的事情时(解压缩所有文件,创建一个新的 zip 存档,将所有文件复制到新的 zip 存档中并进行正常压缩)并将新的 apk ssh 到我的/data/应用程序文件夹,它工作正常。我的问题是为什么会这样。我认为这可能与 zip 标题或类似的东西有关,有人有任何想法吗?

PS:这是我用来重写 zip 文件的 java 进程的示例:

p = Runtime.getRuntime().exec("su");
ZipInputStream in = new ZipInputStream(new FileInputStream("This is the apk containing the asset I want to use to replace the other asset"));
ZipEntry e;
while((e = in.getNextEntry()) != null)
{
if(e.getName().equals("asset i want to use to replace the other asset"))
break;
}
ZipOutputStream out = new ZipOutputStream(new FileOutputStream("the output zip file"));
ZipInputStream original = new ZipInputStream(new FileInputStream("the apk i am trying to modify"));
ZipEntry f;
byte[] buf = new byte[1024];
while((f = original.getNextEntry()) != null)
{
if(!f.getName().equals("the asset i want to replace"))
{
out.putNextEntry(new ZipEntry(f.getName()));
int len;
while ((len = original.read(buf)) > 0) {
out.write(buf, 0, len);
}
original.closeEntry();
out.closeEntry();
}
else
{
out.putNextEntry(new ZipEntry(e.getName()));
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.closeEntry();
}
}
in.close();
out.close();
original.close();

我已经在 android 系统和 windows 上使用常规软件运行了这个过程,我可以在 winRAR 中打开输出,除了我更改的 Assets 文件外,它看起来是一样的。

最佳答案

您应该知道的唯一一件事是签名 apk 工具的工作原理(解决校验和 - 它们是 zip 条目。目标文件夹是带有 CERT.RSA 的 META-INF - 存在编码校验和和调试信息,CERT。 SF 和 MANIFEST.MF - 使用 SHA1-Digest - Base64 编码的哈希值(它们很容易被你自己检测到))。但这是一次真正的黑客攻击!该代码可能很有用(许多“聪明的程序员”使用它来动态更改应用程序的图片。)并且可能很危险 - 因为你的 apk 文件可以增加到 GB 大小 - 如果你这样写。

这个技巧不应该在世界范围内的社区人员之间传播,我认为 - 它会保留在程序员的小圈子中。

关于java - 在java中以编程方式编辑apk文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12468319/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com