从 ecc 签名字节创建 pem

逆向工程 加密 qnx
2021-07-04 01:01:38

我正在研究基于 QNX ARM 的汽车导航,似乎该系统有一个后门,如果质询/响应成功,则无需密码即可通过 telnet 访问系统。

当一个被调用的文件challenge被放置在 U 盘上并插入系统时,它会在其中写入一些字节。这里有几个例子: eaxj2ABs4BeMQqQJamOH?smOCVEC KKUcw5m:vvJXmCIK3SBDDqv9p:Or odlwY@ed6B?8OKCmaqIDdFz7YSnv BBqGoWKocmAuvSDacMAkZ:83:QVq

我在固件中找到了处理质询/响应的 ELF 文件(可以根据请求共享),它读取一个公钥文件: hChallengePub = sub_1030A0((int)"/ifs/challenge.pub", &v11, &v13)

Challenge.pub 包含以下字节:

30 29 03 02 07 00 02 01 0E 02 0F 00 9C 9C A4 5A
FA 1E 2D 32 2A 93 9D 37 41 93 02 0F 00 95 AB 6B
DB 94 29 4D C3 C6 07 3B B7 31 40

ELF 中的调试文本指向源文件src/pk/ecc/ecc_import.c,这让我相信它是 ECC 公钥,但它似乎不完整(例如没有 ASN.1 标头)。

我希望能够将此密钥转换为 pem 格式,以便我可以使用 openssl 运行一些测试,因此我正在寻找如何执行此操作的指针。

最终,我想看看我是否可以创建适当的响应并获得访问权限,但如果它需要私钥(如果有好处的话应该这样做),这可能是不可能的。

1个回答

src/pk/ecc/ecc_import.c强烈建议它使用 LibTomCrypt:https : //github.com/libtom/libtomcrypt/blob/develop/src/pk/ecc/ecc_import.c

的内容challenge.pub似乎是 DER 编码的。它可以解码如下

SEQUENCE(4 elem)
    BIT STRING (1 bit) 0
    INTEGER            14
    INTEGER (112 bit)  3176466357047968568460177262985619
    INTEGER (112 bit)  3035660427084515633934604600553792

ecc_import.c上面引用代码中可以看出,这转化为:

  • key->type = PK_PUBLIC
  • key_size=14字节
  • key->pubkey.x = 3176466357047968568460177262985619
  • key->pubkey.y = 3035660427084515633934604600553792