本帖最后由 growuphappily 于 2020-2-17 14:42 编辑
应@zzyyyy要求,写了这篇文章
回到注册码计算的地方:
[Asm] 纯文本查看 复制代码 00402412 . 50 push eax ; /String = 00000001 ???
00402413 . 8B1A mov ebx,dword ptr ds:[edx] ; |
00402415 . FF15 E4404000 call dword ptr ds:[<&MSVBVM50.__vbaLenBstr>] ; \__vbaLenBstr ;计算name的长度
0040241B . 8BF8 mov edi,eax ; eax为name长度
0040241D 8B4D E8 mov ecx,dword ptr ss:[ebp-0x18] ; ecx为name
00402420 . 69FF FB7C0100 imul edi,edi,0x17CFB ; 将字符串长度与17CFB相乘,结果放在edi
00402426 . 51 push ecx ; /String = NULL
00402427 . 0F80 91020000 jo Afkayas_.004026BE ;
0040242D . FF15 F8404000 call dword ptr ds:[<&MSVBVM50.#rtcAnsiValueBstr>; \rtcAnsiValueBstr 取第一个字符的ASCII码
00402433 . 0FBFD0 movsx edx,ax
00402436 . 03FA add edi,edx ; 把ediedx相加
00402438 . 0F80 80020000 jo Afkayas_.004026BE
0040243E . 57 push edi ; 把edi转换成十进制
0040243F . FF15 E0404000 call dword ptr ds:[<&MSVBVM50.__vbaStrI4>] ; MSVBVM50.__vbaStrI4
00402445 . 8BD0 mov edx,eax ; 把eax放到edx
..................................
0040251D . 68 701B4000 push Afkayas_.00401B70 ; UNICODE "AKA-"
00402522 . 51 push ecx ; /String = NULL
00402523 . FFD7 call edi ; \__vbaStrCat
其中00402415,0040243f,00402523,0040242D,00402436和00402420比较重要
00402415计算了name的长度
00402420把name的长度与0x17CFB相乘,结果放在edi
0040243F把edi转换成十进制
0046242D取name的第一位的ASCII码放到edx中
00402436把edi加上edx
00402523把edi转换成十进制的结果前面加上"AKA-"
于是,我们就可以写注册机了
[Python] 纯文本查看 复制代码
name = input()
edi = len(name) * int(0x17CFB)
edx = ord(name[0])
key = "AKA-" + str(edi+edx)
print(key)
所以,“Type In Your Name”的注册码就是“AKA-1658111”
最后:
|