BadCopy99V2.0序號產生器(MASM版) 下載:華軍
序號產生器下載fpxxp.com/bc2-key.exe
作者:風飄雪 http://fpx.yeah.net
; #########################################################################
; KeyGenerator for xxx, coded by fpx 2002(序號產生器模板)
; #########################################################################
.386
.model flat, stdcall
option casemap :none ; case sensitive 區分大小寫
; #########################################################################
include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include
c:\masm32\include\kernel32.inc
include c:\masm32\include\gdi32.inc
include c:\masm32\include\masm32.inc
includelib c:\masm32\lib\user32.lib
includelib
c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\gdi32.lib
includelib c:\masm32\lib\masm32.lib
; #########################################################################
szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text,0
lbl:
ENDM
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data
TheName
dd 0
Button dd 0
hInstance dd 0
hIconImage dd 0
hIcon
dd 0
dlgname db "KEYGEN",0
errorLabel db "Error"
szName db 30 dup(?)
szKey db 10 dup(?)
szWS
db '%d',0
; #########################################################################
.code
start:
invoke
GetModuleHandle, NULL
mov hInstance, eax
; call dialog box stored in resource file
invoke DialogBoxParam,hInstance,ADDR dlgname,0,ADDR WndProc,0
invoke ExitProcess,eax
; #########################################################################
WndProc proc hWin:DWORD, uMsg:DWORD, wParam:DWORD, lParam :DWORD
LOCAL Ps:PAINTSTRUCT
; initialization
.if uMsg == WM_INITDIALOG
szText dlgTitle,"fpx's KeyGenerator for BadCopy99V2.0"
invoke SendMessage,hWin,WM_SETTEXT,0,ADDR dlgTitle
invoke LoadIcon,hInstance,200
mov
hIcon, eax
invoke SendMessage,hWin,WM_SETICON,1,hIcon
invoke GetDlgItem,hWin,100
mov TheName, eax
invoke GetDlgItem,hWin,1000
mov Button, eax
xor eax, eax
ret
.elseif uMsg == WM_COMMAND
.if wParam == 1000
invoke GetDlgItemText,hWin,100,offset
szName,30 ; 獲得姓名
cmp
eax,1
jl NoName ; 檢查姓名輸入情況
push eax ; 姓名長度
push offset szName ; 姓名=dlgitemtext入棧
call generateKey ;
呼叫算碼程式
invoke wsprintf,offset szKey,offset
szWS,eax ; 寫序列號
invoke SetDlgItemText,hWin,22,offset
szKey ; 將序列號顯示出來
jmp NoError
NoName: ; 如果沒輸姓名
szText errorMsg,"I Need Characters :)"
invoke MessageBox,hWin,ADDR errorMsg,ADDR errorLabel,MB_OK
NoError:
.endif
.elseif
uMsg == WM_CLOSE
invoke EndDialog,hWin,0
.elseif uMsg == WM_PAINT
invoke BeginPaint,hWin,ADDR Ps
invoke FrameWindow,hWin,0,1,1
invoke
FrameWindow,hWin,1,1,0
invoke EndPaint,hWin,ADDR
Ps
xor eax, eax
ret
.endif
ret
WndProc
endp
; ########################################################################
; 算碼過程,基本上參考反彙編程式碼,可見學好32位彙編真的很重要 :)
; ########################################################################
generateKey:
push ebp
mov ebp,esp
push ebx
push ecx
push
edx
push edi
push esi
push ebp
xor esi,esi ; esi清零
mov ecx,eax
; 姓名長度傳入ecx
mov eax,1
addr_1:
mov edx,[offset szName]
mov dl,[eax+szNamQ-1] ; 依次取姓名
and edx,255 ; FF即255
mov ebx,edx
; 註冊碼最後儲存在esi
imul ebx,eax
add esi,ebx
mov ebx,edx
inc eax
dec
ecx
jnz addr_1
mov eax, 6695bh
sub eax,esi ; 結果存入eax
pop ebp
pop esi
pop edi
pop edx
pop ecx
pop ebx
leave
retn 00008h
; ########################################################################
end start