|
Source/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!",&
#48;
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 cor
rect it?",0
ALIGN 4
lpError7 db "You must enter valid Name/Company and Expir
ation before you save!",0
ALIGN 4
lpCaption db "CDRWin/DAO V3.8 Open-Source Keymaker V2.0
4;,0
ALIGN 4
lpCode db "%08lX-%08lX-%08lX-%08lX",
8;
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 04
a2h - 04bah
; 1.1: can be between 04a4h -
8;4bch
; 1.2: can be between 04a7h - 04b
eh
; 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 vali
d.
; in V3.8B July'00 Goldenhawk e&
#120;tends 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 infor
mation...",0
ALIGN 4
szFileSaveTitle db "Select Cdrwin path to save Cdrwin.dat...",
48;
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, 0
00h, 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, &
#48;66h, 074h
db 077h, 061h, 072h, 065h, 000h, 00&
#48;h, 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 047h, 06F
h, 06Ch, 064h
db 065h, 06Eh, 020h, 048h, 061h, 077h, 0
6Bh, 020h, 054h, 065h, 063h, 068h, 06Eh, 06Fh, &
#48;6Ch, 06Fh
db 067h, 079h, 000h, 000h, 00
8;h, 000h, 000h, 000h, 000h,
8;00h, 000h, 000h, 000h, 00&
#48;h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 031h,
8;32h, 035h, 020h
db 049h, 06Eh, 064h, 069h, 061h, 06Eh, &
#48;20h, 052h, 06Fh, 063h, 06Bh, 020h, 052h,
8;6Fh, 061h, 064h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 04Dh, 065
h, 072h, 072h
db 069h, 06Dh, 061h, 063h, 06Bh, 000
h, 000h, 000h, 000h, 000h, 0
00h, 000h, 000h, 000h, 00
8;h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 04Eh, 048
h, 000h, 000h
db 030h, 033h, 030h, 035h, 034h, 000
h, 000h, 000h, 000h, 000h, 0
00h, 000h, 036h, 030h, 033h, 02Dh
db 034h, 032h, 039h, 02Dh, 031h, 030h, &
#48;32h, 037h, 000h, 000h, 000h, 0
48;0h, 036h, 030h, 033h, 02Dh
db 034h, 032h, 039h, 02Dh, 030h, 030h, &
#48;37h, 033h, 000h, 000h, 000h, 0
48;0h, 044h, 065h, 06Dh, 06Fh
db 06Eh, 073h, 074h, 072h, 061h, 074h, 06
7;h, 06Fh, 06Eh, 020h, 056h, 065h, 072h, 073h, &
#48;69h, 06Fh
db 06Eh, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h, 000h, 0
48;0h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 047h, 06F
h, 06Ch, 064h
db 065h, 06Eh, 020h, 048h, 061h, 077h, 0
6Bh, 020h, 054h, 065h, 063h, 068h, 06Eh, 06Fh, &
#48;6Ch, 06Fh
db 067h, 079h, 000h, 065h, 02Eh, 064h, &
#48;65h, 000h, 000h, 000h, 000h,
000h, 000h, 000h, 000h, 0
48;0h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 084h, 0ED
h, 077h, 057h
db 0DAh, 053h, 080h, 027h, 0D9h, 09Dh, &
#48;A6h, 0C4h, 032h, 0D0h, 0EAh, 09Dh, 055h,
8;00h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;18h, 000h, 006h, 000h, 0D0h,
8;07h, 006h, 000h, 000h, 000h, &
#48;00h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
db 000h, 000h, 000h, 000h, &
#48;00h, 000h, 000h, 000h, 00
;0h, 000h, 000h, 000h, 000h,
000h, 000h, 000h
ALIGN 4
Checksum_Table_1 db 4 dup(0), 7Eh, 88h, 3Eh, 1Ch, 0FCh,
49;0h, 7Dh, 38h, 82h
db 98h, 43h, 24h, 0F8h, 21h, 0FAh, 70h, 86h,
48;A9h, 0C4h
db 6Ch, 4, 31h, 87h, 48h, 7Ah, 2 dup(0B9h), 54h, 0F
8;h
db 43h, 0F4h, 0E1h, 8Eh, 0CBh, 0CAh, 0FDh, 0C
h, 53h, 89h
db 0D9h, 72h, 0DBh, 0B7h, 0C5h, 8, 62h, 0Eh, &
#57;1h, 76h
db 0EAh, 30h, 8Dh, 0F4h, 72h, 73h, 0A9h, 8Ah, 0FAh,
4Dh
db 0B5h, 4 dup(0), 1, 56h, 0CEh, 18h, 2, 0ACh, 9
Ch, 31h
db 3, 0FAh, 52h, 29h, 4, 58h, 39h, 63h, 5, 0Eh, 0F
7h, 7Bh
db 6, 0F4h, 0A5h, 52h, 7, 0A2h, 6Bh, 4Ah, 8, 0B0h, 72
h
db 0C6h, 9, 0E6h, 0BCh, 0DEh, 0Ah, 1Ch,
48;EEh, 0F7h, 0Bh
db 4Ah, 20h, 0EFh, 0Ch, 0E8h, 4Bh, 0A5h, 0Dh,
0BEh, 85h
db 0BDh, 0Eh, 44h, 0D7h, 94h, 0Fh, 12h, 19
;h, 8Ch, 5 dup(0)
db 20h, 0, 14h, 0, 40h, 0, 28h, 0, 6
0h, 0, 3Ch, 0, 80h
db 0, 50h, 0, 0A0h, 0, 44h, 0, 0C0h,
8;, 78h, 0, 0E0h, 0
db 6Ch, 2 dup(0), 1, 0A0h, 0, 20h, 1, 0B4
h, 0, 40h, 1
db 88h, 0, 60h, 1, 9Ch, 0, 80h, 1, &
#48;F0h, 0, 0A0h, 1, 0E4h
db 0, 0C0h, 1, 0D8h, 0, 0E0h, 1, 0
;CCh, 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(
48;)
db 0Ah, 0A5h, 2 dup(0), 8Bh, 0B5h, 2 dup(0),
48;Ch, 0C6h
db 2 dup(0), 8Dh, 0D6h, 2 dup(0), 0Eh, 0E7h, 2 dup(
48;)
db 8Fh, 0F7h
ALIGN 4
Checksum_Table_2 db 4 dup(0), 0C0h, 0ADh, 55h, 19h, 8
8;h, 5Bh, 0ABh, 32h
db 40h, 0F6h, 0FEh, 2Bh, 0, 0B7h, 56h, 65h, 0C
8;h, 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,
48;FBh, 0AFh, 0C0h
db 74h, 0AEh, 0B6h, 80h, 82h, 50h, 9Dh, 40h, 2
Fh, 5, 84h
ALIGN 4
Checksum_Table_3 db 4 dup(0), 64h, 10h, 0B7h, 1Dh, 0C
8h, 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, 20
h
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, 2
48;h, 1, 82h, 0, 30h, 0
db 1Bh, 1, 40h, 1, 0B4h, 0, 50h, 0, 2D
h, 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,
48;C0h, 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 want
s it
FILESIZE equ 260
SIZEOFDAT equ 1024 ; cdrwin.dat = 040
48;h bytes
szFileNameBuffer db FILESIZE dup(?)
ofn OPENFILENAME<>
lpNumberOfBytesRead dd ?
DatFileBuffer db SIZEOFDAT dup(?) ; buffer to contain cdrwin.dat i
nformation
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-
9;, 0
invoke SendDlgItemMessage, hWnd, IDC_MONTHSTART, EM_SETLIMITTEXT, 2,
8;
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 bee
n done easier...
; but we want to remain flexible in cas
e 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 ex
piration 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
invoke SendDlgItemMessage, hWnd, IDC_CDRWIN, BM_GETCHECK, 0, 0
or eax, eax
je is_DAO_1
mov edi, 2
jmp generate_checksum
is_DAO_1:
mov edi, 1
; == Generate Checksum calculated from Name/Company
; == xxxxxxxx-xxxx
120;xxx-xxxxxxxx-XXXXXXXX
generate_checksum:
push edi
push offset szName
call Checksum_1
add esp, 4*2
mov esi, eax
push edi
push offset szEmail
call Checksum_1
add esp, 4*2
mov ecx, eax
mov edx, eax
and ecx, 0FF0000h
shr edx, 10h
or ecx, edx
mov edx, eax
and edx, 0FF00h
shl eax, 10h
or edx, eax
xor eax, eax
shr ecx, 8
shl edx, 8
or ecx, edx
xor ecx, esi ; ecx = xxxx
120;xxx-xxxxxxxx-x
120;xxxxxx-XXXXXXXX
mov dword ptr [License_Part_4], ecx
mov edi, ecx ; keep License_Part_4 in edi for some time
; == Check if Blacklisted (compare License_Part_4 with a list of known blacklist
ed ones)
push offset [License_Part_4]
; == Check if CDRWin or DAO Radiobutton
invoke SendDlgItemMessage, hWnd, IDC_CDRWIN, BM_GETCHECK, 0,
8;
or eax, eax
je is_DAO_2
call CDRWin_Blacklisted_Routine
jmp done_blacklistcheck
is_DAO_2:
call DAO_Blacklisted_Routine
done_blacklistcheck:
add esp, 4
or ax, ax
je not_blacklisted
invoke SetDlgItemText, hWnd, IDC_UNLOCKKEY, addr lpError2
invoke SetDlgItemText, hWnd, IDC_CHECKKEY, addr lpError2
jmp endof_keyengine
not_blacklisted:
; == Generate Version/Expiration Info
; == xxxxxxxx-xxxx
120;xxx-xxxxXXXX-xxxx
0;xxx
mov ecx, edi
shr ecx, 10h
xor cx, Expiration_Word ; xor cx, x
20;xxxxxx-xxxxxx
0;x-xxxxXXXX-xxxxxxx
x
mov word ptr [License_Part_3], cx
; == Checksum Check, occurs when program is started (fails = piracy message)
; == xxxxxxxx-xxxx
120;xxx-XXXXxxxx-xxxx
0;xxx
push 0 ; little fix for stack prob
lem
mov eax, edi
push 0
lea ecx, [esp+4]
push 4
add eax, 64h
push ecx
push offset Checksum_Table_3
mov [esp+10h], eax
call Checksum_32Bit_Routine
add esp, 14h
shr eax, 10h
xor edx, edx
mov word ptr [License_Part_3+2], ax ; xxxx&
#120;xxx-xxxxxxxx-XXXX
20;xxx-xxxxxxxxx
; == Hidden Check 1:
; == XXXXxxxx-xxxxxxx
0;-xxxxxxxx-xxxx
0;xxx
mov eax, edi
add eax, 40h
mov edx, eax
mov esi, eax
shr edx, 19h
shl esi, 7
or edx, esi
shr eax, 0Dh
add edx, eax
mov word ptr [License_Part_1+2], dx
; == Hidden Check 2:
; == xxxxxxxx-xxxxXX
XX-xxxxxxxx-xxxx
0;xxx
xor edx, edx
xor eax, eax
mov ecx, edi
hidden2_1:
test cl, 1
jz hidden2_2
add edx, ecx
hidden2_2:
add edx, eax
shr ecx, 1
inc eax
cmp eax, 20h
jl hidden2_1
mov word ptr [License_Part_2], dx
invoke SendDlgItemMessage, hWnd, IDC_RANDOMIZE, BM_GETCHECK, 0,
0
or eax, eax
jne dont_randomize ; don't use randome if user wants that
; == Hidden Check 3:
; == NOT YET USED! -- V3.8A 12/27/99, V3.8A 03/20/00
, V3.8B July 00
; == Therefore use (very pseudo) pseudo random words for:
; == xxxxXXXX-XXXXxxxx-xxx
;xxxxx-xxxxxxxx
invoke GetTickCount
mov edi, eax
imul edx, edi, 01343f123h
mov word ptr [License_Part_1], dx
imul edx, edi, 0c01439ach
shr edx, 16
mov word ptr [License_Part_2+2], dx
dont_randomize:
; == Generate Check Codes
mov esi, offset [License_Part_1]
mov ecx, offset [Check_Part_1]
mov edi, [esi]
mov eax, [esi+4]
mov edx, edi
xor edx, eax
mov [ecx+4], edx
mov edx, [esi+8]
mov ebx, edx
xor ebx, eax
mov [ecx+8], ebx
mov eax, [esi+0Ch]
mov ebx, eax
xor ebx, edx
mov [ecx+0Ch], ebx
xor eax, edi
mov [ecx], eax
; == Display Codes
xor edi, edi
mov esi, offset [License_Part_1]
display_codes:
push dword ptr [esi+0Ch]
push dword ptr [esi+8]
push dword ptr [esi+4]
push dword ptr [esi]
push offset lpCode
push offset BigBuffer
call dword ptr [wsprintfa]
add esp, 6*4
or edi, edi
jne display_codes_2
invoke SetDlgItemText, hWnd, IDC_UNLOCKKEY, addr BigBuffer
inc edi
mov esi, offset [Check_Part_1]
jmp display_codes
display_codes_2:
invoke SetDlgItemText, hWnd, IDC_CHECKKEY, addr BigBuffer
mov Valid_Data, 1
.ENDIF
.ENDIF
endof_keyengine:
popa
ret
cdrwin_keyengine endp
save_dat_routine proc hWnd:HWND
pusha
cmp Valid_Data, 0
jne save_dat
invoke MessageBox, hWnd, addr lpError7, addr lpCaption, MB_ICONEXCLAMAT
ION
jmp end_save
save_dat:
lea esi, Empty_Dat
lea edi, DatFileBuffer
mov ecx, SIZEOFDAT
rep movsb
invoke GetDlgItemText, hWnd, IDC_NAME, addr DatFileBuffer+460, MAXS
IZE
invoke GetDlgItemText, hWnd, IDC_EMAIL, addr DatFileBuffer+524, MAXSIZE
lea ebx, License_Part_4
lea ecx, DatFileBuffer+828
mov eax, [ebx]
mov [ecx], eax
mov eax, [ebx-4]
mov [ecx+4], eax
mov eax, [ebx-8]
mov [ecx+8], eax
mov eax, [ebx-12]
mov [ecx+12], eax
invoke GetLocalTime, addr st_
lea eax, DatFileBuffer+852
mov cx, st_.wDay
mov dx, st_.wMonth
mov word ptr [eax], cx
mov cx, st_.wYear
mov word ptr [eax+2], dx
mov dx, st_.wDayOfWeek
mov word ptr [eax+4], cx
mov word ptr [eax+6], dx
push 0
push 03f4h
push offset DatFileBuffer+0ch
push offset Checksum_Table_3
call Checksum_32Bit_Routine
add esp, 10h
mov dword ptr DatFileBuffer+08h, eax
mov ecx, SIZEOFDAT
xor eax, eax
lea edx, DatFileBuffer
@Encrypt:
mov bl, byte ptr [eax+edx]
add bl, al
mov [eax+edx], bl
inc eax
loop @Encrypt
invoke RtlZeroMemory, addr ofn, sizeof ofn
mov ofn.lStructSize, sizeof ofn
m2m ofn.hWndOwner, hWnd
m2m ofn.hInstance, hInstance
mov ofn.lpstrFilter, offset szFileFilter
invoke RtlZeroMemory, addr szFileNameBuffer, FILESIZE
mov ofn.lpstrFile, offset szFileNameBuffer
mov ofn.nFilterIndex, 2
mov ofn.nMaxFile, FILESIZE
mov ofn.Flags, OFN_CREATEPROMPT or \
OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
mov ofn.lpstrTitle, offset szFileSaveTitle
invoke GetSaveFileName, addr ofn
.IF eax == TRUE
invoke CreateFile, ofn.lpstrFile,
GENERIC_WRITE,
0, NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
.ELSE
jmp end_save
.ENDIF
push eax
invoke WriteFile, eax, addr DatFileBuffer, SIZEOFDAT, addr lpNumberOfBy
tesRead,NULL
pop eax
invoke CloseHandle, eax
invoke MessageBox, hWnd, addr lpSaved, addr lpCaption, MB_OK
end_save:
popa
ret
save_dat_routine endp
dat_routine proc hWnd:HWND
; == open dialog and read dat file
pusha
invoke RtlZeroMemory, addr ofn, sizeof ofn
mov ofn.lStructSize, sizeof ofn
m2m ofn.hWndOwner, hWnd
m2m ofn.hInstance, hInstance
mov ofn.lpstrFilter, offset szFileFilter
invoke RtlZeroMemory, addr szFileNameBuffer, FILESIZE
mov ofn.lpstrFile, offset szFileNameBuffer
mov ofn.nFilterIndex, 2
mov ofn.nMaxFile, FILESIZE
mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or \
OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
mov ofn.lpstrTitle, offset szFileOpenTitle
invoke GetOpenFileName, addr ofn
.IF eax == TRUE
invoke CreateFile, ofn.lpstrFile,
GENERIC_READ,
0, NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
.ELSE
invoke MessageBox, hWnd, addr lpError3, addr lpCaption, MB_ICONEXCL
AMATION
jmp end_dat
.ENDIF
push eax
invoke ReadFile, eax, addr DatFileBuffer, SIZEOFDAT, addr lpNumberOfByt
esRead,NULL
pop eax
invoke CloseHandle, eax
; == decrypt cdrwin.dat file
mov ecx, SIZEOFDAT
xor eax, eax
lea edx, DatFileBuffer
Decrypt_Dat:
mov bl, byte ptr [eax+edx]
sub bl, al
mov [eax+edx], bl
inc eax
loop Decrypt_Dat
; == check if cdrwin.dat ok
push 0
push 03f4h
push offset DatFileBuffer+0ch
push offset Checksum_Table_3
call Checksum_32Bit_Routine
add esp, 10h
mov ecx, dword ptr DatFileBuffer+08h ; checksum inside datfile
.IF eax != ecx
invoke MessageBox, hWnd, addr lpError4, addr lpCaption, MB_ICONEXCL
AMATION
jmp end_dat
.ENDIF
; == do various checks if key is 100%
push offset [DatFileBuffer+828]
call CDRWin_Blacklisted_Routine
add esp, 4
or ax, ax
je @2check
invoke MessageBox, hWnd, addr lpError2, addr lpCaption, MB_ICONWARNING
jmp end_dat
@2check:
mov edi, 2
push edi
push offset DatFileBuffer+460
call Checksum_1
add esp, 4*2
mov esi, eax
push edi
push offset DatFileBuffer+524
call Checksum_1
add esp, 4*2
mov ecx, eax
mov edx, eax
and ecx, 0FF0000h
shr edx, 10h
or ecx, edx
mov edx, eax
and edx, 0FF00h
shl eax, 10h
or edx, eax
xor eax, eax
shr ecx, 8
shl edx, 8
or ecx, edx
xor ecx, esi
mov edi, ecx
cmp dword ptr DatFileBuffer+828, edi
je @3check
invoke MessageBox, hWnd, addr lpError6, addr lpCaption, MB_YESNO
.IF eax == IDNO
jmp end_dat
.ELSE
mov dword ptr DatFileBuffer+828, edi
mov Got_Fixed, 1
.ENDIF
@3check:
push 0 ; little fix for stack problem
mov eax, dword ptr DatFileBuffer+828
push 0
lea ecx, [esp+4]
push 4
add eax, 64h
push ecx
push offset Checksum_Table_3
mov [esp+10h], eax
call Checksum_32Bit_Routine
add esp, 14h
shr eax, 10h
xor edx, edx
mov edi, eax
cmp word ptr DatFileBuffer+834, di
je @4check
cmp Got_Fixed, 1
je @3fix
invoke MessageBox, hWnd, addr lpError6, addr lpCaption, MB_YESNO
.IF eax == IDNO
jmp end_dat
.ELSE
@3fix:
mov word ptr DatFileBuffer+834, di
mov Got_Fixed, 1
.ENDIF
@4check:
mov eax, dword ptr DatFileBuffer+828
add eax, 40h
mov edx, eax
mov esi, eax
shr edx, 19h
shl esi, 7
or edx, esi
shr eax, 0Dh
add edx, eax
mov edi, edx
cmp word ptr DatFileBuffer+842, di
je @5check
cmp Got_Fixed, 1
je @4fix
invoke MessageBox, hWnd, addr lpError6, addr lpCaption, MB_YESNO
.IF eax == IDNO
jmp end_dat
.ELSE
@4fix:
mov word ptr DatFileBuffer+842, di
mov Got_Fixed, 1
.ENDIF
@5check:
xor edx, edx
xor eax, eax
mov ecx, dword ptr DatFileBuffer+828
@5check_1:
test cl, 1
jz @5check_2
add edx, ecx
@5check_2:
add edx, eax
shr ecx, 1
inc eax
cmp eax, 20h
jl @5check_1
mov edi, edx
cmp word ptr DatFileBuffer+836, di
je @6check
cmp Got_Fixed, 1
je @5fix
invoke MessageBox, hWnd, addr lpError6, addr lpCaption, MB_YESNO
.IF eax == IDNO
jmp end_dat
.ELSE
@5fix:
mov word ptr DatFileBuffer+836, di
mov Got_Fixed, 1
.ENDIF
@6check:
@donecheck:
cmp Got_Fixed, 1
jne no_fixing
; == fix dat and save back
push 0
push 03f4h
push offset DatFileBuffer+0ch
push offset Checksum_Table_3
call Checksum_32Bit_Routine
add esp, 10h
mov dword ptr DatFileBuffer+08h, eax
mov ecx, SIZEOFDAT
xor eax, eax
lea edx, DatFileBuffer
Encrypt_Dat:
mov bl, byte ptr [eax+edx]
add bl, al
mov [eax+edx], bl
inc eax
loop Encrypt_Dat
invoke CreateFile, ofn.lpstrFile,
GENERIC_WRITE,
0, NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
push eax
invoke WriteFile, eax, addr DatFileBuffer, SIZEOFDAT, addr lpNumberOfBy
tesRead,NULL
pop eax
invoke CloseHandle, eax
mov ecx, SIZEOFDAT
xor eax, eax
lea edx, DatFileBuffer
@Fix:
mov bl, byte ptr [eax+edx]
sub bl, al
mov [eax+edx], bl
inc eax
loop @Fix
mov Got_Fixed, 0
no_fixing:
; == fetch Name and Company
invoke SetDlgItemText, hWnd, IDC_NAME, addr DatFileBuffer+460
invoke SetDlgItemText, hWnd, IDC_EMAIL, addr DatFileBuffer+524
; == display expiration range
mov eax, dword ptr DatFileBuffer+832
mov esi, dword ptr DatFileBuffer+828
shr esi, 010h
xor esi, eax
and esi, 0ffffh
add esi, Base_Year*12-Base_Counter+Base_Month
mov eax, esi
mov ecx, 12
xor edx, edx
div ecx
or edx, edx
jne not_end_of_da_year
dec eax
invoke SetDlgItemInt, hWnd, IDC_YEARSTART, eax, FALSE
invoke SetDlgItemInt, hWnd, IDC_MONTHSTART, 12, FALSE
jmp finish_fetch_date
not_end_of_da_year:
mov edi, edx
invoke SetDlgItemInt, hWnd, IDC_YEARSTART, eax, FALSE
invoke SetDlgItemInt, hWnd, IDC_MONTHSTART, edi, FALSE
finish_fetch_date:
; == fetch Unlock Key and generate Check Key
lea ebx, License_Part_4
lea ecx, DatFileBuffer+828
mov eax, [ecx]
mov [ebx], eax
mov eax, [ecx+4]
mov [ebx-4], eax
mov eax, [ecx+8]
mov [ebx-8], eax
mov eax, [ecx+12]
mov [ebx-12], eax
mov esi, offset [License_Part_1]
mov ecx, offset [Check_Part_1]
mov edi, [esi]
mov eax, [esi+4]
mov edx, edi
xor edx, eax
mov [ecx+4], edx
mov edx, [esi+8]
mov ebx, edx
xor ebx, eax
mov [ecx+8], ebx
mov eax, [esi+0Ch]
mov ebx, eax
xor ebx, edx
mov [ecx+0Ch], ebx
xor eax, edi
mov [ecx], eax
; == display code (must be at the end, otherwise overwrite through EN_CHANGE)
xor edi, edi
mov esi, offset [License_Part_1]
display_codes_again:
push dword ptr [esi+0Ch]
push dword ptr [esi+8]
push dword ptr [esi+4]
push dword ptr [esi]
push offset lpCode
push offset BigBuffer
call dword ptr [wsprintfa]
add esp, 6*4
or edi, edi
jne display_codes_2_again
invoke SetDlgItemText, hWnd, IDC_UNLOCKKEY, addr BigBuffer
inc edi
mov esi, offset [Check_Part_1]
jmp display_codes_again
display_codes_2_again:
invoke SetDlgItemText, hWnd, IDC_CHECKKEY, addr BigBuffer
end_dat:
popa
ret
dat_routine endp
; == The following routines are directly ripped from CDRWin
Checksum_1 proc near
arg_0 = dword ptr 4
arg_4 = dword ptr 8
mov eax, [esp+arg_4]
push esi
dec eax
jz short loc_0_4203A6
dec eax
jz short loc_0_42039F
xor eax, eax
pop esi
retn
loc_0_42039F:
mov esi, offset Checksum_Table_1
jmp short loc_0_4203AB
loc_0_4203A6:
mov esi, offset Checksum_Table_2
loc_0_4203AB:
mov edx, [esp+4+arg_0]
push edi
mov edi, edx
or ecx, 0FFFFFFFFh
xor eax, eax
push 0
repne scasb
not ecx
dec ecx
push ecx
push edx
push esi
call Checksum_32Bit_Routine
add esp, 10h
pop edi
pop esi
retn
Checksum_1 endp
Checksum_32Bit_Routine proc near
arg_0 = dword ptr 4
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
arg_C = dword ptr 10h
mov eax, [esp+arg_C]
mov edx, [esp+arg_4]
push edi
mov edi, [esp+4+arg_8]
test di, di
jz short loc_0_43FDB0
push ebx
push ebp
push esi
mov esi, [esp+10h+arg_0]
and edi, 0FFFFh
loc_0_43FD7F:
xor ecx, ecx
mov ebp, eax
mov cl, [edx]
inc edx
mov ebx, ecx
xor ebx, eax
and ebx, 0Fh
shr ebp, 4
mov eax, [esi+ebx*4]
xor eax, ebp
shr ecx, 4
mov ebx, eax
and ecx, 0Fh
and ebx, 0Fh
xor ecx, ebx
shr eax, 4
mov ecx, [esi+ecx*4]
xor eax, ecx
dec edi
jnz short loc_0_43FD7F
pop esi
pop ebp
pop ebx
loc_0_43FDB0:
pop edi
retn
Checksum_32Bit_Routine endp
; ripped from CDRWin V3.8A 12/27/99, still up-to-date with DAO V3.8B
July
CDRWin_Blacklisted_Routine proc near
var_250 = dword ptr -250h
var_24C = dword ptr -24Ch
var_248 = dword ptr -248h
var_244 = dword ptr -244h
var_240 = dword ptr -240h
var_23C = dword ptr -23Ch
var_238 = dword ptr -238h
var_234 = dword ptr -234h
var_230 = dword ptr -230h
var_22C = dword ptr -22Ch
var_228 = dword ptr -228h
var_224 = dword ptr -224h
var_220 = dword ptr -220h
var_21C = dword ptr -21Ch
var_218 = dword ptr -218h
var_214 = dword ptr -214h
var_210 = dword ptr -210h
var_20C = dword ptr -20Ch
var_208 = dword ptr -208h
var_204 = dword ptr -204h
var_200 = dword ptr -200h
var_1FC = dword ptr -1FCh
var_1F8 = dword ptr -1F8h
var_1F4 = dword ptr -1F4h
var_1F0 = dword ptr -1F0h
var_1EC = dword ptr -1ECh
var_1E8 = dword ptr -1E8h
var_1E4 = dword ptr -1E4h
var_1E0 = dword ptr -1E0h
var_1DC = dword ptr -1DCh
var_1D8 = dword ptr -1D8h
var_1D4 = dword ptr -1D4h
var_1D0 = dword ptr -1D0h
var_1CC = dword ptr -1CCh
var_1C8 = dword ptr -1C8h
var_1C4 = dword ptr -1C4h
var_1C0 = dword ptr -1C0h
var_1BC = dword ptr -1BCh
var_1B8 = dword ptr -1B8h
var_1B4 = dword ptr -1B4h
var_1B0 = dword ptr -1B0h
var_1AC = dword ptr -1ACh
var_1A8 = dword ptr -1A8h
var_1A4 = dword ptr -1A4h
var_1A0 = dword ptr -1A0h
var_19C = dword ptr -19Ch
var_198 = dword ptr -198h
var_194 = dword ptr -194h
var_190 = dword ptr -190h
var_18C = dword ptr -18Ch
var_188 = dword ptr -188h
var_184 = dword ptr -184h
var_180 = dword ptr -180h
var_17C = dword ptr -17Ch
var_178 = dword ptr -178h
var_174 = dword ptr -174h
var_170 = dword ptr -170h
var_16C = dword ptr -16Ch
var_168 = dword ptr -168h
var_164 = dword ptr -164h
var_160 = dword ptr -160h
var_15C = dword ptr -15Ch
var_158 = dword ptr -158h
var_154 = dword ptr -154h
var_150 = dword ptr -150h
var_14C = dword ptr -14Ch
var_148 = dword ptr -148h
var_144 = dword ptr -144h
var_140 = dword ptr -140h
var_13C = dword ptr -13Ch
var_138 = dword ptr -138h
var_134 = dword ptr -134h
var_130 = dword ptr -130h
var_12C = dword ptr -12Ch
var_128 = dword ptr -128h
var_124 = dword ptr -124h
var_120 = dword ptr -120h
var_11C = dword ptr -11Ch
var_118 = dword ptr -118h
var_114 = dword ptr -114h
var_110 = dword ptr -110h
var_10C = dword ptr -10Ch
var_108 = dword ptr -108h
var_104 = dword ptr -104h
var_100 = dword ptr -100h
var_FC = dword ptr -0FCh
var_F8 = dword ptr -0F8h
var_F4 = dword ptr -0F4h
var_F0 = dword ptr -0F0h
var_EC = dword ptr -0ECh
var_E8 = dword ptr -0E8h
var_E4 = dword ptr -0E4h
var_E0 = dword ptr -0E0h
var_DC = dword ptr -0DCh
var_D8 = dword ptr -0D8h
var_D4 = dword ptr -0D4h
var_D0 = dword ptr -0D0h
var_CC = dword ptr -0CCh
var_C8 = dword ptr -0C8h
var_C4 = dword ptr -0C4h
var_C0 = dword ptr -0C0h
var_BC = dword ptr -0BCh
var_B8 = dword ptr -0B8h
var_B4 = dword ptr -0B4h
var_B0 = dword ptr -0B0h
var_AC = dword ptr -0ACh
var_A8 = dword ptr -0A8h
var_A4 = dword ptr -0A4h
var_A0 = dword ptr -0A0h
var_9C = dword ptr -9Ch
var_98 = dword ptr -98h
var_94 = dword ptr -94h
var_90 = dword ptr -90h
var_8C = dword ptr -8Ch
var_88 = dword ptr -88h
var_84 = dword ptr -84h
var_80 = dword ptr -80h
var_7C = dword ptr -7Ch
var_78 = dword ptr -78h
var_74 = dword ptr -74h
var_70 = dword ptr -70h
var_6C = dword ptr -6Ch
var_68 = dword ptr -68h
var_64 = dword ptr -64h
var_60 = dword ptr -60h
var_5C = dword ptr -5Ch
var_58 = dword ptr -58h
var_54 = dword ptr -54h
var_50 = dword ptr -50h
var_4C = dword ptr -4Ch
var_48 = dword ptr -48h
var_44 = dword ptr -44h
var_40 = dword ptr -40h
var_3C = dword ptr -3Ch
var_38 = dword ptr -38h
var_34 = dword ptr -34h
var_30 = dword ptr -30h
var_2C = dword ptr -2Ch
var_28 = dword ptr -28h
var_24 = dword ptr -24h
var_20 = dword ptr -20h
var_1C = dword ptr -1Ch
var_18 = dword ptr -18h
var_14 = dword ptr -14h
var_10 = dword ptr -10h
var_C = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
arg_0 = dword ptr 4
sub esp, 250h
push ebx
mov ecx, 8574D6DAh
mov eax, 52FAEF70h
push esi
push edi
mov [esp+25Ch+var_248], 0A7ECB4BCh
mov [esp+25Ch+var_244], 4F53C64Ch
mov [esp+25Ch+var_240], 40BB4C25h
mov [esp+25Ch+var_23C], 15B85CC9h
mov [esp+25Ch+var_238], 60CF10ADh
mov [esp+25Ch+var_234], 0C40DF385h
mov [esp+25Ch+var_230], 3FBF9B41h
mov [esp+25Ch+var_22C], 0C74BB7D7h
mov [esp+25Ch+var_228], 0C1E43D51h
mov [esp+25Ch+var_224], 345B3B7Eh
mov [esp+25Ch+var_220], 717CDBC6h
mov [esp+25Ch+var_21C], 4CF3D66Eh
mov [esp+25Ch+var_218], 0FD1A3279h
mov [esp+25Ch+var_214], 68D236F3h
mov [esp+25Ch+var_210], 7D4BE720h
mov [esp+25Ch+var_20C], 9C309CC1h
mov [esp+25Ch+var_208], 659E52F8h
mov [esp+25Ch+var_204], 0B42FED5Eh
mov [esp+25Ch+var_200], 0E21BADD5h
mov [esp+25Ch+var_1FC], 3E89D2B9h
mov [esp+25Ch+var_1F8], 6D712456h
mov [esp+25Ch+var_1F4], 0E1CF582Bh
mov [esp+25Ch+var_1F0], 2B46EDEDh
mov [esp+25Ch+var_1EC], 3285CC23h
mov [esp+25Ch+var_1E8], 0F4465C0Eh
mov [esp+25Ch+var_1E4], 31B3668Eh
mov [esp+25Ch+var_1E0], 43799AFAh
mov [esp+25Ch+var_1DC], 0F74F1CC8h
mov [esp+25Ch+var_1D8], 0A194ED65h
mov [esp+25Ch+var_1D4], 85468981h
mov [esp+25Ch+var_1D0], 0DFFCA902h
mov [esp+25Ch+var_1CC], 275590D1h
mov [esp+25Ch+var_1C8], 37645E8Ah
mov [esp+25Ch+var_1C4], 0D3AACB15h
mov [esp+25Ch+var_1C0], 8672DEDBh
mov [esp+25Ch+var_1BC], 0BD973BE0h
mov [esp+25Ch+var_1B8], 278A0A4h
mov [esp+25Ch+var_1B4], 0E911813Eh
mov [esp+25Ch+var_1B0], 65DBAA75h
mov [esp+25Ch+var_1AC], 49C93F5Eh
mov [esp+25Ch+var_1A8], 784FFB86h
mov [esp+25Ch+var_1A4], 0BE3D7B75h
mov [esp+25Ch+var_1A0], ecx
mov [esp+25Ch+var_19C], eax
mov [esp+25Ch+var_198], 0FF695CF2h
mov [esp+25Ch+var_194], 5425BDFCh
mov [esp+25Ch+var_190], 0C964FD3Fh
mov [esp+25Ch+var_18C], 0C3C307EFh
mov [esp+25Ch+var_188], 99D948C7h
mov [esp+25Ch+var_184], 0E65323AAh
mov [esp+25Ch+var_180], 773F84B8h
mov [esp+25Ch+var_17C], 0A79DF75Fh
mov [esp+25Ch+var_178], 712A0DC8h
mov [esp+25Ch+var_174], 0D84B09C1h
mov [esp+25Ch+var_170], 0F7152AD8h
mov [esp+25Ch+var_16C], 5F9355FEh
mov [esp+25Ch+var_168], 0CF9B73B0h
mov [esp+25Ch+var_164], 5EC34700h
mov [esp+25Ch+var_160], 95D1B737h
mov [esp+25Ch+var_15C], 0D590AA84h
mov [esp+25Ch+var_158], 153F6E04h
mov [esp+25Ch+var_154], 74797D39h
mov [esp+25Ch+var_150], 213A82D2h
mov [esp+25Ch+var_14C], 368A30EFh
mov [esp+25Ch+var_148], 984244BBh
mov [esp+25Ch+var_144], 782FA2Eh
mov [esp+25Ch+var_140], 49934854h
mov [esp+25Ch+var_13C], 0CB3552BAh
mov [esp+25Ch+var_138], 44C23803h
mov [esp+25Ch+var_134], 0E4524969h
mov [esp+25Ch+var_130], 273D5E9Ah
mov [esp+25Ch+var_12C], 0ED700070h
mov [esp+25Ch+var_128], 55111A62h
mov [esp+25Ch+var_124], 7D298F42h
mov [esp+25Ch+var_120], 4F6D9D02h
mov [esp+25Ch+var_11C], 92C9C7AAh
mov esi, [esp+25Ch+arg_0]
mov [esp+25Ch+var_30], ecx
mov [esp+25Ch+var_2C], eax
xor edi, edi
mov edx, [esi]
mov [esp+25Ch+var_118], 6360AA4Eh
mov [esp+25Ch+var_114], 0ADFB8334h
mov [esp+25Ch+var_110], 77723FA3h
mov [esp+25Ch+var_10C], 41E7D9EDh
mov [esp+25Ch+var_108], 8721489Ah
mov [esp+25Ch+var_104], 3B7BEA3h
mov [esp+25Ch+var_100], 69A7223Eh
mov [esp+25Ch+var_FC], 54E1A472h
mov [esp+25Ch+var_F8], 0D0A4C68Ch
mov [esp+25Ch+var_F4], 874DF1F6h
mov [esp+25Ch+var_F0], 20D67A7Dh
mov [esp+25Ch+var_EC], 0CABA1697h
mov [esp+25Ch+var_E8], 0FC6C2D00h
mov [esp+25Ch+var_E4], 0C6A57724h
mov [esp+25Ch+var_E0], 0C2DFC6F5h
mov [esp+25Ch+var_DC], 9EDA9F18h
mov [esp+25Ch+var_D8], 0D7359E61h
mov [esp+25Ch+var_D4], 3BCDCE5Bh
mov [esp+25Ch+var_D0], 13313369h
mov [esp+25Ch+var_CC], 0E2387A8Dh
mov [esp+25Ch+var_C8], 0FB8E0220h
mov [esp+25Ch+var_C4], 8D340C1Dh
mov [esp+25Ch+var_C0], 2067BCBDh
mov [esp+25Ch+var_BC], 2AD25731h
mov [esp+25Ch+var_B8], 35812D68h
mov [esp+25Ch+var_B4], 1A983447h
mov [esp+25Ch+var_B0], 7639059Fh
mov [esp+25Ch+var_AC], 2998ADA3h
mov [esp+25Ch+var_A8], 2FD98A24h
mov [esp+25Ch+var_A4], 0F5ED8456h
mov [esp+25Ch+var_A0], 0E36F3092h
mov [esp+25Ch+var_9C], 673B95D7h
mov [esp+25Ch+var_98], 0E3E6DBCh
mov [esp+25Ch+var_94], 66640B75h
mov [esp+25Ch+var_90], 726DC12Fh
mov [esp+25Ch+var_8C], 0E6D27EBBh
mov [esp+25Ch+var_88], 4C065EB7h
mov [esp+25Ch+var_84], 7AFE08DDh
mov [esp+25Ch+var_80], 0F3DF18B5h
mov [esp+25Ch+var_7C], 0B98EC3D7h
mov [esp+25Ch+var_78], 4BA2E58Fh
mov [esp+25Ch+var_74], 8498F6FEh
mov [esp+25Ch+var_70], 0BCF64FC4h
mov [esp+25Ch+var_6C], 46146CB3h
mov [esp+25Ch+var_68], 0A0AA6CAFh
mov [esp+25Ch+var_64], 7A47638Bh
mov [esp+25Ch+var_60], 349327CBh
mov [esp+25Ch+var_5C], 0A02C5AE6h
mov [esp+25Ch+var_58], 0A13A3621h
mov [esp+25Ch+var_54], 0B9E56293h
mov [esp+25Ch+var_50], 0C5B1A5CFh
mov [esp+25Ch+var_4C], 0D048E99Dh
mov [esp+25Ch+var_48], 0CC87CF0Bh
mov [esp+25Ch+var_44], 0CBC276CFh
mov [esp+25Ch+var_40], 9068495Fh
mov [esp+25Ch+var_3C], 0D0FF7891h
mov [esp+25Ch+var_38], 0BD4ED21h
mov [esp+25Ch+var_34], 0A1BFEC57h
mov [esp+25Ch+var_28], 2B0CA78Bh
mov [esp+25Ch+var_24], 49209AB3h
mov [esp+25Ch+var_20], 95974DC5h
mov [esp+25Ch+var_1C], 539BA816h
mov [esp+25Ch+var_18], 0F3495BB8h
mov [esp+25Ch+var_14], 869EBBAAh
mov [esp+25Ch+var_10], 485EF215h
mov [esp+25Ch+var_C], 7189252Ch
mov [esp+25Ch+var_8], 0E14095B4h
mov [esp+25Ch+var_4], 0B1BFF10Ah
mov [esp+25Ch+var_250], 6706B724h
mov [esp+25Ch+var_24C], 0D4DBED5Ah
xor ecx, ecx
lea eax, [esp+25Ch+var_244]
loc_0_420A59:
mov ebx, [eax]
xor ebx, 83AC00DEh
cmp edx, ebx
jz short is_Blacklisted
add eax, 8
inc ecx
cmp ecx, 49h
jl short loc_0_420A59
xor ecx, ecx
lea eax, [esp+25Ch+var_24C]
loc_0_420A74:
mov esi, [eax]
xor esi, 83AC00DEh
cmp edx, esi
jz short loc_0_420A8F
add eax, 8
inc ecx
cmp ecx, 1
jl short loc_0_420A74
loc_0_420A8F:
pop edi
pop esi
pop ebx
add esp, 250h
xor eax, eax
retn
is_Blacklisted:
pop edi
pop esi
pop ebx
add esp, 250h
mov eax, 1
retn
CDRWin_Blacklisted_Routine endp
; ripped from DAO V3.7F, still up-to-date with DAO V3.8B July
DAO_Blacklisted_Routine proc
var_230 = dword ptr -230h
var_22C = dword ptr -22Ch
var_228 = dword ptr -228h
var_224 = dword ptr -224h
var_220 = dword ptr -220h
var_21C = dword ptr -21Ch
var_218 = dword ptr -218h
var_214 = dword ptr -214h
var_210 = dword ptr -210h
var_20C = dword ptr -20Ch
var_208 = dword ptr -208h
var_204 = dword ptr -204h
var_200 = dword ptr -200h
var_1FC = dword ptr -1FCh
var_1F8 = dword ptr -1F8h
var_1F4 = dword ptr -1F4h
var_1F0 = dword ptr -1F0h
var_1EC = dword ptr -1ECh
var_1E8 = dword ptr -1E8h
var_1E4 = dword ptr -1E4h
var_1E0 = dword ptr -1E0h
var_1DC = dword ptr -1DCh
var_1D8 = dword ptr -1D8h
var_1D4 = dword ptr -1D4h
var_1D0 = dword ptr -1D0h
var_1CC = dword ptr -1CCh
var_1C8 = dword ptr -1C8h
var_1C4 = dword ptr -1C4h
var_1C0 = dword ptr -1C0h
var_1BC = dword ptr -1BCh
var_1B8 = dword ptr -1B8h
var_1B4 = dword ptr -1B4h
var_1B0 = dword ptr -1B0h
var_1AC = dword ptr -1ACh
var_1A8 = dword ptr -1A8h
var_1A4 = dword ptr -1A4h
var_1A0 = dword ptr -1A0h
var_19C = dword ptr -19Ch
var_198 = dword ptr -198h
var_194 = dword ptr -194h
var_190 = dword ptr -190h
var_18C = dword ptr -18Ch
var_188 = dword ptr -188h
var_184 = dword ptr -184h
var_180 = dword ptr -180h
var_17C = dword ptr -17Ch
var_178 = dword ptr -178h
var_174 = dword ptr -174h
var_170 = dword ptr -170h
var_16C = dword ptr -16Ch
var_168 = dword ptr -168h
var_164 = dword ptr -164h
var_160 = dword ptr -160h
var_15C = dword ptr -15Ch
var_158 = dword ptr -158h
var_154 = dword ptr -154h
var_150 = dword ptr -150h
var_14C = dword ptr -14Ch
var_148 = dword ptr -148h
var_144 = dword ptr -144h
var_140 = dword ptr -140h
var_13C = dword ptr -13Ch
var_138 = dword ptr -138h
var_134 = dword ptr -134h
var_130 = dword ptr -130h
var_12C = dword ptr -12Ch
var_128 = dword ptr -128h
var_124 = dword ptr -124h
var_120 = dword ptr -120h
var_11C = dword ptr -11Ch
var_118 = dword ptr -118h
var_114 = dword ptr -114h
var_110 = dword ptr -110h
var_10C = dword ptr -10Ch
var_108 = dword ptr -108h
var_104 = dword ptr -104h
var_100 = dword ptr -100h
var_FC = dword ptr -0FCh
var_F8 = dword ptr -0F8h
var_F4 = dword ptr -0F4h
var_F0 = dword ptr -0F0h
var_EC = dword ptr -0ECh
var_E8 = dword ptr -0E8h
var_E4 = dword ptr -0E4h
var_E0 = dword ptr -0E0h
var_DC = dword ptr -0DCh
var_D8 = dword ptr -0D8h
var_D4 = dword ptr -0D4h
var_D0 = dword ptr -0D0h
var_CC = dword ptr -0CCh
var_C8 = dword ptr -0C8h
var_C4 = dword ptr -0C4h
var_C0 = dword ptr -0C0h
var_BC = dword ptr -0BCh
var_B8 = dword ptr -0B8h
var_B4 = dword ptr -0B4h
var_B0 = dword ptr -0B0h
var_AC = dword ptr -0ACh
var_A8 = dword ptr -0A8h
var_A4 = dword ptr -0A4h
var_A0 = dword ptr -0A0h
var_9C = dword ptr -9Ch
var_98 = dword ptr -98h
var_94 = dword ptr -94h
var_90 = dword ptr -90h
var_8C = dword ptr -8Ch
var_88 = dword ptr -88h
var_84 = dword ptr -84h
var_80 = dword ptr -80h
var_7C = dword ptr -7Ch
var_78 = dword ptr -78h
var_74 = dword ptr -74h
var_70 = dword ptr -70h
var_6C = dword ptr -6Ch
var_68 = dword ptr -68h
var_64 = dword ptr -64h
var_60 = dword ptr -60h
var_5C = dword ptr -5Ch
var_58 = dword ptr -58h
var_54 = dword ptr -54h
var_50 = dword ptr -50h
var_4C = dword ptr -4Ch
var_48 = dword ptr -48h
var_44 = dword ptr -44h
var_40 = dword ptr -40h
var_3C = dword ptr -3Ch
var_38 = dword ptr -38h
var_34 = dword ptr -34h
var_30 = dword ptr -30h
var_2C = dword ptr -2Ch
var_28 = dword ptr -28h
var_24 = dword ptr -24h
var_20 = dword ptr -20h
var_1C = dword ptr -1Ch
var_18 = dword ptr -18h
var_14 = dword ptr -14h
var_10 = dword ptr -10h
var_C = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
arg_0 = dword ptr 4
sub esp, 230h
push ebx
mov ecx, 8FAAE28Dh
mov eax, 5824DB27h
push esi
push edi
mov [esp+23Ch+var_228], 0AD3280EBh
mov [esp+23Ch+var_224], 458DF21Bh
mov [esp+23Ch+var_220], 4A657872h
mov [esp+23Ch+var_21C], 1F66689Eh
mov [esp+23Ch+var_218], 6A1124FAh
mov [esp+23Ch+var_214], 0CED3C7D2h
mov [esp+23Ch+var_210], 3561AF16h
mov [esp+23Ch+var_20C], 0CD958380h
mov [esp+23Ch+var_208], 0CB3A0906h
mov [esp+23Ch+var_204], 3E850F29h
mov [esp+23Ch+var_200], 7BA2EF91h
mov [esp+23Ch+var_1FC], 462DE239h
mov [esp+23Ch+var_1F8], 0F7C4062Eh
mov [esp+23Ch+var_1F4], 620C02A4h
mov [esp+23Ch+var_1F0], 7795D377h
mov [esp+23Ch+var_1EC], 96EEA896h
mov [esp+23Ch+var_1E8], 6F4066AFh
mov [esp+23Ch+var_1E4], 0BEF1D909h
mov [esp+23Ch+var_1E0], 0E8C59982h
mov [esp+23Ch+var_1DC], 3457E6EEh
mov [esp+23Ch+var_1D8], 67AF1001h
mov [esp+23Ch+var_1D4], 0EB116C7Ch
mov [esp+23Ch+var_1D0], 2198D9BAh
mov [esp+23Ch+var_1CC], 385BF874h
mov [esp+23Ch+var_1C8], 0FE986859h
mov [esp+23Ch+var_1C4], 3B6D52D9h
mov [esp+23Ch+var_1C0], 49A7AEADh
mov [esp+23Ch+var_1BC], 0FD91289Fh
mov [esp+23Ch+var_1B8], 0AB4AD932h
mov [esp+23Ch+var_1B4], 8F98BDD6h
mov [esp+23Ch+var_1B0], 0D5229D55h
mov [esp+23Ch+var_1AC], 2D8BA486h
mov [esp+23Ch+var_1A8], 3DBA6ADDh
mov [esp+23Ch+var_1A4], 0D974FF42h
mov [esp+23Ch+var_1A0], 8CACEA8Ch
mov [esp+23Ch+var_19C], 0B7490FB7h
mov [esp+23Ch+var_198], 8A694F3h
mov [esp+23Ch+var_194], 0E3CFB569h
mov [esp+23Ch+var_190], 6F059E22h
mov [esp+23Ch+var_18C], 43170B09h
mov [esp+23Ch+var_188], 7291CFD1h
mov [esp+23Ch+var_184], 0B4E34F22h
mov [esp+23Ch+var_180], ecx
mov [esp+23Ch+var_17C], eax
mov [esp+23Ch+var_178], 0F5B768A5h
mov [esp+23Ch+var_174], 5EFB89ABh
mov [esp+23Ch+var_170], 0C3BAC968h
mov [esp+23Ch+var_16C], 0C91D33B8h
mov [esp+23Ch+var_168], 93077C90h
mov [esp+23Ch+var_164], 0EC8D17FDh
mov [esp+23Ch+var_160], 7DE1B0EFh
mov [esp+23Ch+var_15C], 0AD43C308h
mov [esp+23Ch+var_158], 7BF4399Fh
mov [esp+23Ch+var_154], 0D2953D96h
mov [esp+23Ch+var_150], 0FDCB1E8Fh
mov [esp+23Ch+var_14C], 554D61A9h
mov [esp+23Ch+var_148], 0C54547E7h
mov [esp+23Ch+var_144], 541D7357h
mov [esp+23Ch+var_140], 9F0F8360h
mov [esp+23Ch+var_13C], 0DF4E9ED3h
mov [esp+23Ch+var_138], 1FE15A53h
mov [esp+23Ch+var_134], 7EA7496Eh
mov [esp+23Ch+var_130], 2BE4B685h
mov [esp+23Ch+var_12C], 3C5404B8h
mov [esp+23Ch+var_128], 929C70ECh
mov [esp+23Ch+var_124], 0D5CCE79h
mov [esp+23Ch+var_120], 434D7C03h
mov [esp+23Ch+var_11C], 0C1EB66EDh
mov [esp+23Ch+var_118], 4E1C0C54h
mov [esp+23Ch+var_114], 0EE8C7D3Eh
mov [esp+23Ch+var_110], 2DE36ACDh
mov [esp+23Ch+var_10C], 0E7AE3427h
mov [esp+23Ch+var_108], 5FCF2E35h
mov [esp+23Ch+var_104], 77F7BB15h
mov [esp+23Ch+var_100], 45B3A955h
mov [esp+23Ch+var_FC], 9817F3FDh
mov esi, [esp+23Ch+arg_0]
mov [esp+23Ch+var_10], ecx
mov [esp+23Ch+var_C], eax
xor edi, edi
mov edx, [esi]
mov [esp+23Ch+var_F8], 69BE9E19h
mov [esp+23Ch+var_F4], 0A725B763h
mov [esp+23Ch+var_F0], 7DAC0BF4h
mov [esp+23Ch+var_EC], 4B39EDBAh
mov [esp+23Ch+var_E8], 8DFF7CCDh
mov [esp+23Ch+var_E4], 9698AF4h
mov [esp+23Ch+var_E0], 63791669h
mov [esp+23Ch+var_DC], 5E3F9025h
mov [esp+23Ch+var_D8], 0DA7AF2DBh
mov [esp+23Ch+var_D4], 8D93C5A1h
mov [esp+23Ch+var_D0], 2A084E2Ah
mov [esp+23Ch+var_CC], 0C06422C0h
mov [esp+23Ch+var_C8], 0F6B21957h
mov [esp+23Ch+var_C4], 0CC7B4373h
mov [esp+23Ch+var_C0], 0C801F2A2h
mov [esp+23Ch+var_BC], 9404AB4Fh
mov [esp+23Ch+var_B8], 0DDEBAA36h
mov [esp+23Ch+var_B4], 3113FA0Ch
mov [esp+23Ch+var_B0], 19EF073Eh
mov [esp+23Ch+var_AC], 0E8E64EDAh
mov [esp+23Ch+var_A8], 0F1503677h
mov [esp+23Ch+var_A4], 87EA384Ah
mov [esp+23Ch+var_A0], 2AB988EAh
mov [esp+23Ch+var_9C], 200C6366h
mov [esp+23Ch+var_98], 3F5F193Fh
mov [esp+23Ch+var_94], 10460010h
mov [esp+23Ch+var_90], 7CE731C8h
mov [esp+23Ch+var_8C], 234699F4h
mov [esp+23Ch+var_88], 2507BE73h
mov [esp+23Ch+var_84], 0FF33B001h
mov [esp+23Ch+var_80], 0E9B104C5h
mov [esp+23Ch+var_7C], 6DE5A180h
mov [esp+23Ch+var_78], 4E059EBh
mov [esp+23Ch+var_74], 6CBA3F22h
mov [esp+23Ch+var_70], 78B3F578h
mov [esp+23Ch+var_6C], 0EC0C4AECh
mov [esp+23Ch+var_68], 46D86AE0h
mov [esp+23Ch+var_64], 70203C8Ah
mov [esp+23Ch+var_60], 0F9012CE2h
mov [esp+23Ch+var_5C], 0B350F780h
mov [esp+23Ch+var_58], 417CD1D8h
mov [esp+23Ch+var_54], 8E46C2A9h
mov [esp+23Ch+var_50], 0B6287B93h
mov [esp+23Ch+var_4C], 4CCA58E4h
mov [esp+23Ch+var_48], 0AA7458F8h
mov [esp+23Ch+var_44], 709957DCh
mov [esp+23Ch+var_40], 3E4D139Ch
mov [esp+23Ch+var_3C], 0AAF26EB1h
mov [esp+23Ch+var_38], 0ABE40276h
mov [esp+23Ch+var_34], 0B33B56C4h
mov [esp+23Ch+var_30], 0CF6F9198h
mov [esp+23Ch+var_2C], 0DA96DDCAh
mov [esp+23Ch+var_28], 0C659FB5Ch
mov [esp+23Ch+var_24], 0C11C4298h
mov [esp+23Ch+var_20], 9AB67D08h
mov [esp+23Ch+var_1C], 0DA214CC6h
mov [esp+23Ch+var_18], 10AD976h
mov [esp+23Ch+var_14], 0AB61D800h
mov [esp+23Ch+var_8], 21D293DCh
mov [esp+23Ch+var_4], 43FEAEE4h
mov [esp+23Ch+var_230], 6DD88373h
mov [esp+23Ch+var_22C], 0DE05D90Dh
xor ecx, ecx
lea eax, [esp+23Ch+var_228]
loc_0_402A01:
mov ebx, [eax]
xor ebx, 89723489h
cmp edx, ebx
jz short loc_0_402A41
add eax, 8
inc ecx
cmp ecx, 45h
jl short loc_0_402A01
xor ecx, ecx
lea eax, [esp+23Ch+var_230]
loc_0_402A1C:
mov esi, [eax]
xor esi, 89723489h
cmp edx, esi
jz short loc_0_402A37
add eax, 8
inc ecx
cmp ecx, 1
jl short loc_0_402A1C
loc_0_402A37:
pop edi
pop esi
pop ebx
xor eax, eax
add esp, 230h
retn
loc_0_402A41:
pop edi
pop esi
pop ebx
mov eax, 1
add esp, 230h
retn
DAO_Blacklisted_Routine endp
end start
Source/notes:
FAQ_TEXT label byte
db 0dh,0ah
db " -= CDRWin/DAO V3.8 Open-Source Keymaker V2.0 -
4;,0dh,0ah
db " Small FAQ for People who do Care =-",
48;dh,0ah
db 0dh,0ah
db "[I] What is this all about?",0dh,0ah
db 0dh,0ah
db "Tired and Sick of burning coasters with Goldenhawk's Cdrwin?",
48;dh,0ah
db "Before blaming your girlfriend, see why it's in most cases NOT her f
ault, nor the",0dh,0ah
db "fault of your cdr-writer, nor of Cdrwin itself, but simply a consequence
of using",0dh,0ah
db "a bad key or crack.",0dh,0ah
db 0dh,0ah
db "[II] Why should I care?",0dh,0ah
db 0dh,0ah
db "Because you want to save your hard-earned bucks by avoiding future coast
ers.",0dh,0ah
db 0dh,0ah
db "[III] I'm convinced, but how do I use Cdrwin without adding to my co
aster-",0dh,0ah
db "collection?",0dh,0ah
db 0dh,0ah
db "It's simple. Don't use any keymaker/crack that is not written by
me :)",0dh,0ah
db 0dh,0ah
db "[IV] Unfortunatly, it's too late - I've already used a bad crack
. What now?",0dh,0ah
db 0dh,0ah
db "Find the person responsible for the bad crack and make him eat all your
coasters.",0dh,0ah
db "Make him suffer real hard for his stupidity. Nowadays the world has seen
too many",0dh,0ah
db "so-called crackers who want to cover themselves in unjustified glory.
4;,0dh,0ah
db 0dh,0ah
db "[V] How do I use your keymaker?",0dh,0ah
db 0dh,0ah
db "Is this the 1st time you run Cdrwin? If yes, then use my keymaker an
d enter your",0dh,0ah
db "Name/Company to receive a valid Unlock/Check-Key. You can also manipulat
e the",0dh,0ah
db "year-range within which your key will be valid. Note that the time is no
t",0dh,0ah
db "dependent on your system clock, but on the build version of Cdrwin (i.e.
Cdrwin",0dh,0ah
db "V3.8a was released 3/2000, so you should make sure that your
key is valid within",0dh,0ah
db "that date).",0dh,0ah
db 0dh,0ah
db "If you've already used Cdrwin and even run a crack, then there are t
wo possible",0dh,0ah
db "ways to continue. A) Did you apply a crackpatch? If yes, sorry for you,
but you",0dh,0ah
db "have to reinstall Cdrwin, because there is no way of telling what bytes
the",0dh,0ah
db "cracker has modified. B) Did you run another keymaker? If yes, then you&
#39;ll want",0dh,0ah
db "to know if the key you've used was OK and didn't cause any coast
ers. In order to",0dh,0ah
db "do that, click on `Get information from cdrwin.dat` and point to your cd
rwin path",0dh,0ah
db "where you should find the file cdrwin.dat. Latter contains the keycode
34;,0dh,0ah
db "information. If you receive no error message, then you are fine and you
can",0dh,0ah
db "continue using that keycode.",0dh,0ah
db "If, however, you receive a message saying that the keycode is not 1&
#48;0%, you've",0dh,0ah
db "the option to fix the key. I can only strongly suggest that you do
so....",0dh,0ah
db 0dh,0ah
db "[VI] I have an original key, but it expired. Can you make it valid
again?",0dh,0ah
db 0dh,0ah
db "Yes, using my keymaker you can bring your old key back to life. To do so
, first",0dh,0ah
db "click on `don't randomize`. Then click on `Get information from cdrw
in.dat` and",0dh,0ah
db "point to your cdrwin path where you should find the file cdrwin.dat. Lat
ter",0dh,0ah
db "contains the keycode infromation of your original key. When done, you ca
n change",0dh,0ah
db "the expiration range. My keymaker will automatically calculate the
new key.",0dh,0ah
db 0dh,0ah
db "[VII] I have no girlfriend and need something else to get laid. Can you
give me",0dh,0ah
db "more technical information about how the keyscheme of Cdrwin works?"
,0dh,0ah
db 0dh,0ah
db "Example:",0dh,0ah
db "Name: Raymond E. Feist",0dh,0ah
db "Company: Riftwar",0dh,0ah
db "Unlock Key: 022BD9CE-8E8759DF-1E0A95D8-91
;7C62AC",0dh,0ah
db "Check Key: 9357BB62-8CAC8011-908DCC07-8F76F
774",0dh,0ah
db 0dh,0ah
db "Cdrwin uses an Unlock Key and a Check Key. The latter is trivial as it i
s only",0dh,0ah
db "used as a checksum check (hence the name!) that you've entered the U
nlock Key",0dh,0ah
db "correctly.",0dh,0ah
db 0dh,0ah
db "The Unlock Key consists of -4- 32bit values. Use the following informati
on in",0dh,0ah
db "addition to the keymaker source to get the idea.",0dh,0ah
db 0dh,0ah
db "1) 022BD9CE-8E8759DF-1E0A95D8-917C62
AC",0dh,0ah
db 0dh,0ah
db " Checksum of Name/Company. Further, using this 32bit value, Cdrwin"
;,0dh,0ah
db " differentiates between unlock codes for Cdrwin and unlock codes for D
AO",0dh,0ah
db " (each app uses an unique checksum-table). At last, the value is also
used to",0dh,0ah
db " determine if your key is blacklisted or not.",0dh,0ah
db 0dh,0ah
db "2) 022BD9CE-8E8759DF-1E0A95D8-917C62AC
34;,0dh,0ah
db 0dh,0ah
db " Encoded expiration information.",0dh,0ah
db 0dh,0ah
db "3) 022BD9CE-8E8759DF-1E0A95D8-917C62AC
34;,0dh,0ah
db 0dh,0ah
db " Second Checksum, invoked after Cdrwin is started for the first time.
If",0dh,0ah
db " invalid, anti-piracy message and exit.",0dh,0ah
db 0dh,0ah
db "4) 022BD9CE-8E8759DF-1E0A95D8-917C62AC
34;,0dh,0ah
db 0dh,0ah
db " Hidden Checksum, during cd-burn process. If invalid, ... another item
for",0dh,0ah
db " your coaster collection.",0dh,0ah
db 0dh,0ah
db "5) 022BD9CE-8E8759DF-1E0A95D8-917C62AC
34;,0dh,0ah
db 0dh,0ah
db " Hidden Checksum, same as in 4).",0dh,0ah
db 0dh,0ah
db "6) 022BD9CE-8E8759DF-1E0A95D8-917C62AC
34;,0dh,0ah
db 0dh,0ah
db " ! IMPORANT !",0dh,0ah
db " Here is the answer why even my keymaker does not create keys that are
100%",0dh,0ah
db " identical with keys which have been legally purchased.",0dh,&
#48;ah
db 0dh,0ah
db " The two 16bit values are not yet (meaningfully) checked as of Cdr
win V3.8b.",0dh,0ah
db " This doesn't mean that my keymaker is not 100% workin
g. It IS 100% for the",0dh,0ah
db " current version of Cdrwin and most probable for future versions as we
ll,",0dh,0ah
db " UNTIL the programmers at Goldenhawk decide to implent that check. And
until",0dh,0ah
db " then, I'll make sure that with each new version of Cdrwin my keym
aker",0dh,0ah
db " doesn't miss that check. Fair enough?",0dh,0ah
db " For the smart ones among you: This is were the mysterious `don't
randomize`",0dh,0ah
db " comes from. It simply prevents my keymaker to insert two random 1
6bit values",0dh,0ah
db " here. This is especially important when you want to change the ex
;piration of",0dh,0ah
db " your real key, which has of course, the CORRECT two 16bit values.
We don't",0dh,0ah
db " want to overwrite those with random ones... :)",0dh,0ah
db 0dh,0ah
db " TO ALL THOSE !%/$) IDIOTS WHO STILL CLAIM THAT THEY'RE HAVING"
;,0dh,0ah
db " PROBLEMS USING MY KEYMAKER:",0dh,0ah
db 0dh,0ah
db " FOAD! You are simply wasting my time and the time of others with your
",0dh,0ah
db " unqualified rubbish. If you think Cdrwin doesn't work probably af
ter you've",0dh,0ah
db " used my keymaker, then blame it on someone else. Go and blame your g/
f.",0dh,0ah
db " Or if you feel any safer, use one of the many patches that're flo
ating around,",0dh,0ah
db " which claim that they are safer to use than a key code. Believe whate
ver you",0dh,0ah
db " want to believe. History has shown us the strength behind ignorance.&
#34;,0dh,0ah
db 0dh,0ah
db "[VIII] Fine, I see that you are convinced of your own work so I'll u
se it, too.",0dh,0ah
db "Last question: With your ego, do you still have any friends left?",&
#48;dh,0ah
db 0dh,0ah
db "I wouldn't go that far to call anyone my friend :> Yet, greeting
s to the following",0dh,0ah
db "people :)",0dh,0ah
db 0dh,0ah
db " - everyone in X-FORCE. After years of fun & sorrow, I still love y
ou!",0dh,0ah
db 0dh,0ah
db " - the first generation of UCF - when cracking had still some style
.",0dh,0ah
db " Greetings at this place especially to Marquis de Soiree, whom I
consider",0dh,0ah
db " my one and only tutor.",0dh,0ah
db 0dh,0ah
db " - Random, for he is the sickest of all people I know :) Without hi
m,",0dh,0ah
db " things are just half as much fun.",0dh,0ah
db 0dh,0ah
db " - everyone in UNION and of course every proud #RC member :)",&
#48;dh,0ah
db " Especially to Devil, for the often philosophical debates; to Rat
so, to",0dh,0ah
db " Drone, to ACP, to G-Rom, to Halvar, to Dezzy.",0dh,0
ah
db 0dh,0ah
db " - every op in #WA; especially to Hugo for the endless debates why
M$ is",0dh,0ah
db " evil or not :)",0dh,0ah
db 0dh,0ah
db " - everyone in COUNCIL.",0dh,0ah
db 0dh,0ah
db "The Riddler / X-FORCE / UNION.",0dh,0ah
db 0
Source/RESOURCE.H:
/* ------------------- Resource Compiler Header File -------------------- */
/* This file supplies the constants used by the resource compiler for
various 32 bit resource components in .RC script files. */
/* ---------------------------------------------------------------------- */
#define WM_DDE_FIRST 0x03E0
#define WM_DDE_INITIATE (WM_DDE_FIRST)
#define WM_DDE_TERMINATE (WM_DDE_FIRST+1)
#define WM_DDE_ADVISE (WM_DDE_FIRST+2)
#define WM_DDE_UNADVISE (WM_DDE_FIRST+3)
#define WM_DDE_ACK (WM_DDE_FIRST+4)
#define WM_DDE_DATA (WM_DDE_FIRST+5)
#define WM_DDE_REQUEST (WM_DDE_FIRST+6)
#define WM_DDE_POKE (WM_DDE_FIRST+7)
#define WM_DDE_EXECUTE (WM_DDE_FIRST+8)
#define WM_DDE_LAST (WM_DDE_FIRST+8)
#define HDS_HORZ 0x0000
#define HDS_BUTTONS 0x0002
#define HDS_HOTTRACK 0x0004
#define HDS_HIDDEN 0x0008
#define HDS_DRAGDROP 0x0040
#define HDS_FULLDRAG 0x0080
#define RBS_TOOLTIPS 0x0100
#define RBS_VARHEIGHT 0x0200
#define RBS_BANDBORDERS 0x0400
#define RBS_FIXEDORDER 0x0800
#define RBS_REGISTERDROP 0x1000
#define RBS_AUTOSIZE 0x2000
#define RBS_VERTICALGRIPPER 0x4000
#define RBS_DBLCLKTOGGLE 0x8000
#define TTS_ALWAYSTIP 0x01
#define TTS_NOPREFIX 0x02
#define SBARS_SIZEGRIP 0x0100
#define TBS_AUTOTICKS 0x0001
#define TBS_VERT 0x0002
#define TBS_HORZ 0x0000
#define TBS_TOP 0x0004
#define TBS_BOTTOM 0x0000
#define TBS_LEFT 0x0004
#define TBS_RIGHT 0x0000
#define TBS_BOTH 0x0008
#define TBS_NOTICKS 0x0010
#define TBS_ENABLESELRANGE 0x0020
#define TBS_FIXEDLENGTH 0x0040
#define TBS_NOTHUMB 0x0080
#define TBS_TOOLTIPS 0x0100
#define UDS_WRAP 0x0001
#define UDS_SETBUDDYINT 0x0002
#define UDS_ALIGNRIGHT 0x0004
#define UDS_ALIGNLEFT 0x0008
#define UDS_AUTOBUDDY 0x0010
#define UDS_ARROWKEYS 0x0020
#define UDS_HORZ 0x0040
#define UDS_NOTHOUSANDS 0x0080
#define UDS_HOTTRACK 0x0100
#define PBS_SMOOTH 0x01
#define PBS_VERTICAL 0x04
/* --------------------- Common Control Styles ------------------------- */
#define CCS_TOP 0x000000
8;1L
#define CCS_NOMOVEY 0x000000
8;2L
#define CCS_BOTTOM 0x000000
8;3L
#define CCS_NORESIZE 0x000000
8;4L
#define CCS_NOPARENTALIGN 0x000000
8;8L
#define CCS_ADJUSTABLE 0x0000002
48;L
#define CCS_NODIVIDER 0x0000004
48;L
#define CCS_VERT 0x0000008
48;L
#define CCS_LEFT (CCS_VERT | CCS_TOP)
#define CCS_RIGHT (CCS_VERT | CCS_BOTTOM)
#define CCS_NOMOVEX (CCS_VERT | CCS_NOMOVEY)
#define LVS_ICON 0x0000
#define LVS_REPORT 0x0001
#define LVS_SMALLICON 0x0002
#define LVS_LIST 0x0003
#define LVS_TYPEMASK 0x0003
#define LVS_SINGLESEL 0x0004
#define LVS_SHOWSELALWAYS 0x0008
#define LVS_SORTASCENDING 0x0010
#define LVS_SORTDESCENDING 0x0020
#define LVS_SHAREIMAGELISTS 0x0040
#define LVS_NOLABELWRAP 0x0080
#define LVS_AUTOARRANGE 0x0100
#define LVS_EDITLABELS 0x0200
#define LVS_OWNERDATA 0x1000
#define LVS_NOSCROLL 0x2000
#define LVS_TYPESTYLEMASK 0xfc00
#define LVS_ALIGNTOP 0x0000
#define LVS_ALIGNLEFT 0x0800
#define LVS_ALIGNMASK 0x0c00
#define LVS_OWNERDRAWFIXED 0x0400
#define LVS_NOCOLUMNHEADER 0x4000
#define LVS_NOSORTHEADER 0x8000
#define TVS_HASBUTTONS 0x0001
#define TVS_HASLINES 0x0002
#define TVS_LINESATROOT 0x0004
#define TVS_EDITLABELS 0x0008
#define TVS_DISABLEDRAGDROP 0x0010
#define TVS_SHOWSELALWAYS 0x0020
#define TVS_RTLREADING 0x0040
#define TVS_NOTOOLTIPS 0x0080
#define TVS_CHECKBOXES 0x0100
#define TVS_TRACKSELECT 0x0200
#define TVS_SINGLEEXPAND 0x0400
#define TVS_INFOTIP 0x0800
#define TVS_FULLROWSELECT 0x1000
#define TVS_NOSCROLL 0x2000
#define TVS_NONEVENHEIGHT 0x4000
#define TCS_SCROLLOPPOSITE 0x0001
#define TCS_BOTTOM 0x0002
#define TCS_RIGHT 0x0002
#define TCS_MULTISELECT 0x0004
#define TCS_FLATBUTTONS 0x0008
#define TCS_FORCEICONLEFT 0x0010
#define TCS_FORCELABELLEFT 0x0020
#define TCS_HOTTRACK 0x0040
#define TCS_VERTICAL 0x0080
#define TCS_TABS 0x0000
#define TCS_BUTTONS 0x0100
#define TCS_SINGLELINE 0x0000
#define TCS_MULTILINE 0x0200
#define TCS_RIGHTJUSTIFY 0x0000
#define TCS_FIXEDWIDTH 0x0400
#define TCS_RAGGEDRIGHT 0x0800
#define TCS_FOCUSONBUTTONDOWN 0x1000
#define TCS_OWNERDRAWFIXED 0x2000
#define TCS_TOOLTIPS 0x4000
#define TCS_FOCUSNEVER 0x8000
#define ACS_CENTER 0x0001
#define ACS_TRANSPARENT 0x0002
#define ACS_AUTOPLAY 0x0004
#define ACS_TIMER 0x0008
#define DTS_UPDOWN 0x0001
#define DTS_SHOWNONE 0x0002
#define DTS_SHORTDATEFORMAT 0x0000
#define DTS_LONGDATEFORMAT 0x0004
#define DTS_TIMEFORMAT 0x0009
#define DTS_APPCANPARSE 0x0010
#define DTS_RIGHTALIGN 0x0020
#define PGS_VERT 0x000000
8;0
#define PGS_HORZ 0x000000
8;1
#define PGS_AUTOSCROLL 0x000000
8;2
#define PGS_DRAGNDROP 0x000000
8;4
/* style definition */
#define NFS_EDIT 0x0001
#define NFS_STATIC 0x0002
#define NFS_LISTCOMBO 0x0004
#define NFS_BUTTON 0x0008
#define NFS_ALL 0x0010
/* ShowWindow() Commands */
#define SW_HIDE 0
#define SW_SHOWNORMAL 1
#define SW_NORMAL 1
#define SW_SHOWMINIMIZED 2
#define SW_SHOWMAXIMIZED 3
#define SW_MAXIMIZE 3
#define SW_SHOWNOACTIVATE 4
#define SW_SHOW 5
#define SW_MINIMIZE 6
#define SW_SHOWMINNOACTIVE 7
#define SW_SHOWNA 8
#define SW_RESTORE 9
#define SW_SHOWDEFAULT 10
#define SW_FORCEMINIMIZE 11
#define SW_MAX 11
/*
* Old ShowWindow() Commands
*/
#define HIDE_WINDOW 0
#define SHOW_OPENWINDOW 1
#define SHOW_ICONWINDOW 2
#define SHOW_FULLSCREEN 3
#define SHOW_OPENNOACTIVATE 4
/*
* Identifiers for the WM_SHOWWINDOW message
*/
#define SW_PARENTCLOSING 1
#define SW_OTHERZOOM 2
#define SW_PARENTOPENING 3
#define SW_OTHERUNZOOM 4
/*
* Virtual Keys, Standard Set
*/
#define VK_LBUTTON 0x01
#define VK_RBUTTON 0x02
#define VK_CANCEL 0x03
#define VK_MBUTTON 0x04
#define VK_BACK 0x08
#define VK_TAB 0x09
#define VK_CLEAR 0x0C
#define VK_RETURN 0x0D
#define VK_SHIFT 0x10
#define VK_CONTROL 0x11
#define VK_MENU 0x12
#define VK_PAUSE 0x13
#define VK_CAPITAL 0x14
#define VK_KANA 0x15
#define VK_HANGEUL 0x15
#define VK_HANGUL 0x15
#define VK_JUNJA 0x17
#define VK_FINAL 0x18
#define VK_HANJA 0x19
#define VK_KANJI 0x19
#define VK_ESCAPE 0x1B
#define VK_CONVERT 0x1C
#define VK_NONCONVERT 0x1D
#define VK_ACCEPT 0x1E
#define VK_MODECHANGE 0x1F
#define VK_SPACE 0x20
#define VK_PRIOR 0x21
#define VK_NEXT 0x22
#define VK_END 0x23
#define VK_HOME 0x24
#define VK_LEFT 0x25
#define VK_UP 0x26
#define VK_RIGHT 0x27
#define VK_DOWN 0x28
#define VK_SELECT 0x29
#define VK_PRINT 0x2A
#define VK_EXECUTE 0x2B
#define VK_SNAPSHOT 0x2C
#define VK_INSERT 0x2D
#define VK_DELETE 0x2E
#define VK_HELP 0x2F
/* VK_0 thru VK_9 are the same as ASCII '0' thru '
57;' (0x30 - 0x39) */
/* VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0&
#120;41 - 0x5A) */
#define VK_LWIN 0x5B
#define VK_RWIN 0x5C
#define VK_APPS 0x5D
#define VK_NUMPAD0 0x60
#define VK_NUMPAD1 0x61
#define VK_NUMPAD2 0x62
#define VK_NUMPAD3 0x63
#define VK_NUMPAD4 0x64
#define VK_NUMPAD5 0x65
#define VK_NUMPAD6 0x66
#define VK_NUMPAD7 0x67
#define VK_NUMPAD8 0x68
#define VK_NUMPAD9 0x69
#define VK_MULTIPLY 0x6A
#define VK_ADD 0x6B
#define VK_SEPARATOR 0x6C
#define VK_SUBTRACT 0x6D
#define VK_DECIMAL 0x6E
#define VK_DIVIDE 0x6F
#define VK_F1 0x70
#define VK_F2 0x71
#define VK_F3 0x72
#define VK_F4 0x73
#define VK_F5 0x74
#define VK_F6 0x75
#define VK_F7 0x76
#define VK_F8 0x77
#define VK_F9 0x78
#define VK_F10 0x79
#define VK_F11 0x7A
#define VK_F12 0x7B
#define VK_F13 0x7C
#define VK_F14 0x7D
#define VK_F15 0x7E
#define VK_F16 0x7F
#define VK_F17 0x80
#define VK_F18 0x81
#define VK_F19 0x82
#define VK_F20 0x83
#define VK_F21 0x84
#define VK_F22 0x85
#define VK_F23 0x86
#define VK_F24 0x87
#define VK_NUMLOCK 0x90
#define VK_SCROLL 0x91
#define VK_LSHIFT 0xA0
#define VK_RSHIFT 0xA1
#define VK_LCONTROL 0xA2
#define VK_RCONTROL 0xA3
#define VK_LMENU 0xA4
#define VK_RMENU 0xA5
#define VK_PROCESSKEY 0xE5
#define VK_ATTN 0xF6
#define VK_CRSEL 0xF7
#define VK_EXSEL 0xF8
#define VK_EREOF 0xF9
#define VK_PLAY 0xFA
#define VK_ZOOM 0xFB
#define VK_NONAME 0xFC
#define VK_PA1 0xFD
#define VK_OEM_CLEAR 0xFE
#define WM_NULL 0x0000
#define WM_CREATE 0x0001
#define WM_DESTROY 0x0002
#define WM_MOVE 0x0003
#define WM_SIZE 0x0005
#define WM_ACTIVATE 0x0006
/* WM_ACTIVATE state values */
#define WA_INACTIVE 0
#define WA_ACTIVE 1
#define WA_CLICKACTIVE 2
#define WM_SETFOCUS 0x0007
#define WM_KILLFOCUS 0x0008
#define WM_ENABLE 0x000A
#define WM_SETREDRAW 0x000B
#define WM_SETTEXT 0x000C
#define WM_GETTEXT 0x000D
#define WM_GETTEXTLENGTH 0x000E
#define WM_PAINT 0x000F
#define WM_CLOSE 0x0010
#define WM_QUERYENDSESSION 0x0011
#define WM_QUIT 0x0012
#define WM_QUERYOPEN 0x0013
#define WM_ERASEBKGND 0x0014
#define WM_SYSCOLORCHANGE 0x0015
#define WM_ENDSESSION 0x0016
#define WM_SHOWWINDOW 0x0018
#define WM_WININICHANGE 0x001A
#define WM_SETTINGCHANGE WM_WININICHANGE
#define WM_DEVMODECHANGE 0x001B
#define WM_ACTIVATEAPP 0x001C
#define WM_FONTCHANGE 0x001D
#define WM_TIMECHANGE 0x001E
#define WM_CANCELMODE 0x001F
#define WM_SETCURSOR 0x0020
#define WM_MOUSEACTIVATE 0x0021
#define WM_CHILDACTIVATE 0x0022
#define WM_QUEUESYNC 0x0023
#define WM_GETMINMAXINFO 0x0024
#define WM_PAINTICON 0x0026
#define WM_ICONERASEBKGND 0x0027
#define WM_NEXTDLGCTL 0x0028
#define WM_SPOOLERSTATUS 0x002A
#define WM_DRAWITEM 0x002B
#define WM_MEASUREITEM 0x002C
#define WM_DELETEITEM 0x002D
#define WM_VKEYTOITEM 0x002E
#define WM_CHARTOITEM 0x002F
#define WM_SETFONT 0x0030
#define WM_GETFONT 0x0031
#define WM_SETHOTKEY 0x0032
#define WM_GETHOTKEY 0x0033
#define WM_QUERYDRAGICON 0x0037
#define WM_COMPAREITEM 0x0039
#define WM_GETOBJECT 0x003D
#define WM_COMPACTING 0x0041
#define WM_COMMNOTIFY 0x0044
#define WM_WINDOWPOSCHANGING 0x0046
#define WM_WINDOWPOSCHANGED 0x0047
#define WM_POWER 0x0048
/* wParam for WM_POWER window message and DRV_POWER driver notification */
#define PWR_OK 1
#define PWR_FAIL (-1)
#define PWR_SUSPENDREQUEST 1
#define PWR_SUSPENDRESUME 2
#define PWR_CRITICALRESUME 3
#define WM_COPYDATA 0x004A
#define WM_CANCELJOURNAL 0x004B
#define WM_NOTIFY 0x004E
#define WM_INPUTLANGCHANGEREQUEST 0x0050
#define WM_INPUTLANGCHANGE 0x0051
#define WM_TCARD 0x0052
#define WM_HELP 0x0053
#define WM_USERCHANGED 0x0054
#define WM_NOTIFYFORMAT 0x0055
#define NFR_ANSI 1
#define NFR_UNICODE 2
#define NF_QUERY 3
#define NF_REQUERY 4
#define WM_CONTEXTMENU 0x007B
#define WM_STYLECHANGING 0x007C
#define WM_STYLECHANGED 0x007D
#define WM_DISPLAYCHANGE 0x007E
#define WM_GETICON 0x007F
#define WM_SETICON 0x0080
#define WM_NCCREATE 0x0081
#define WM_NCDESTROY 0x0082
#define WM_NCCALCSIZE 0x0083
#define WM_NCHITTEST 0x0084
#define WM_NCPAINT 0x0085
#define WM_NCACTIVATE 0x0086
#define WM_GETDLGCODE 0x0087
#define WM_SYNCPAINT 0x0088
#define WM_NCMOUSEMOVE 0x00A0
#define WM_NCLBUTTONDOWN 0x00A1
#define WM_NCLBUTTONUP 0x00A2
#define WM_NCLBUTTONDBLCLK 0x00A3
#define WM_NCRBUTTONDOWN 0x00A4
#define WM_NCRBUTTONUP 0x00A5
#define WM_NCRBUTTONDBLCLK 0x00A6
#define WM_NCMBUTTONDOWN 0x00A7
#define WM_NCMBUTTONUP 0x00A8
#define WM_NCMBUTTONDBLCLK 0x00A9
#define WM_KEYFIRST 0x0100
#define WM_KEYDOWN 0x0100
#define WM_KEYUP 0x0101
#define WM_CHAR 0x0102
#define WM_DEADCHAR 0x0103
#define WM_SYSKEYDOWN 0x0104
#define WM_SYSKEYUP 0x0105
#define WM_SYSCHAR 0x0106
#define WM_SYSDEADCHAR 0x0107
#define WM_KEYLAST 0x0108
#define WM_IME_STARTCOMPOSITION 0x010D
#define WM_IME_ENDCOMPOSITION 0x010E
#define WM_IME_COMPOSITION 0x010F
#define WM_IME_KEYLAST 0x010F
#define WM_INITDIALOG 0x0110
#define WM_COMMAND 0x0111
#define WM_SYSCOMMAND 0x0112
#define WM_TIMER 0x0113
#define WM_HSCROLL 0x0114
#define WM_VSCROLL 0x0115
#define WM_INITMENU 0x0116
#define WM_INITMENUPOPUP 0x0117
#define WM_MENUSELECT 0x011F
#define WM_MENUCHAR 0x0120
#define WM_ENTERIDLE 0x0121
#define WM_MENURBUTTONUP 0x0122
#define WM_MENUDRAG 0x0123
#define WM_MENUGETOBJECT 0x0124
#define WM_UNINITMENUPOPUP 0x0125
#define WM_MENUCOMMAND 0 |