如何签署update.zip

时间:2013-11-21 15:42:55

标签: java android certificate recovery ota

我目前正在尝试对库存android恢复应用更新。我为android构建创建了zip内容和我自己的密钥,但是它因签名验证错误而失效。我现在在bootable/recovery/verifier.cpp

中找到了这段代码
#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;
}

预计zip中的第4个和第3个字节为0xff。验证在此时失效。如果我用HexEditor打开zip,我可以看到两个字节都不是0xff。 如果我从/bootable/recovery/testdata/otasigned*.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.zipMETA-INF文件夹中添加了一些证书数据。

我无法在zip规范中找到任何有关theese字节必须为oxff的信息。

这里出了什么问题?

PS:当然我可以禁用签名验证,但我想要这个功能(只有工作,而不是失败;)

2 个答案:

答案 0 :(得分:0)

使用-w选项使signapk签署整个文件

signapk -w $ KEY_FILE.x509.pem $ KEY_FILE.pk8 $ UPDATE_ZIP $ UPDATE_ZIP.signed

答案 1 :(得分:-1)

您无需修改​​代码,只需使用恢复菜单中的切换签名验证功能即可禁用签名检查,您的update.zip将正常工作