📄 cdr38key.asm
字号:
; history:
; 1.0 initial release
; tested with: CDRWin V3.8A Beta of 12/27/99
; 1.1 change of Expiration_Word, 0x4a2 blacklisted since 01/19/00,
; Hi to Egis/Core.
; also tested with: CDRWIN V3.8A Final of 03/20/00
; 1.2 change of Expiration_Word, 0x4a4 blacklisted since 28/06/00,
; this is getting boring, why don't you finally use the rest of
; your key, Jeff? - i'm getting impatient :=>
; 2.0 option to change expiration range;
; option to generate cdrwin.dat
; option to get keycode from cdrwin.dat
; option to fix badly cracked cdrwin.dat
;
; tested with:
; - various betas of V3.8A
; - final of V3.8A
; - V3.8B June 2000
; - V3.8B July 2000
; CDRWin/DAO V3.8 Open-Source Keymaker V2.0
; (C) The Riddler / X-FORCE / UNION
; #########################################################################
.386
.model flat, stdcall
option casemap:none
; #########################################################################
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\comdlg32.inc
includelib \masm32\lib\comdlg32.lib
; #########################################################################
;== local macros ==
m2m MACRO M1, M2
push M2
pop M1
ENDM
return MACRO arg
mov eax, arg
ret
ENDM
;== local prototypes ==
DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
cdrwin_keyengine PROTO :DWORD
save_dat_routine PROTO :DWORD
dat_routine PROTO :DWORD
; #########################################################################
.const
IDC_STATIC equ -1
IDD_DIALOG equ 100
IDC_NAME equ 3001
IDC_EMAIL equ 3002
IDC_UNLOCKKEY equ 3003
IDC_CHECKKEY equ 3004
IDC_CDRWIN equ 3006
IDC_DAO equ 3007
IDC_MONTHSTART equ 3010
IDC_YEARSTART equ 3011
IDC_MONTHEND equ 3012
IDC_YEAREND equ 3013
IDC_RANDOMIZE equ 3014
IDC_GETDAT equ 3100
IDC_SAVE equ 3101
IDC_EDITFAQ equ 3200
IDM_EXIT equ 5000
MAXSIZE equ 040h-1
.data
wsprintfa dd 0
userlib db "user32.dll",0
ALIGN 4
userfunction db "wsprintfA",0
ALIGN 4
lpError1 db "Please enter at least SIX characters!",0
ALIGN 4
lpError2 db "ARGG! You're blacklisted!",0
ALIGN 4
lpError3 db "Cannot read file!",0
ALIGN 4
lpError4 db "Cdrwin.dat file is corrupted!",0
ALIGN 4
lpError5 db "Date out of range you dummy!",0
ALIGN 4
lpError6 db "COASTER warning! Bad Crack detected. Want to correct it?",0
ALIGN 4
lpError7 db "You must enter valid Name/Company and Expiration before you save!",0
ALIGN 4
lpCaption db "CDRWin/DAO V3.8 Open-Source Keymaker V2.0",0
ALIGN 4
lpCode db "%08lX-%08lX-%08lX-%08lX",0
ALIGN 4
lpSaved db "Cdrwin.dat saved!",0
ALIGN 4
szName db MAXSIZE+1 dup (0)
ALIGN 4
szEmail db MAXSIZE+1 dup (0)
ALIGN 4
Expiration_Word dw 04b2h ; 1.0: can be between 04a2h - 04bah
; 1.1: can be between 04a4h - 04bch
; 1.2: can be between 04a7h - 04beh
; 2.0: user defined
ALIGN 4
Default_Year dd 1999
Default_Month dd 12
Base_Counter equ 2
Base_Year equ 1900
Base_Month equ 1 ; 1=Jan, ..., 12=Dec
Length_of_Validity equ 12 ; until now keys were 12 months valid.
; in V3.8B July'00 Goldenhawk extends it to 15 months?!
ALIGN 4
szFileFilter db "All Files (*.*)",0,"*.*",0
db "Cdrwin Registration File (cdrwin.dat)",0,"cdrwin.dat",0,0
ALIGN 4
szFileOpenTitle db "Select Cdrwin.dat to retrieve registration information...",0
ALIGN 4
szFileSaveTitle db "Select Cdrwin path to save Cdrwin.dat...",0
ALIGN 4
Got_Fixed db 0 ; Flag if Cdrwin.dat needed Fix and hence new Save
ALIGN 4
Valid_Data db 0 ; Flag if Input is valid and Save Cdrwin.dat is allowed
; == following data directly ripped from CDRWin code
ALIGN 4
Empty_Dat label byte ; The original cdrwin.dat taken from Cdrwin V3.8B :)
db 002h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 079h, 0A7h, 0F8h, 04Dh, 043h, 044h, 052h, 04Fh
db 04Dh, 020h, 052h, 065h, 063h, 06Fh, 072h, 064h, 069h, 06Eh, 067h, 020h, 053h, 06Fh, 066h, 074h
db 077h, 061h, 072h, 065h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 047h, 06Fh, 06Ch, 064h
db 065h, 06Eh, 020h, 048h, 061h, 077h, 06Bh, 020h, 054h, 065h, 063h, 068h, 06Eh, 06Fh, 06Ch, 06Fh
db 067h, 079h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 031h, 032h, 035h, 020h
db 049h, 06Eh, 064h, 069h, 061h, 06Eh, 020h, 052h, 06Fh, 063h, 06Bh, 020h, 052h, 06Fh, 061h, 064h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 04Dh, 065h, 072h, 072h
db 069h, 06Dh, 061h, 063h, 06Bh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 04Eh, 048h, 000h, 000h
db 030h, 033h, 030h, 035h, 034h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 036h, 030h, 033h, 02Dh
db 034h, 032h, 039h, 02Dh, 031h, 030h, 032h, 037h, 000h, 000h, 000h, 000h, 036h, 030h, 033h, 02Dh
db 034h, 032h, 039h, 02Dh, 030h, 030h, 037h, 033h, 000h, 000h, 000h, 000h, 044h, 065h, 06Dh, 06Fh
db 06Eh, 073h, 074h, 072h, 061h, 074h, 069h, 06Fh, 06Eh, 020h, 056h, 065h, 072h, 073h, 069h, 06Fh
db 06Eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 047h, 06Fh, 06Ch, 064h
db 065h, 06Eh, 020h, 048h, 061h, 077h, 06Bh, 020h, 054h, 065h, 063h, 068h, 06Eh, 06Fh, 06Ch, 06Fh
db 067h, 079h, 000h, 065h, 02Eh, 064h, 065h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 084h, 0EDh, 077h, 057h
db 0DAh, 053h, 080h, 027h, 0D9h, 09Dh, 0A6h, 0C4h, 032h, 0D0h, 0EAh, 09Dh, 055h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 018h, 000h, 006h, 000h, 0D0h, 007h, 006h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
ALIGN 4
Checksum_Table_1 db 4 dup(0), 7Eh, 88h, 3Eh, 1Ch, 0FCh, 10h, 7Dh, 38h, 82h
db 98h, 43h, 24h, 0F8h, 21h, 0FAh, 70h, 86h, 0A9h, 0C4h
db 6Ch, 4, 31h, 87h, 48h, 7Ah, 2 dup(0B9h), 54h, 0F0h
db 43h, 0F4h, 0E1h, 8Eh, 0CBh, 0CAh, 0FDh, 0Ch, 53h, 89h
db 0D9h, 72h, 0DBh, 0B7h, 0C5h, 8, 62h, 0Eh, 91h, 76h
db 0EAh, 30h, 8Dh, 0F4h, 72h, 73h, 0A9h, 8Ah, 0FAh, 4Dh
db 0B5h, 4 dup(0), 1, 56h, 0CEh, 18h, 2, 0ACh, 9Ch, 31h
db 3, 0FAh, 52h, 29h, 4, 58h, 39h, 63h, 5, 0Eh, 0F7h, 7Bh
db 6, 0F4h, 0A5h, 52h, 7, 0A2h, 6Bh, 4Ah, 8, 0B0h, 72h
db 0C6h, 9, 0E6h, 0BCh, 0DEh, 0Ah, 1Ch, 0EEh, 0F7h, 0Bh
db 4Ah, 20h, 0EFh, 0Ch, 0E8h, 4Bh, 0A5h, 0Dh, 0BEh, 85h
db 0BDh, 0Eh, 44h, 0D7h, 94h, 0Fh, 12h, 19h, 8Ch, 5 dup(0)
db 20h, 0, 14h, 0, 40h, 0, 28h, 0, 60h, 0, 3Ch, 0, 80h
db 0, 50h, 0, 0A0h, 0, 44h, 0, 0C0h, 0, 78h, 0, 0E0h, 0
db 6Ch, 2 dup(0), 1, 0A0h, 0, 20h, 1, 0B4h, 0, 40h, 1
db 88h, 0, 60h, 1, 9Ch, 0, 80h, 1, 0F0h, 0, 0A0h, 1, 0E4h
db 0, 0C0h, 1, 0D8h, 0, 0E0h, 1, 0CCh, 6 dup(0), 81h, 10h
db 2 dup(0), 2, 21h, 2 dup(0), 83h, 31h, 2 dup(0), 4, 42h
db 2 dup(0), 85h, 52h, 2 dup(0), 6, 63h, 2 dup(0), 87h
db 73h, 2 dup(0), 8, 84h, 2 dup(0), 89h, 94h, 2 dup(0)
db 0Ah, 0A5h, 2 dup(0), 8Bh, 0B5h, 2 dup(0), 0Ch, 0C6h
db 2 dup(0), 8Dh, 0D6h, 2 dup(0), 0Eh, 0E7h, 2 dup(0)
db 8Fh, 0F7h
ALIGN 4
Checksum_Table_2 db 4 dup(0), 0C0h, 0ADh, 55h, 19h, 80h, 5Bh, 0ABh, 32h
db 40h, 0F6h, 0FEh, 2Bh, 0, 0B7h, 56h, 65h, 0C0h, 1Ah
db 3, 7Ch, 80h, 0ECh, 0FDh, 57h, 40h, 41h, 0A8h, 4Eh, 0
db 6Eh, 0ADh, 0CAh, 0C0h, 0C3h, 0F8h, 0D3h, 80h, 35h, 6
db 0F8h, 40h, 98h, 53h, 0E1h, 0, 0D9h, 0FBh, 0AFh, 0C0h
db 74h, 0AEh, 0B6h, 80h, 82h, 50h, 9Dh, 40h, 2Fh, 5, 84h
ALIGN 4
Checksum_Table_3 db 4 dup(0), 64h, 10h, 0B7h, 1Dh, 0C8h, 20h, 6Eh, 3Bh
db 0ACh, 30h, 0D9h, 26h, 90h, 41h, 0DCh, 76h, 0F4h, 51h
db 2 dup(6Bh), 58h, 61h, 0B2h, 4Dh, 3Ch, 71h, 5, 50h, 20h
db 83h, 0B8h, 0EDh, 44h, 93h, 0Fh, 0F0h, 0E8h, 0A3h, 2 dup(0D6h)
db 8Ch, 0B3h, 61h, 0CBh, 0B0h, 0C2h, 64h, 9Bh, 0D4h, 0D2h
db 0D3h, 86h, 78h, 0E2h, 0Ah, 0A0h, 1Ch, 0F2h, 2 dup(0BDh)
db 4 dup(0), 1, 10h, 1, 99h, 1, 20h, 1, 82h, 0, 30h, 0
db 1Bh, 1, 40h, 1, 0B4h, 0, 50h, 0, 2Dh, 0, 60h, 0, 36h
db 1, 70h, 1, 0AFh, 1, 80h, 1, 0D8h, 0, 90h, 0, 41h, 0
db 0A0h, 0, 5Ah, 1, 0B0h, 1, 0C3h, 0, 0C0h, 0, 6Ch, 1
db 0D0h, 1, 0F5h, 1, 0E0h, 1, 0EEh, 0, 0F0h, 0, 77h
include NOTES ; looooooong FAQ
.data?
BigBuffer db 50 dup (?) ; universally used :)
ALIGN 4
License_Part_1 dd ?
License_Part_2 dd ?
License_Part_3 dd ?
License_Part_4 dd ?
Check_Part_1 dd ?
Check_Part_2 dd ?
Check_Part_3 dd ?
Check_Part_4 dd ?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hWindow DWORD ?
lpTranslated LPSTR ? ; not really needed, but M$ Win wants it
FILESIZE equ 260
SIZEOFDAT equ 1024 ; cdrwin.dat = 0400h bytes
szFileNameBuffer db FILESIZE dup(?)
ofn OPENFILENAME<>
lpNumberOfBytesRead dd ?
DatFileBuffer db SIZEOFDAT dup(?) ; buffer to contain cdrwin.dat information
st_ SYSTEMTIME<> ; systemtime structure
.code
start:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke GetCommandLine
mov CommandLine, eax
invoke DialogBoxParam, hInstance, IDD_DIALOG, NULL, addr DlgProc, NULL
invoke ExitProcess,eax
; ########################################################################
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg == WM_INITDIALOG
invoke GetDlgItem, hWnd, IDC_NAME
invoke SetFocus, eax
invoke LoadLibrary, addr userlib
push eax
invoke GetProcAddress, eax, addr userfunction
mov dword ptr wsprintfa, eax
pop eax
invoke FreeLibrary, eax
invoke SendDlgItemMessage, hWnd, IDC_NAME, EM_SETLIMITTEXT, MAXSIZE-1, 0
invoke SendDlgItemMessage, hWnd, IDC_EMAIL, EM_SETLIMITTEXT, MAXSIZE-1, 0
invoke SendDlgItemMessage, hWnd, IDC_MONTHSTART, EM_SETLIMITTEXT, 2, 0
invoke SendDlgItemMessage, hWnd, IDC_YEARSTART, EM_SETLIMITTEXT, 4, 0
invoke SetDlgItemInt, hWnd, IDC_MONTHSTART, Default_Month, FALSE
invoke SetDlgItemInt, hWnd, IDC_YEARSTART, Default_Year, FALSE
invoke SendDlgItemMessage, hWnd, IDC_CDRWIN, BM_SETCHECK, 1, 0
invoke SetDlgItemText, hWnd, IDC_EDITFAQ, addr FAQ_TEXT
.ELSEIF uMsg == WM_CLOSE
invoke SendMessage, hWnd, WM_COMMAND, IDM_EXIT, 0
.ELSEIF uMsg == WM_COMMAND
mov eax, wParam
.IF lParam == 0
.IF ax == IDM_EXIT
invoke EndDialog, hWnd, NULL
.ENDIF
.ELSE
mov edx, wParam
shr edx, 16
.IF dx == BN_CLICKED
.IF ax == IDC_CDRWIN
jmp refresh_codes
.ELSEIF ax == IDC_DAO
refresh_codes:
mov dx, EN_CHANGE
shl edx, 16
mov dx, IDC_NAME
invoke SendMessage, hWnd, WM_COMMAND, edx, dx
.ELSEIF ax == IDC_GETDAT
invoke dat_routine, hWnd
.ELSEIF ax == IDC_SAVE
invoke save_dat_routine, hWnd
.ENDIF
.ELSEIF dx == EN_CHANGE
cmp ax, IDC_NAME
je proceed_info
cmp ax, IDC_EMAIL
je proceed_info
cmp ax, IDC_MONTHSTART
je proceed_info
cmp ax, IDC_YEARSTART
jne dont_proceed_info
proceed_info:
invoke cdrwin_keyengine, hWnd
dont_proceed_info:
.ENDIF
.ENDIF
.ELSE
mov eax, FALSE
ret
.ENDIF
mov eax, TRUE
ret
DlgProc endp
; ########################################################################
cdrwin_keyengine proc hWnd:HWND
pusha
; == Check Date Range and adjust Expiration Word
invoke GetDlgItemInt, hWnd, IDC_YEARSTART, addr lpTranslated, FALSE
cmp eax, Base_Year
jae check_month
invoke SetDlgItemText, hWnd, IDC_UNLOCKKEY, addr lpError5
invoke SetDlgItemText, hWnd, IDC_CHECKKEY, addr lpError5
invoke SetDlgItemInt, hWnd, IDC_YEAREND, 0, FALSE
invoke SetDlgItemInt, hWnd, IDC_MONTHEND, 0, FALSE
mov Valid_Data, 0
jmp endof_keyengine
check_month:
mov Default_Year, eax
mov esi, eax
invoke GetDlgItemInt, hWnd, IDC_MONTHSTART, addr lpTranslated, FALSE
or eax, eax
jne month_check_2
jmp invalid_month
month_check_2:
cmp eax, 12
jbe done_date_check
invalid_month:
invoke SetDlgItemText, hWnd, IDC_UNLOCKKEY, addr lpError5
invoke SetDlgItemText, hWnd, IDC_CHECKKEY, addr lpError5
invoke SetDlgItemInt, hWnd, IDC_YEAREND, 0, FALSE
invoke SetDlgItemInt, hWnd, IDC_MONTHEND, 0, FALSE
mov Valid_Data, 0
jmp endof_keyengine
done_date_check:
mov Default_Month, eax
mov edi, eax
mov eax, esi
mov ecx, 12
mul ecx
add eax, edi
push eax
add eax, Length_of_Validity ; yes, 12 months...could've been done easier...
; but we want to remain flexible in case of >12 months :)
xor edx, edx
mov edi, eax
div ecx
push eax
mul ecx
pop esi
sub edi, eax
jne not_end_of_year
dec esi
invoke SetDlgItemInt, hWnd, IDC_YEAREND, esi, FALSE
invoke SetDlgItemInt, hWnd, IDC_MONTHEND, 12, FALSE
jmp done_date_check_2
not_end_of_year:
invoke SetDlgItemInt, hWnd, IDC_YEAREND, esi, FALSE
invoke SetDlgItemInt, hWnd, IDC_MONTHEND, edi, FALSE
done_date_check_2:
pop eax
sub eax, Base_Year*12-Base_Counter+Base_Month ; calculate expiration word
mov Expiration_Word, ax
; == Name/Company must be at least six characters long
invoke GetDlgItemText, hWnd, IDC_NAME, addr szName, MAXSIZE
.IF eax < 6
invoke SetDlgItemText, hWnd, IDC_UNLOCKKEY, addr lpError1
invoke SetDlgItemText, hWnd, IDC_CHECKKEY, addr lpError1
mov Valid_Data, 0
.ELSE
invoke GetDlgItemText, hWnd, IDC_EMAIL, addr szEmail, MAXSIZE
.IF eax < 6
invoke SetDlgItemText, hWnd, IDC_UNLOCKKEY, addr lpError1
invoke SetDlgItemText, hWnd, IDC_CHECKKEY, addr lpError1
mov Valid_Data, 0
.ELSE
; == Check if CDRWin or DAO Radiobutton
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -