注册机编写器说明文件(1)

时间:2005-12-20 来源: 作者: 点击:
这个注册机编写器以前一直是我自己为写注册机而编写的,通过它只要略有汇编基础很快就能写出一个注册机。而不需要再过多的了解程序的指令算法。 整个程序体实际上只是我用汇编写的一个模板。所以大家也可以在其中自定义自己的界面和提示信息。可以用VC++或BC++等资源编
   这个注册机编写器以前一直是我自己为写注册机而编写的,通过它只要略有汇编基础很快就能写出一个注册机。而不需要再过多的了解程序的指令算法。 整个程序体实际上只是我用汇编写的一个模板。所以大家也可以在其中自定义自己的界面和提示信息。可以用VC++或BC++等资源编辑工具自行修改key1.res资源文件,但请不要修改它们对应的ID号。

  在目录目录 EXAMPLE 下有一个例子程序,主要用来举例说明这个程序的使用(我先假设自己并不太懂Win32汇编)。

   通过动态调试或反汇编例子程序可以得到以下注册码的计算过程:

xxxx:00401077 CALL GetCommandLineA
xxxx:0040107C CMP BYTE PTR [EAX],22
xxxx:0040107F JNZ 401082
xxxx:00401081 INC EAX
xxxx:00401082 MOV CX,WORD PTR [EAX]
xxxx:00401085 MOV WORD PTR [0040306C],CX
xxxx:0040108C MOV WORD PTR [0040306E],5C
xxxx:00401095 PUSH 0
xxxx:00401097 PUSH 0
xxxx:00401099 PUSH 0
xxxx:0040109B PUSH 0
xxxx:0040109D PUSH DWORD 00403058
xxxx:004010A2 PUSH 0
xxxx:004010A4 PUSH 0
xxxx:004010A6 PUSH DWORD 0040306C
xxxx:004010AB CALL GetVolumeInformationA
…………    …………
…………    …………
xxxx:0040111E MOV EAX,1
xxxx:00401123 CPUID
xxxx:00401125 MOV ECX,DWORD PTR [00403058]
xxxx:0040112B XOR EDX,EDX
xxxx:0040112D MUL ECX
xxxx:0040112F ADD EAX,EDX
xxxx:00401131 PUSH EAX
xxxx:00401132 PUSH DWORD 0040303E    ; 在这里下D 40303E可以看到数据窗口中显示为“%1X”
xxxx:00401137 PUSH DWORD 0040305C
xxxx:0040113C CALL wsprintfA

  对于以上的指令并不需要过多的了解它在干什么,只要将其中的每个地址改成一个变量地址的声明,然后再原封不动的抄到注册机编写器的代码窗口中即可。

  这是写好的声明:

a1 dd 0 ; 这是一个双字的内存空间,对应于上面的403058。
;(因为40109D处的指令是DWORD 403058,所以用dd,如果是WORD就用dw,如果是BYTE就用db)
a2 dd 0 ; 对应于上面的40306C
a3 db "%1X",0 ; 对应于上面的40303E指向的字符串

a4 db 20 dup (0)

; 这是20个字节的内存空间,用来存放输出的注册码,对应于上面的40305C

    这是写好的程序代码:

CALL GetCommandLineA CMP BYTE PTR [EAX],22h ; 后面加h表示是十六进制
JNZ n1
INC EAX
n1:
MOV CX,WORD PTR [EAX]
MOV WORD PTR a2,CX
MOV WORD PTR a2+2,5Ch
PUSH 0
PUSH 0
PUSH 0
PUSH 0
LEA EAX,a1 ; 令EAX指向a1
PUSH EAX
PUSH 0
PUSH 0
LEA EAX,a2
PUSH EAX ; 令EAX指向a2
CALL GetVolumeInformationA ; 当然这几条语句也可以直接写成
invoke GetVolumeInformationA,addr a2,0,0,addr a1,0,0,0,0
的形式
MOV EAX,1
CPUID
MOV ECX,a1
XOR EDX,EDX
MUL ECX
ADD EAX,EDX
PUSH EAX
LEA EAX,a3 ; 令EAX指向a3,也就是指向字符“%1X”。
PUSH EAX
LEA EAX,a4
PUSH EAX
CALL wsprintfA

LEA EAX,a4

; 令EAX指向a4。因为程序最后显示的就是EAX寄存器所指向的内存地址的数据。

  输入如:

  可以看到这与上面的反汇编代码基本相同。点击编译就可以很容易的得到一个注册机了。

  生成的注册机如下图所示(这只是我写的外观,你也可以自行修改):

  需要说明的是因为这只是我写的一个模板,所以我也在程序中使用了几个变量。
   请不要再重复声明:hCursorHandle、hInstance、hIcon、hTempEbp、hInput、hMode以免出错。
   还有就是你一定要在指令结束时令EAX指向正确的注册码地址。

------分隔线----------------------------
顶一下
(0)
0%
踩一下
(2)
100%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容