Makecat失败:找不到成员

时间:2018-09-11 23:22:53

标签: windows sha256

我试图通过在[CatalogHeader]部分下添加以下两行来修改现有的输入cdf文件以使用SHA256而不是SHA1:

CatalogVersion=2
HashAlgorithms=SHA256

即使[CatalogFiles]下的内容没有变化,执行makecat.exe现在也会显示以下失败消息:

Failed: CryptCATCDFEnumMembersByCDFTagEx. Last Error: 0x00000057
Failed: No members found. Last Error: 0x00000057

Failed 0x00000057 (87)

如果我删除添加的两行,Makecat会查找并散列所有文件。

有人可以告诉我这里可能出什么问题吗?

以下是MCVE的示例cdf文件:

[CatalogHeader]
Name=MCVE.cat
CatalogVersion=2
HashAlgorithms=SHA256

[CatalogFiles]
MCVE.xml=MCVE.xml

MCVE.xml是您可以找到的任何旧的xml文件。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但是能够通过在每个文件条目的前面放置''(不带空格)来使其工作。示例:

[CatalogFiles]
<HASH>manifest.json=.\manifest.json
<HASH>bsi.json=.\bsi.json

但是,这导致在Windows资源管理器中查看.cat文件时,目录文件的条目由其哈希而不是文件名来标记。您可以通过添加自定义属性在目录条目的详细信息中显示文件名来解决此问题,如下所示:

[CatalogFiles]
<HASH>manifest.json=.\manifest.json
<HASH>manifest.jsonATTR1=0x11010001:File:manifest.json
<HASH>bsi.json=.\bsi.json
<HASH>bsi.jsonATTR1=0x11010001:File:bsi.json

属性类型由({https://docs.microsoft.com/en-us/windows/desktop/seccrypto/makecat):

组成
  • 0x10000000:属性包含在目录的哈希中
  • 0x01000000:不要使用SHA1哈希创建重复的属性(使用SHA256和目录版本2时)
  • 0x00010000:属性为纯文本格式,不是base64
  • 0x00000001:属性是一个键值对(例如File = bsi.json)

我在这里遇到以下示例时遇到了与您相同的问题,之后发现了此解决方法:https://www-user.tu-chemnitz.de/~heha/viewzip.cgi/basteln/PC/USB2LPT/usb2lpt.zip/src/Makefile?auto=MAK

希望这会有所帮助。

答案 1 :(得分:1)

还不能添加评论---

只是想说 Jonathan 的带有 0x11010001 属性的示例效果很好,但是 PowerShell 的 Test-FileCatalog 仍然会说它无法解析文件。使用 FilePath 而不是 File 解决了这个问题。不确定这是在规范中还是只是一个 powershell 怪癖或什么,但这是 PowerShell 对 New-FileCatalog 所做的。

不包含 SHA1 哈希的奖励积分,谢谢!