注册机的写法 (2千字)
1、如果用户输入的名字少于3个字符则重新输入。2、如果用户输入的名字少于12个字符则用空格凑齐12个字符。
3、用串"123"加在ID#的后面,凑成12个字符。
4、将第2步的12个字符和第3步的12个字符逐一异或,得到12个字节。
5、对于得到的12个字节中的每个字节,进行下面的转换。转换的结果就是注册码。
转换非常简单,就是12个字节逐一和一张表中的12个字节相加,如果和不是大写字母,就通过不断加0x19或减0x19的方法使其变成大写字母。
下面的12条MOV指令初始化该表格:
001B:0023A613 MOV DWORD PTR [EBP-0238],00000009
001B:0023A61D MOV DWORD PTR [EBP-0234],0000000D
001B:0023A627 MOV DWORD PTR [EBP-0230],00000007
001B:0023A631 MOV DWORD PTR [EBP-022C],00000002
001B:0023A63B MOV DWORD PTR [EBP-0228],0000000C
001B:0023A645 MOV DWORD PTR [EBP-0224],00000006
001B:0023A64F MOV DWORD PTR [EBP-0220],00000014
001B:0023A659 MOV DWORD PTR [EBP-021C],00000005
001B:0023A663 MOV DWORD PTR [EBP-0218],00000005
001B:0023A66D MOV DWORD PTR [EBP-0214],0000000B
001B:0023A677 MOV DWORD PTR [EBP-0210],00000012
001B:0023A681 MOV DWORD PTR [EBP-020C],0000000E
001B:0023A68B MOV EDI,00000001 ;循环控制变量初值
001B:0023A690 LEA ESI,[EBP-0238]
001B:0023A696 LEA EAX,[EBP-0340]
001B:0023A69C PUSH EAX
001B:0023A69D MOV ECX,00000001
001B:0023A6A2 MOV EDX,EDI
001B:0023A6A4 LEA EAX,[EBP-0107]
001B:0023A6AA CALL 00232620
001B:0023A6AF LEA EDX,[EBP-0340]
001B:0023A6B5 LEA EAX,[EBP-0240]
001B:0023A6BB CALL 002333B4
001B:0023A6C0 MOV EDX,[EBP-0240]
001B:0023A6C6 LEA EAX,[EBP-07]
001B:0023A6C9 CALL 00235764
001B:0023A6CE MOV AL,[EBP-07] ;异或得到的一个字节
001B:0023A6D1 XOR EBX,EBX
001B:0023A6D3 MOV BL,AL
001B:0023A6D5 ADD EBX,[ESI] ;和表格中的对应字节相加
001B:0023A6D7 CMP EBX,5A ;以下判断是否在‘A’-‘Z’之间
001B:0023A6DA JLE 0023A6E4
001B:0023A6DC SUB EBX,19
001B:0023A6DF CMP EBX,5A
001B:0023A6E2 JG 0023A6DC
001B:0023A6E4 CMP EBX,41
001B:0023A6E7 JGE 0023A6F1
001B:0023A6E9 ADD EBX,19
001B:0023A6EC CMP EBX,41
001B:0023A6EF JL 0023A6E9
001B:0023A6F1 LEA EAX,[EBP-0344]
001B:0023A6F7 MOV EDX,EBX
001B:0023A6F9 MOV [EAX+01],DL ;保存注册码的一个字符
001B:0023A6FC MOV BYTE PTR [EAX],01
001B:0023A6FF LEA EDX,[EBP-0344]
001B:0023A705 LEA EAX,[EBP-0207]
001B:0023A70B CALL 002326C0
001B:0023A710 INC EDI
001B:0023A711 ADD ESI,04
001B:0023A714 CMP EDI,0D ;循环12次,得到注册码的12个字符
001B:0023A717 JNZ 0023A696
