2013-11-21 115 views
1

我目前正在尝试应用股票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.zipMETA-INF文件夹中添加了一些证书数据。

我无法在zip规范中找到这些字节必须是oxff的任何信息。

这里怎么回事?

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

+0

好吧,现在我知道我忘记了SignApk.jar的-w参数。但现在它失败: I:从/ res/keys加载1个密钥 验证更新包... I:注释是1691字节;签名从最终 è1673个字节:无法验证整个文件签名 但是我用的是从密押/建筑/目标/产品/至极与危机干预也使用由otapackage构建规则和拉链那里建造得到正确验证.. 。对此有何解释? – chuck258

+0

'-w'参数是什么意思? –

回答

-1

你不需要修改代码,只需使用切换签名验证从恢复菜单中禁用签名检查功能,您update.zip将工作

+0

正如我所说我不想禁用签名验证,此外没有菜单项来禁用它,它是来自谷歌的股票恢复 – chuck258

0

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

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