这是我写的6.3的注册机,就你提供的用户名和密码看来算法没有变化,这个是用汇编写的,可能好理解一点 (3千字)
自己编译一下罢,如果要编译后的版本,可qq发给你(在线时),BCG内部也有这个算法很简单,只不过演示了如何用汇编来写注册机,大部分是模板,cal是算法部分,写其它注册机时可少加改动即可重用大部分代码,界面设计是简单的对话框,虽然简单,优点是速度快(体现不出来),体积小3.0k(未压缩
),当然我不提倡用汇编写注册机,这只不过是我的业余爱好而已.
;===================make.bat compiled with MASM32
cls
c:\masm32\bin\ml /c /coff /Cp cr_yj.asm
rc /v cr_yj.rc
c:\masm32\bin\link /SUBSYSTEM:WINDOWS /LIBPATH:c:\masm32\lib cr_yj.obj cr_yj.res
;===================cr_yj.rc
#include <c:\masm32\include\resource.h>
#define DLG_MAIN 1000
#define IDC_UN 1001
#define IDC_REG 1002
#define ID_GEN 1003
#define ID_EXIT 1004
DLG_MAIN DIALOG 54, 53, 244, 52
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "易经八卦彩票占卜程序.V6.3/7.0 Keygen by Hume/BCG"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "GENERATE", ID_GEN, 181, 6, 50, 14
PUSHBUTTON "EXIT", ID_EXIT, 181, 24, 50, 14
CONTROL "Hume", IDC_UN, "EDIT", WS_BORDER | WS_TABSTOP, 62, 10, 98, 12
EDITTEXT IDC_REG, 62, 29, 109, 13, ES_READONLY | WS_BORDER | WS_TABSTOP
LTEXT "USERNAME:", -1, 18, 12, 40, 10
LTEXT "REG CODE:", -1, 18, 30, 41, 9
}
;===================cr_yj.asm
.386
.model flat,stdcall
option casemap:none
include hd.h
_ProcDlg proto :DWORD,:DWORD,:DWORD,:DWORD
;->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>data seg
.data
User db 80 dup(0)
Serial db 80 dup(0)
Count dd 0
adsn dd 0
MsgMesaage1 db "Must input Username in order to generate Reg Code! ",0
MsgCap db "By (C)hume,July,2001",0
.data?
hInstance HANDLE ?
.const
DLG_MAIN equ 1000
IDC_UN equ 1001
IDC_REG equ 1002
ID_GEN equ 1003
ID_EXIT equ 1004
;-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>code seg
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlg,0
invoke ExitProcess,NULL
_ProcDlg proc uses ebx edi esi, \
hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE or SWP_DRAWFRAME
.elseif eax == WM_COMMAND
mov eax,wParam
.IF lParam!=0
.if ax==ID_GEN
invoke RtlZeroMemory,addr User,80
invoke RtlZeroMemory,addr Serial,80
invoke GetDlgItemText,hWnd,IDC_UN,addr User,80
.if eax!=NULL
mov Count,eax
call Cal
invoke SetDlgItemText,hWnd,IDC_REG,addr Serial
.else
invoke MessageBox,NULL,addr MsgMesaage1,addr MsgCap,MB_OK or MB_ICONEXCLAMATION
.endif
.elseif ax==ID_EXIT
invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL
.endif
.ENDIF
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlg ENDP
Cal PROC uses eax ebx
xor edx,edx
mov ecx,0
lea ebx,Serial
mov adsn,ebx
lopcal: LEA EDI,[ECX+01]
lea eax,User
add eax,ecx
MOV BL,[EAX]
MOVSX ESI,BL
MOV EAX,ESI
MOV EBX,4Bh
IMUL ESI
IMUL ESI
LEA EDX,[ECX+01]
IMUL EDX,EDI
SUB EAX,EDX
LEA EDX,[ECX+01]
IMUL EDX,ESI
SUB EAX,EDX
INC ECX
CDQ
XOR EAX,EDX
SUB EAX,EDX
CDQ
IDIV EBX
MOV EAX,EDX
ADD AL,30h
mov ebx,adsn
add ebx,ecx
dec ebx
MOV [ebx],AL
inc ebx
inc eax
CMP ECX,Count
JL lopcal ;//比较循环是否结束循环,计算
ToEit: ret
Cal endp
;-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>end all
end start
