我目前正在尝试应用股票android恢复更新。我为android版本创建了zip内容和我自己的密钥,但是它带有签名验证错误。现在我发现这段代码在bootable/recovery/verifier.cpp
如何签署update.zip
#define FOOTER_SIZE 6
if (fseek(f, -FOOTER_SIZE, SEEK_END) != 0) {
LOGE("failed to seek in %s (%s)\n", path, strerror(errno));
fclose(f);
return VERIFY_FAILURE;
}
unsigned char footer[FOOTER_SIZE];
if (fread(footer, 1, FOOTER_SIZE, f) != FOOTER_SIZE) {
LOGE("failed to read footer from %s (%s)\n", path, strerror(errno));
fclose(f);
return VERIFY_FAILURE;
}
if (footer[2] != 0xff || footer[3] != 0xff) {
LOGE("failed check of footer bytes 2 & 3 match 0xff");
fclose(f);
return VERIFY_FAILURE;
}
其中预计第4和第3最后一个字节在zip是0xff
。此时验证失败。如果我用HexEditor打开zip,我可以看到两个字节都不是0xff
。 如果我从/bootable/recovery/testdata/otasigned*.zip
打开一个zip,我可以看到它们是0xff
。
我使用以下命令对zip进行了签名:jdk1.6.0_35/bin/java -jar Android/prebuilts/sdk/tools/lib/signapk.jar Android/build/target/product/security/testkey.x509.pem Android/build/target/product/security/testkey.pk8 testupdate.zip update.zip
在META-INF
文件夹中添加了一些证书数据。
我无法在zip规范中找到这些字节必须是oxff
的任何信息。
这里怎么回事?
PS:我当然可以禁用签名验证,但我想这个功能(只有工作,没有失败;))
好吧,现在我知道我忘记了SignApk.jar的-w参数。但现在它失败: I:从/ res/keys加载1个密钥 验证更新包... I:注释是1691字节;签名从最终 è1673个字节:无法验证整个文件签名 但是我用的是从密押/建筑/目标/产品/至极与危机干预也使用由otapackage构建规则和拉链那里建造得到正确验证.. 。对此有何解释? – chuck258
'-w'参数是什么意思? –