首页
社区
课程
招聘
[已解决] [求助]已知签名和密钥,如何从验签程序逆向签名原文的组成? 50.00雪花
发表于: 2024-4-28 14:01 2252

[已解决] [求助]已知签名和密钥,如何从验签程序逆向签名原文的组成? 50.00雪花

2024-4-28 14:01
2252

程序为arm64设备的裸程序(ELF),本来想尝试QIling框架模拟运行官方案例github,奈何技术有限。欢迎大佬指导

已知

RSA公钥(PEM)和某次通讯中请求的数字签名内容(主要内容)和签名数据(base64),该程序执行验签并成功。

签名内容原文及其组成形式,并能成功验签openssl dgst -sha256 -verify pub.pem -signature sig.bin sig.txt

请给出正确的sig.txt

附上部分IDA核心伪代码及程序:


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2024-4-28 14:02 被wx_刀刀编辑 ,原因:
上传的附件:
收藏
免费 4
支持
分享
最新回复 (3)
雪    币: 2030
活跃值: (1593)
能力值: ( LV7,RANK:144 )
在线值:
发帖
回帖
粉丝
2

0x10001=65537是RSA常见的公钥指数e,所以跟它再一块的另外256字节多半就是公钥模数n

计算 sig^e mod n即可得到明文,一般签名的明文是哈希值,所以验签实际就是比较解密得到的哈希值和实际数据计算的哈希值是否一样

根据固件中,sha256明文填充如下,其中data[8]= 'N'是试出来的,因为'Y'不对

如下图可以看到验签成功

你原附件里面的pub.pem貌似格式有问题,我用固件中的n和e重新生成了一个

最终你要的openssl验签效果

上传的附件:
2024-4-28 20:07
0
雪    币: 11
活跃值: (126)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
烧板侠 0x10001=65537是RSA常见的公钥指数e,所以跟它再一块的另外256字节多半就是公钥模数n计算 sig^e mod n即可得到明文,一般签名的明文是哈希值,所以验签实际就是比较解密得到的哈希 ...
大佬厉害,貌似我的公钥没有64字节一换行,为啥固定是N呢,这个应该是去安全启动的flag,另外Rand在这个程序里固定为0,全是bug。能找着原因吗
2024-4-28 23:34
0
雪    币: 2030
活跃值: (1593)
能力值: ( LV7,RANK:144 )
在线值:
发帖
回帖
粉丝
4
wx_刀刀 大佬厉害,貌似我的公钥没有64字节一换行,为啥固定是N呢,这个应该是去安全启动的flag,另外Rand在这个程序里固定为0,全是bug。能找着原因吗
'N'不是固定的,实际上从固件里面看它是先用'Y'验签一次,'Y'不验签过才再用'N'验签一次,至于Rand全是0的原因你可以看sub_1499F3EC()函数调用sub_149C06CC函数的位置,那个sub_149C06CC函数应该就是它的随机数函数而且是个空函数,所以就随机数才都是默认值
2024-4-29 09:23
0
游客
登录 | 注册 方可回帖
返回
//