3Dmark2003注册号的算法研究
软件:3Dmark 2003
版本:3.1.3.0
下载网站:www.mydrivers.com
使用软件: OllyDbg+Ida430
昨天才出来的软件,官方下载地址没提供注册号(官方当然不会提供)。
用IDA反汇编,搜索"Incorrect registration code."在41D8CA找到对这个字符串的调用,向上可以在0041D81E找到关键判断
.text:0041D81E call sub_405190 //关键判断
.text:0041D823 add esp, 4
.text:0041D826 test al, al
.text:0041D828 lea ecx, [ebp+var_6C]
.text:0041D82B jz loc_41D8CA
跟进去之后,代码如下
.text:00405190 push 0FFFFFFFFh
.text:00405192 push offset loc_596D31
.text:00405197 mov eax, large fs:0
.text:0040519D push eax
.text:0040519E mov large fs:0, esp
.text:004051A5 sub esp, 40h
.text:004051A8 mov eax, dword_611F00
.text:004051AD xor eax, [esp+4Ch]
.text:004051B1 push ebx
.text:004051B2 push ebp
.text:004051B3 push esi
.text:004051B4 push edi
.text:004051B5 mov edi, [esp+5Ch+arg_0]
.text:004051B9 mov ecx, edi
.text:004051BB mov [esp+5Ch+var_10], eax
.text:004051BF call ?size@?
$basic_string@DU?$char_traits@D@std@@V?
$allocator@D@2@@std@@QBEIXZ //MFC字符串类的方法
//得到字符串长度
.text:004051C5 cmp eax, 17h
//看输入的是否是23
//个字符
.text:004051C8 jnz loc_40540C
.text:004051CE push 5
.text:004051D0 mov ecx, edi
.text:004051D2 call ??A?$basic_string@DU?
$char_traits@D@std@@V?$allocator@D
@2@@std@@QBEABDI@Z //取字符串的第6
//个字符
.text:004051D8 cmp byte ptr [eax], 2Dh
//和"-"比较
以下还有两处,判断第12位和第18位是不是"-"
.text:00405207 push offset
a5azuhNzcd6La83 ; "5AZUH-NZCD6-LA83C-RW5KS"
//黑名单
.text:0040520C push edi
.text:0040520D call ds:??8std@@YA_NABV?
$basic_string@DU?$char_traits@D@std@@V?
$allocator@D@2@@0@PBD@Z //字符串比较
.text:00405213 add esp, 8
.text:00405216 test al, al
.text:00405218 jnz loc_40540C //相等就跳
现在开始时注册号的计算过程
一共分为3段
(1)把输入的字符串在字符表B2CD6FHJ1LN4RSTE3VWX8YZA0Q7MUK9P5
中的位置写道内存中
对应ZA5UH-NZCD6-LA83C-RW5KS
在内存中的数字就是
16 17 20 1C 06 -
0A 16 02 03 04 -
09 17 14 10 02 -
0C 12 20 1D 0D
每个数字占32位,“-“用ffffffff代表
代码如下
.text:0040521E lea ecx, [esp+30h]
.text:00405222 call ds:??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ ; std::basic_string
当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。