如果利用KEYMAKE就更简单了.
在数据中定义一些变量:
szHomePage db "http://bbs.pediy.com",0
szEmail db "mailto:langxang@126.com",0
szErrMess db "输入的序列号不正确!",0
szErrName db "输入的必须为英文字母!",0
szFormat db "%d",0 ;将除数的注册码转为十进制字符格式
szBuff db 50 dup(0) ;定义50个字节的内存空间,用于保存注册码。
在代码窗口中写入:
lea eax,hInput1
XOR ESI,ESI
MOV ESI,EAX
PUSH ESI
XOR EAX,EAX
n2:
MOV AL,BYTE PTR [ESI]
TEST AL,AL
JE n4
CMP AL,41h
JB n9
CMP AL,5Ah
JNB n1
INC ESI
JMP n2
n1:
SUB AL,20h
MOV BYTE PTR [ESI],AL
INC ESI
JMP n2
n4:
POP ESI
XOR EDI,EDI
XOR ECX,ECX
n8:
MOV CL,BYTE PTR [ESI]
TEST CL,CL
JE n6
ADD EDI,ECX
INC ESI
JMP n8
n6:
XOR EDI,5678h
XOR EDI,1234h
MOV EAX,EDI
JMP n5
n9:
lea eax,szErrName ; 提示输入的必须为字母
n5:
invoke wsprintf,addr szBuff,addr szFormat,edi ; 将注册码转10进制
LEA EAX,szBuff ; EAX指向注册码的框
最初由 laomms 发布 如果利用KEYMAKE就更简单了. 在数据中定义一些变量: szHomePage db "http://bbs.pediy.com",0 szEmail db "mailto:langxang@126.com",0 szErrMess db "输入的序列号不正确!",0 ........
其实用c和c++语言写注册机还是蛮爽的。
如楼上所说,不但必要的时候可以嵌入汇编码;而且这2种语言可以很有效的模拟汇编算法:
汇编代码中的寄存器是32位的,那我们可以定义一个unsigned long类型的整型变量var,就可以代表该寄存器;另外很多运算符号也可以很方便的使用,例如:
AND eax, 5 就可以写成 (var | 5) //unsigned long var = ax;
MOVSX eax,al 就可以写成 var = var1; //unsigned long var = ax; int var1 = int(al);