ASM KEY_GEN,也来凑热闹,顺便练练手 (3千字)
练练手,很久没用汇编写东西了。另外,都Win时代了注册机是不是该换换皮肤了,老是dos界面总使人觉得与时代脱节。。。
如何写随机数生成代码?有没有对应Api?这里没有随机部分,望高手指教。。。
汇编写注册有时最方便不过,如果算法较复杂,就可分析出入口和出口,然后将反汇编代码修改一下粘贴过来,加上GUI部分就可以了,最大的优点是速度快,体积小,win32汇编编程几乎与C一样方便,只可惜,时间太有限了,人的生命太短暂了......
COMPILE:
cls
ml /c /coff /Cp wf.asm
rc /v wf.rc
link /SUBSYSTEM:WINDOWS /LIBPATH:c:\masm32\lib wf.obj wf.res
wf.asm****************************************
.386
.model flat,stdcall
option casemap:none
include hd.h
_ProcDlg proto :DWORD,:DWORD,:DWORD,:DWORD
;->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>data seg
.data
CurrentEbx dd 99999999
flg_found dd 0
MsgMesaage1 db "All possible Keys have been passed,restart the program! ",0
MsgCap db "By (C)hume,July,2001",0
szBuf1 db 20 dup(0)
szBuf2 db "NE-%d-EWD",0
.data?
hInstance HANDLE ?
.const
DLG_MAIN equ 1000
GEN equ 1001
XIT equ 1002
EDIT_COD equ 1003
;-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>code seg
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlg,0
invoke ExitProcess,NULL
_ProcDlg proc uses ebx edi esi, \
hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_COMMAND
mov eax,wParam
.IF lParam!=0
.if ax==GEN
mov ebx,CurrentEbx
lopcal: inc ebx
cmp ebx, 5F5E100h ;<--注册码数字部分必须在
jl New_over ; | 100000000至
cmp ebx, 3B9AC9FFh ; | 999999999之间
jge New_over ;<--
call Cal
cmp flg_found,1
jnz lopcal
mov CurrentEbx,ebx
invoke RtlZeroMemory,addr szBuf1,20
invoke wsprintf,addr szBuf1,addr szBuf2,ebx
invoke SetDlgItemText,hWnd,EDIT_COD,addr szBuf1
.elseif ax==XIT
invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL
.endif
.ENDIF
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
New_over:
invoke MessageBox,NULL,addr MsgMesaage1,addr MsgCap,MB_OK or MB_ICONEXCLAMATION
ret
_ProcDlg ENDP
Cal PROC uses eax ebx
mov eax, ebx
mov ecx, 4Dh
cdq
idiv ecx ;<--注册码除以77
add eax, 309416C0h ;<--商+815011520
mov ecx, 4Dh
cdq
idiv ecx ;<--和除以77
test edx, edx
jnz ToEit
Found:
mov flg_found,1
ToEit: ret
Cal endp
;-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>end all
end start
wf.rc***************************************
#include <c:\masm32\include\resource.h>
#define DLG_MAIN 1000
#define GEN 1001
#define XIT 1002
#define EDIT_COD 1003
DLG_MAIN DIALOG 62, 39, 200, 45
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "网际飞鹰之极速FTP1.0 keygen By Hume"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "Generate", GEN, 148, 6, 50, 14
PUSHBUTTON "EXIT", XIT, 148, 24, 50, 14
LTEXT "USERNAME:Random", -1, 7, 6, 76, 8
LTEXT "REGCODE:", -1, 7, 21, 38, 8
EDITTEXT EDIT_COD, 47, 20, 72, 11, WS_BORDER | WS_TABSTOP
}
hd.h**************************
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\comctl32.inc
include c:\masm32\include\comdlg32.inc
include c:\masm32\include\shell32.inc
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\gdi32.lib
includelib c:\masm32\lib\comctl32.lib
includelib c:\masm32\lib\comdlg32.lib
includelib c:\masm32\lib\shell32.lib
