[Asm] 纯文本查看 复制代码
include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
include rsrc.inc
includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
include msvcrt.inc
includelib msvcrt.lib
DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
.const
IDD_MAIN equ 101
;#########################################################################
.data?
hInstance dd ?
dbName dw 100 dup (?) ;500个长
dbNameHex dw 200 dup (?)
dbKey dw 100 dup (?)
;#########################################################################
.data
dbKey2 dw 00030h, 00034h, 00037h, 00031h, 00032h, 0002dh, 00038h, 00038h, 00031h, 00033h, 00036h, 0002dh, 00035h, 00036h, 00034h, 00035h
dw 00035h, 0002dh, 00033h, 00036h, 00032h, 00036h, 00045h, 0002dh, 00036h, 00035h, 00044h, 00034h, 00045h
dw 0000h
dwKeyTable dw 00032h, 00033h, 00034h, 00035h, 00036h, 00037h, 00038h, 00039h, 00041h, 00042h, 00043h, 00044h, 00045h, 00046h, 00047h, 00048h
dw 0004ah, 0004bh, 0004ch, 0004dh, 0004eh, 00050h, 00051h, 00052h, 00053h, 00054h, 00055h, 00056h, 00057h, 00058h, 00059h, 0005ah
dwCheckSumTable dw 00000h, 0c0c1h, 0c181h, 00140h, 0c301h, 003c0h, 00280h, 0c241h, 0c601h, 006c0h, 00780h, 0c741h, 00500h, 0c5c1h, 0c481h, 00440h
dw 0cc01h, 00cc0h, 00d80h, 0cd41h, 00f00h, 0cfc1h, 0ce81h, 00e40h, 00a00h, 0cac1h, 0cb81h, 00b40h, 0c901h, 009c0h, 00880h, 0c841h
dw 0d801h, 018c0h, 01980h, 0d941h, 01b00h, 0dbc1h, 0da81h, 01a40h, 01e00h, 0dec1h, 0df81h, 01f40h, 0dd01h, 01dc0h, 01c80h, 0dc41h
dw 01400h, 0d4c1h, 0d581h, 01540h, 0d701h, 017c0h, 01680h, 0d641h, 0d201h, 012c0h, 01380h, 0d341h, 01100h, 0d1c1h, 0d081h, 01040h
dw 0f001h, 030c0h, 03180h, 0f141h, 03300h, 0f3c1h, 0f281h, 03240h, 03600h, 0f6c1h, 0f781h, 03740h, 0f501h, 035c0h, 03480h, 0f441h
dw 03c00h, 0fcc1h, 0fd81h, 03d40h, 0ff01h, 03fc0h, 03e80h, 0fe41h, 0fa01h, 03ac0h, 03b80h, 0fb41h, 03900h, 0f9c1h, 0f881h, 03840h
dw 02800h, 0e8c1h, 0e981h, 02940h, 0eb01h, 02bc0h, 02a80h, 0ea41h, 0ee01h, 02ec0h, 02f80h, 0ef41h, 02d00h, 0edc1h, 0ec81h, 02c40h
dw 0e401h, 024c0h, 02580h, 0e541h, 02700h, 0e7c1h, 0e681h, 02640h, 02200h, 0e2c1h, 0e381h, 02340h, 0e101h, 021c0h, 02080h, 0e041h
dw 0a001h, 060c0h, 06180h, 0a141h, 06300h, 0a3c1h, 0a281h, 06240h, 06600h, 0a6c1h, 0a781h, 06740h, 0a501h, 065c0h, 06480h, 0a441h
dw 06c00h, 0acc1h, 0ad81h, 06d40h, 0af01h, 06fc0h, 06e80h, 0ae41h, 0aa01h, 06ac0h, 06b80h, 0ab41h, 06900h, 0a9c1h, 0a881h, 06840h
dw 07800h, 0b8c1h, 0b981h, 07940h, 0bb01h, 07bc0h, 07a80h, 0ba41h, 0be01h, 07ec0h, 07f80h, 0bf41h, 07d00h, 0bdc1h, 0bc81h, 07c40h
dw 0b401h, 074c0h, 07580h, 0b541h, 07700h, 0b7c1h, 0b681h, 07640h, 07200h, 0b2c1h, 0b381h, 07340h, 0b101h, 071c0h, 07080h, 0b041h
dw 05000h, 090c1h, 09181h, 05140h, 09301h, 053c0h, 05280h, 09241h, 09601h, 056c0h, 05780h, 09741h, 05500h, 095c1h, 09481h, 05440h
dw 09c01h, 05cc0h, 05d80h, 09d41h, 05f00h, 09fc1h, 09e81h, 05e40h, 05a00h, 09ac1h, 09b81h, 05b40h, 09901h, 059c0h, 05880h, 09841h
dw 08801h, 048c0h, 04980h, 08941h, 04b00h, 08bc1h, 08a81h, 04a40h, 04e00h, 08ec1h, 08f81h, 04f40h, 08d01h, 04dc0h, 04c80h, 08c41h
dw 04400h, 084c1h, 08581h, 04540h, 08701h, 047c0h, 04680h, 08641h, 08201h, 042c0h, 04380h, 08341h, 04100h, 081c1h, 08081h, 04040h
.386
.model flat, stdcall ;32 bit memory model
option casemap :none ;case sensitive
include Keygen For Editplus V5.inc
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke InitCommonControls
invoke DialogBoxParam,hInstance,IDD_MAIN,NULL,addr DlgProc,NULL
invoke ExitProcess,0
;########################################################################
FindCharPos proc pChar:dword
mov ecx,pChar
xor eax,eax
.while eax<= sizeof dwKeyTable
.if cx == word ptr [eax*2+offset dwKeyTable]
.break
.endif
inc eax
.endw
.if ax==21h
xor ax,ax
.endif
ret
FindCharPos endp
TransFormKey proc uses esi ebx pKey:dword
mov esi,pKey
mov edx,esi
add edx,1dh*2
xor ebx,ebx
.while esi<= edx
mov ax,[esi]
.if ebx==5
xor ebx,ebx
.else
invoke FindCharPos,eax
sar eax,1
.if eax<0ah
add eax,30h
.else
add eax,37h
.endif
mov [esi],ax
inc ebx
.endif
add esi,2
.endw
ret
TransFormKey endp
TransFormKeyB proc uses esi ebx pKey:dword
mov esi,pKey
mov edx,esi
add edx,1dh*2
xor ebx,ebx
xor eax,eax
.while esi<= edx
mov ax,[esi]
.if ebx==5
xor ebx,ebx
.else
.if eax<3Ah
sub eax,30h
.else
sub eax,37h
.endif
sal eax,1
mov ax,word ptr [eax*2+offset dwKeyTable]
mov [esi],ax
inc ebx
.endif
add esi,2
.endw
ret
TransFormKeyB endp
UStr2HexStr proc dbUstr:DWORD,dbHexstr:DWORD, ddSize:DWORD
pushad
mov esi,dbUstr
mov edi,dbHexstr
xor ecx,ecx
.repeat
lodsw
mov bx,ax
rol bx,4
mov ax,bx
and eax,0fh
.if eax<0ah
add eax,30h
.else
add eax,37h
.endif
stosb
rol bx,4
mov ax,bx
and eax,0fh
.if al<0ah
add eax,30h
.else
add eax,37h
.endif
stosb
rol bx,4
mov ax,bx
and eax,0fh
.if eax<0ah
add eax,30h
.else
add eax,37h
.endif
stosb
rol bx,4
mov ax,bx
and eax,0fh
.if eax<0ah
add eax,30h
.else
add eax,37h
.endif
stosb
inc ecx
.until ecx==ddSize
xor al,al
stosb
popad
ret
UStr2HexStr endp
CheckSum:
MOV ECX,[ESP+8h]
MOV EAX,DWORD PTR [ESP+0Ch]
LEA EDX,DWORD PTR [ECX+EAX]
CMP ECX,EDX
JNB SHORT L004DEC04
MOV EAX,DWORD PTR [ESP+4h]
PUSH ESI
PUSH EDI
L004DEBE5:
MOVZX EDI,BYTE PTR [ECX]
MOVZX ESI,AL
SHR AX,8h
XOR ESI,EDI
XOR AX,WORD PTR [ESI*02h+offset dwCheckSumTable]
INC ECX
MOVZX EAX,AX
CMP ECX,EDX
JB SHORT L004DEBE5
POP EDI
POP ESI
RETN
L004DEC04:
MOV AX,WORD PTR [ESP+4h]
RETN
GenKey proc uses edi esi ebx
; invoke lstrlenW,offset dbName
; invoke CharUpperBuffW,offset dbName,eax
invoke lstrlenW,offset dbName
invoke UStr2HexStr,offset dbName,offset dbNameHex,eax
invoke lstrlen,offset dbNameHex
push eax
push offset dbNameHex
push 0
call CheckSum
add esp,0ch
mov bx,ax
rol bx,4
mov ax,bx
and ax,0fh
.if ax<0ah
add ax,30h
.else
add ax,37h
.endif
mov ecx,offset dbKey2+4
mov word ptr [ecx],ax
rol bx,4
mov ax,bx
and eax,0fh
.if al<0ah
add eax,30h
.else
add eax,37h
.endif
mov ecx,offset dbKey2+6
mov word ptr [ecx],ax
invoke lstrlenW,offset dbName
xor ecx,ecx
xor esi,esi
.while ecx<eax
movzx ebx,word ptr [ecx*2+offset dbName]
add esi,ebx
inc ecx
.endw
inc esi
mov ecx,esi
LEA ECX,DWORD PTR DS:[ECX+ECX*08h+0Ah];00001951
MOV EAX,55555556h
IMUL ECX
MOV EAX,offset dbName
SHR EAX,1Fh
LEA ECX,DWORD PTR DS:[EDX+EAX+24h]
AND ECX,8000000Fh
JNS SHORT L004DF75A
DEC ECX
OR ECX,0FFFFFFF0h
INC ECX
PUSH ECX
L004DF75A:
.if cl<0ah
add ecx,30h
.else
add ecx,37h
.endif
mov eax,offset dbKey2
mov word ptr [eax+8],cx
invoke lstrlenW,offset dbKey2+4
; invoke CharUpperBuffW,offset dbKey2,eax
; invoke lstrlenW,offset dbKey2
invoke UStr2HexStr,offset dbKey2+4,offset dbNameHex,eax
invoke lstrlen,offset dbNameHex
push eax
push offset dbNameHex
push 0
call CheckSum
add esp,0ch
mov bx,ax
rol bx,4
mov ax,bx
and ax,0fh
.if ax<0ah
add ax,30h
.else
add ax,37h
.endif
mov ecx,offset dbKey2
mov word ptr [ecx],ax
rol bx,4
mov ax,bx
and eax,0fh
.if al<0ah
add eax,30h
.else
add eax,37h
.endif
mov ecx,offset dbKey2+2
mov word ptr [ecx],ax
invoke TransFormKeyB,offset dbKey2
ret
GenKey endp
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,uMsg
.if eax==WM_INITDIALOG
;initialization here
.elseif eax==WM_COMMAND
mov edx,wParam
movzx eax,dx
shr edx,16
.if edx==BN_CLICKED
.if eax==IDOK
invoke TransFormKey,offset dbKey2
invoke GetDlgItemTextW,hWin,IDC_EDT_USER,offset dbName,sizeof dbName /2
invoke GenKey
invoke SetDlgItemTextW,hWin,IDC_EDT_KEY,offset dbKey2
.elseif eax==IDCANCEL
invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
.endif
.endif
.elseif eax==WM_CLOSE
invoke EndDialog,hWin,0
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
end start