首页
社区
课程
招聘
关于网文快捕4.0中的数字签名
发表于: 2004-5-23 16:10 2012

关于网文快捕4.0中的数字签名

2004-5-23 16:10
2012
网文快捕4.0刚出来,看了一下,注册算法似乎没怎么变,还是明码。不过在注册码后附加了数字签名。
注册码大概格式
454C4942442D30303734312D32303330362D46534657542D584B594F55002222222233333333
即注册码ELIBD-00741-20306-FSFWT-XKYKD的ASCII码后补00,其后为数字签名

先调用Microsoft CryptoAPI来通过数字签名来验证注册码合法性
签名类型为PROV_RSA_FULL
Hash类型为CALG_MD5
文件中保存的pub key长为84字节
.text:0049F623                 push    ecx             ; sDescription
.text:0049F624                 mov     eax, [ebp+hPubKey]
.text:0049F627                 push    eax             ; hPubKey
.text:0049F628                 mov     edx, [ebp+dwSigLen]
.text:0049F62B                 push    edx             ; dwSigLen
.text:0049F62C                 mov     eax, [ebp+pbSignature]
.text:0049F62F                 push    eax             ; pbSignature
.text:0049F630                 mov     edx, [ebp+hHash]
.text:0049F633                 push    edx             ; hHash
.text:0049F634                 call    CryptVerifySignatureA

没接触过数字签名,问一下若没有private key,是否有办法伪造一个数字签名出来?否则就无法做注册机,只能爆破。

这个软件爆破起来有些麻烦,验证注册码的地方太多,验证注册码函数
__fastcall WaDownloadImageFile(System::AnsiString)
返回值一般=0未注册,=1已注册
不能直接修改数字签名验证返回值,因为 程序给注册码头加了两个字符类似'0\r' 或 '\r\d',导致验证结果不同。
数字签名验证前先将头尾ASCII小于20h的字符去除,中就去掉后再进行数字签名验证,
这前面加的字符不同,就导致验证结果不同,例如
加'\r\d'时,数字签名验证返回就时正确的
但若附加符'0\r'时就不同了,必然数字签名要出错,而你若将其修改为验证正确反而不对了。基本只能每一个验证之处都得看看
加上dll里面验证有几十次,太麻烦了。

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

收藏
免费 6
支持
分享
最新回复 (4)
雪    币: 400
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
:) 崇拜!
2004-5-25 20:22
0
雪    币: 261
活跃值: (230)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
真的长见识,对我来说
2004-5-25 23:16
0
雪    币: 231
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
伪造签名不大可能。汇编不懂,你能不能把它改写成一个C的例子,来分析一下。
2004-5-26 08:53
0
雪    币: 203
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好象只能暴力破
2004-5-26 09:46
0
游客
登录 | 注册 方可回帖
返回
//