【发布时间】:2018-09-18 17:00:29
【问题描述】:
如何验证固件(.bin 文件)是否已签名,是否有可以使用的工具或脚本,据我所知 sigcheck 不适用于固件,对此有何帮助?
【问题讨论】:
标签: binary cryptography reverse-engineering firmware
如何验证固件(.bin 文件)是否已签名,是否有可以使用的工具或脚本,据我所知 sigcheck 不适用于固件,对此有何帮助?
【问题讨论】:
标签: binary cryptography reverse-engineering firmware
bin 文件通常只是一个二进制文件。固件文件没有(单一)标准。毫无疑问,该文件内部具有结构,但对我们而言,无法分辨它是什么。一般来说,一个工具只适用于特定的协议。
RSA 签名本身是使用公共指数进行模幂运算的结果。然后将结果转换为 几乎 与随机无法区分的字节数组。大小具有模数的大小,与密钥大小相同,以字节为单位。 RSA 可以用于各种格式,例如带有 PKCS#1 v1.5 填充的 RSA 或带有 PSS 填充的 RSA;然而,输出看起来是一样的。存在其他签名类型,例如与 RSA 完全不同的 ECDSA 签名。它们具有不同(更小)的大小,并且可以动态和静态地调整大小。如果需要在资源受限的硬件上检查签名,ECDSA 就很有意义。
通常签名是在最后一步计算的,因此 .bin 文件的最后一个字节通常是签名。如果幸运的话,签名是使用标准执行的,例如PGP 兼容签名或 CMS 兼容签名。对于 CMS 签名,您可以检查文件是否包含所谓的 ASN.1 结构。这些是使用称为 BER 的东西编码的,可以解析(例如使用 openssl asn1parse -inform BER)。
所以这一切都取决于协议。没有单一的工具可以检查某些东西是否已签名,协议太不同了,签名本身看起来就像随机数据。
【讨论】: