有朋友劝我换个开发平台,换个Win MASM如何?再贴注册机(masmv5.2编译),输入汉字不再麻烦,因为是window... (6千字)
标题: 有朋友劝我换个开发平台,换个Win MASM如何?再贴注册机(masmv5.2编译),输入汉字不再麻烦,因为是windows下的注册机嘛!内容:
没事到罗云彬同志的编程乐园http://asm.yeah.net上玩了一趟,看了会儿windows下的汇编编程方法,借了一个老的注册机的壳,花了一个下午的时间,改成了自己的,呵呵呵。。。
这下输入汉字不再麻烦了吧。
这下你们该满足了吧。。。
;****************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
========================
;****************snsitman.rc
#include <c:\masm32\include\resource.h>
#define IDC_IN 1004
#define ID_GEN 1003
#define ID_EXIT 1002
#define IDC_OUT 1001
#define DLG_MAIN 1000
DLG_MAIN DIALOG 37, 61, 282, 59
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "SitManv2.0 beta Keygen(in Win32 ASM), By HSF 10.31.2001"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "Generate", ID_GEN, 209, 14, 50, 14
PUSHBUTTON "Exit", ID_EXIT, 209, 36, 50, 14
LTEXT "NAME:", -1, 15, 8, 36, 8
LTEXT "(Must>=3)",-1, 160,8,50,8
LTEXT "COMPANY:", -1, 15, 25, 39, 8
LTEXT "PRODUCT SN:", -1, 15, 43, 49, 10
CONTROL "Kiss--Keep it simple and stupid",-1,"EDIT" ES_READONLY | WS_BORDER | WS_TABSTOP, 67, 23, 100, 13
EDITTEXT IDC_IN ,67, 6, 85, 13 , ES_MULTILINE | WS_BORDER | WS_TABSTOP,
EDITTEXT IDC_OUT, 67, 42, 130, 12, ES_READONLY | WS_BORDER | WS_TABSTOP
}
=====================================================
;****************snsitman.asm
.386
.model flat,stdcall
option casemap:none
include hd.h
_ProcDlg proto :DWORD,:DWORD,:DWORD,:DWORD
;Mycal proto :dword,:dword
; rand proto :DWORD
;->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>data seg
.data
Namestr db 16h dup(?)
Namelength db ?
Conststr db '0123456789abcdefghijklmnopqrstuvwxyz' ;程序提供的一个字符串
SNstr db 'hsf980214meetMissY' ;这个是假注册码,你可以改成自己的,但第4-9位一定要是数字
.data?
hInstance HANDLE ?
.const
IDC_IN equ 1004
ID_GEN equ 1003
ID_EXIT equ 1002
IDC_OUT equ 1001
DLG_MAIN equ 1000
;-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>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==ID_GEN
; invoke RtlZeroMemory,addr SNstr,20h
invoke GetDlgItemText,hWnd,IDC_IN,addr Namestr,20h
invoke SetDlgItemText,hWnd,IDC_IN,addr Namestr
invoke lstrlen ,addr Namestr
mov Namelength,al
call Mycal
invoke SetDlgItemText,hWnd,IDC_OUT,addr SNstr
.elseif ax==ID_EXIT
invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL
.endif
.ENDIF
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlg ENDP
Mycal proc
pushad
mov ecx,01
mov esi,01
localB634:
mov ebx,01
lea eax,Namelength
movzx edi,byte ptr [eax]
mov ecx,01
localB64C:
lea EAX, Namestr
MOVZX EAX,BYTE ptr [EAX+ECX-01]
IMUL EBX
ADD EAX,ESI
ADD EAX,ECX
MOV EBX,0165h
CDQ
IDIV EBX
MOV EBX,EDX
INC ECX
DEC EDI
JNZ localB64C
MOV EAX,EBX
MOV ECX,24h
CDQ
IDIV ECX
lea EAX, Conststr
MOV AL,[EAX+EDX]
mov dl,al
lea EaX, SNstr
mov [eax+esi-01],dl
INC ESI
CMP ESI,BYTE +03
JNZ localB634
MOV EBX,01
MOV ESI,0Ah
localB693:
MOV ECX,01
localB698:
lea eax, SNstr
MOVZX EAX,BYTE ptr [EAX+ECX-01]
IMUL EBX
ADD EAX,ECX
ADD EAX,ESI
MOV EBX,0179h
CDQ
IDIV EBX
MOV EBX,EDX
INC ECX
CMP ECX,BYTE +09h
JNZ localB698
MOV EAX,EBX
MOV ECX,24h
CDQ
IDIV ECX
lea eax, Conststr
MOV AL,[EAX+EDX]
mov dl,al
lea EaX,SNstr
mov [eax+esi-01],dl
INC ESI
CMP ESI,BYTE +12h
JNZ localB693
popad
ret
Mycal ENDP
end start
============================
把这三部分分别存为hd.h, snsitman.rc, snsitman.asm,然后在masmv5.2下编译,生成注册机snsitman.exe 。
使用时注意:
1。name一定不能为空,否则会出错!!!
2。name长度要大于等于3,小于等于20。我已在界面上提示要大于等于3,至于要小于等于20,我提供的文本框只够输入20个字符,所以不怕你多输入,就怕你少输入或不输入。呵呵呵。。。
3。由于这个软件的注册码生成的特殊性,我在注册机内是事先放了一个假的注册码让程序去计算真的注册码,这个假注册码你可以自己在源程序中修改。但第4-9位一定要是数字,其它是数字或字母都可以,没有特别的要求。
这个注册机做好了是好用,可以直接在window下运行,输入汉字不再麻烦了,可这个注册机要做出来可不容易,我花了好久才把masmv5.2设置好,学会怎么来编译,链接,和生成exe文件...倒底谁麻烦???
好了,大功告成,打个Kiss!
hsf0214 于2001.10.31. 下午
