⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regirstry.asm

📁 winimage注册机源码
💻 ASM
字号:

		.386
		.model flat, stdcall
		option casemap :none

; Include 文件定义
include		windows.inc
include		user32.inc
includelib	user32.lib
include		kernel32.inc
includelib	kernel32.lib

; Equ 等值定义
IDD_DIALOG_MAIN            equ     101
IDC_EDIT_NAME              equ     1000
IDC_EDIT_REGIRSTRY         equ     1001
IDC_BUTTON_REGIRSTRY       equ     1002
IDC_BUTTON_EXIT            equ     1003



; 数据段
		.data?
hInstance			dd			?		;模块句柄
hDlg				dd			?
		.const
szText		db		'请输入用户名',0
szCaption	db		'Error',0
szFmtHex	db		"%lx",0
szFmtchar	db		'%s',0
; 代码段
		.code
;用户名计算
RegirstryCal		proc	hWnd
			local	@szbuffer[1024]:byte
		sub  esp,104
		push esi
                push edi
		invoke	GetDlgItemText,hWnd,IDC_EDIT_NAME,addr @szbuffer,sizeof @szbuffer		
		lea esi,@szbuffer
		mov edi,0047694Ch      ;edi指向值为8B20244C,固定值,用来判断用户名长度是不是为零
                push esi                       
                call lstrlen
		test eax,eax
		jle  Error           ;用户名长度为零?
		push ebx
		push ebp
		mov  ebp,esi                    ;ebp指向转换后的用户名
		xor  ecx,ecx
		sub  ebp,3
		mov  dword ptr ss:[esp+10h],ebp
		mov  esi,dword ptr ss:[esp+10h]  ;  esi=ebp-3
		mov  ebx,eax                    ;  用户名长度-》ebx
		jmp  @loop1
		jmp  @loop
		lea  esp,dword ptr ss:[esp]
@loop:             
		mov ebp,dword ptr ss:[esp+10h]  ;  循环计算用户名
@loop1:
		mov eax,92492493               ;  
		imul ecx                       ;
		 add edx,ecx
		sar edx,3
		mov eax,edx
		shr eax,1Fh
		add eax,edx
		lea edx,dword ptr ds:[eax*8]
		sub edx,eax
		add edx,edx
		mov eax,ecx
		sub eax,edx
		jnz @get
		mov esi,27h
@get:
		movzx edx,byte ptr ds:[ecx+ebp+3];  edx==取得用户名每一位
		lea eax,dword ptr ds:[ecx+3]
		imul edx,esi                   ;  用户名名每一位*esi
		add edi,edx                    ;  edi存放计算后的值
		cdq                            ;  edx设为eax最高为的值
		mov ebp,0Eh
		idiv ebp                       ;  edx-eax除0e
		test edx,edx                   ;  余数
		je Zero                       ;  余数为零跳
		lea esi,dword ptr ds:[esi+esi*2]

@@:		add ecx,1
		cmp ecx,ebx                    ;  比较用户名计算完了吗
	        jl @loop                       ;  循环计算
		mov eax,edi
		jmp _ret
Zero:
		lea eax,dword ptr ds:[esi*8]
		sub eax,esi
		mov esi,eax
		jmp @B

Error:
		invoke  MessageBox,NULL,offset szText,offset szCaption,MB_OK
		xor	eax,eax
		
_ret:		 pop ebp
		 pop ebx		 
		 pop edi
                 pop esi
		 ret
RegirstryCal		endp

;计算结果进行转换
Change		proc
		sub esp,10h
                push esi
		push eax                           ; /<%lX>
		lea ecx,dword ptr ss:[esp+8]       ; |
		push offset szFmtHex              ; |%lX
                push ecx                           
		mov esi,edi                       
		call wsprintfA			   ; \wsprintfA
		mov al,byte ptr ss:[esp+10h]        ;  取得第一位注册码
		add esp,0Ch
		test al,al
		je @zero
		lea ecx,dword ptr ss:[esp+4]
		sub ecx,edi
comp:
		cmp al,38h                          ;  比较每一位是不是8,是8转为B
		je changeB
		cmp al,42h                          ;  比较每一位是不是B,是B转为8
		je change8

result:		mov byte ptr ds:[esi],al
		mov al,byte ptr ds:[ecx+esi+1]     ;  取得计算出的注册码的一位
		add esi,1
		test al,al
		jnz comp			      ;  循环比较
@zero:
		mov byte ptr ds:[esi],0
		mov eax,edi                        ;  计算结果->edi
		pop esi
		add esp,10h
                retn
change8:		
		mov al,38h
		jmp result
changeB:
		mov al,42h
		jmp result
		
Change		endp

_ProcDlgMain	proc	uses ebx edi esi hWnd,wMsg,wParam,lParam
		local	@szbuffer[1024]:byte
		mov	eax,wMsg
		.if	eax == WM_CLOSE
			invoke  EndDialog,hWnd,NULL

		.elseif	eax == WM_COMMAND
			mov	eax,wParam
			.if	ax == IDC_BUTTON_EXIT
				invoke  SendMessage,hWnd,WM_CLOSE,NULL,NULL
				ret
			.elseif ax == IDC_BUTTON_REGIRSTRY
				invoke  RegirstryCal,hWnd
				call	Change
				invoke	wsprintf,addr @szbuffer, offset szFmtchar,eax
				invoke	SetDlgItemText,hWnd,IDC_EDIT_REGIRSTRY,addr @szbuffer 
				ret			
			.endif
		.else	
			mov	eax,FALSE
			ret
		.endif	
		mov	eax,TRUE
		ret
_ProcDlgMain	endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:		
		invoke  GetModuleHandle,0
		mov	hInstance,eax
		invoke  DialogBoxParam,hInstance,IDD_DIALOG_MAIN,NULL,offset _ProcDlgMain,NULL
		invoke  ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		end	start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -