• 标 题:Hero Video Convert v2.0 KeyGen(MASM32) (7千字)
  • 作 者:lq7972
  • 时 间:2003-10-01 17:47:29
  • 链 接:http://bbs.pediy.com

SoftWare:Hero Video Convert v2.0 KeyGen(MASM32)
Tools:MASM32 v8.0
Cracker:lq7972[bruceyu13@sina.com]
Notes:可以用来从光盘Copy电影;它同豪杰的主流产品注册算法及其跟踪相差不大。第一组注册码完全相同,其它的也只是加了些计算--请参考我前面写的注册机
      (这个注册机也只是演示了注册算法)

;KeyGen.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; The KeyGen by lq7972,with MASM32 V8
; E-mail:bruceyu13@sina.com
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none

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

;Equ等值定义
ICO_MAIN equ 1000H
DLG_MAIN equ 1
EditName equ 10
EditSN equ 11


;*************************************************************************************
.data?
szName db 512 dup (?)
szSN            db 20 dup (?)
Reg1 dd 4 dup (?)
Reg2 dd 4 dup (?)
Reg3 dd 4 dup (?)
Reg4 dd 4 dup (?)
Temp dd 512 dup (?)
Temp1 db 512 dup (?)
Temp2 db 512 dup (?)

.data
hInstance dd 0

szErr db '请输入用户名!',0 
szErr1 db '对不起,用户名长了',0dh,0ah,\
'请更换用户名!',0
szCaption db '错误!',0 
RegFmt db '%4s-%4s-%4s-%4s',0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;***************************************************************************************
_Calc proc

push ebx
mov al,byte ptr [Temp1]
mov bl,byte ptr [Temp2]
d10:
test bl,0C3H
jpe @F
stc
@@:
rcr bl,01
dec al
jnz d10

mov byte ptr [Temp2],bl
mov al,byte ptr [Temp2]

pop ebx
ret
_Calc endp
;***************************************************************************************
_NameRor proc

mov eax,DWORD ptr [Temp1]
mov ecx,DWORD ptr [Temp2]
ror eax,cl
mov DWORD ptr Temp,eax
mov eax,DWORD ptr Temp
ret
_NameRor endp
;***************************************************************************************
_NameCalc proc uses ebp edi esi ebx

xor ebx,ebx
invoke lstrlen,offset szName
.if eax > 200H
invoke MessageBox,NULL,offset szErr1,offset szCaption,MB_OK
mov eax,FALSE
ret
.endif
mov ebp,eax
cdq
and edx,3
add eax,edx
sar eax,2
test ebp,3
mov esi,eax
jz @F
inc esi
@@:
xor edi,edi
test ebp,ebp
jle c10

invoke lstrcpy,addr Temp,addr szName
@@: 
mov eax,dword ptr [Temp+edi]
mov dword ptr [Temp2],eax
invoke _Calc
mov byte ptr [Temp+edi],al
inc edi
mov dword ptr [Temp1],edi
cmp edi,ebp
jl @B
c10:
xor edi,edi
test esi,esi
jle c20
@@:
mov dword ptr [Temp2],edi
add ebx,DWORD ptr [Temp+edi*4]
mov dword ptr [Temp1],ebx
mov eax,edi
and eax,01FH 
inc edi
invoke _NameRor
mov ebx,eax
cmp edi,esi
jl @B
c20:
mov eax,ebx
ret
_NameCalc endp
;***************************************************************************************
_RgeCodCalc_1 proc

b10:
and eax,07FH
cmp al,041H
jb @F
cmp eax,05AH
jg @F
or eax,020H
@@:
cmp eax,06FH
jnz @F
xor eax,0FFH
@@:
cmp eax,030H
jnz @F
xor eax,0FFH
@@:
cmp eax,061H
jl @F
cmp eax,07AH
jle b20
@@:
cmp eax,031H
jl @F
cmp eax,039H
jle b20
@@:
xor eax,03FH
or eax,031H
jmp b10
b20:
ret
_RgeCodCalc_1 endp
;***************************************************************************************
_RegCodCalc proc

pushad
xor edi,edi
invoke _NameCalc
mov dword ptr Temp,eax
a10:
lea esi,[Temp+edi]
movsx eax,byte ptr [esi]
cmp eax,041H
jl @F
cmp eax,020H
jg @F
add eax,020H
@@: 
inc edi
invoke _RgeCodCalc_1
mov byte ptr [Reg1+edi-1],al
cmp edi,04H
jl a10

mov eax,Reg1
xor edi,edi
lea ecx,dword ptr [eax+eax*4]
lea eax,dword ptr [ecx+ecx*4]
mov ecx,Reg1
mov edx,ecx
shl ecx,5
add ecx,edx
xor eax,ecx
mov Temp,eax
a20:
lea ebx,dword ptr [Temp+edi]
mov al,byte ptr [ebx]
mov dword ptr Temp1,edi
mov Temp2,al
inc edi
invoke _Calc
xor ecx,ecx
mov cl,al
movsx eax,al
invoke _RgeCodCalc_1
mov byte ptr [Reg2+edi-1],al
cmp edi,04H
jl a20

mov eax,Reg2
mov ecx,Reg1
xor eax,Reg1
xor edi,edi
mov edx,ecx
imul eax,Reg1
add eax,Reg2
lea ecx,dword ptr [ecx+ecx*2]
shl ecx,3
sub ecx,edx
xor eax,ecx
mov Temp,eax
a30:
lea ebx,[Temp+edi]
inc edi
movsx eax,byte ptr [ebx]
invoke _RgeCodCalc_1
mov byte ptr [Reg3+edi-1],al
cmp edi,4
jl a30

mov ecx,Reg2
mov eax,Reg3
inc ecx
imul ecx,Reg1
xor edi,edi
lea edx,dword ptr [ecx+ecx*4]
lea ecx,dword ptr [ecx+edx*4]
lea edx,dword ptr [eax+eax*2]
lea ebx,dword ptr [edx+edx*8]
add ecx,ebx
mov Temp,ecx
a40:
lea ebx,[Temp+edi]
inc edi
movsx eax,byte ptr [ebx]
invoke _RgeCodCalc_1
mov byte ptr [Reg4+edi-1],al
cmp edi,04H
jl a40

invoke wsprintf,addr szSN,addr RegFmt,addr Reg1,addr Reg2,addr Reg3,addr Reg4
popad
ret
_RegCodCalc endp
;**************************************************************************************
_ProcDlgMain proc uses ebx edi esi ebp hWnd,wMsg,wParam,lParam
mov eax,wMsg
.if eax  ==  WM_CLOSE 
invoke  EndDialog,hWnd,NULL
.elseif eax  ==  WM_COMMAND 
mov eax,wParam 
.if eax  ==  IDOK
invoke RtlZeroMemory,offset szName,512
invoke  GetDlgItemText,hWnd,EditName,offset szName,512
.if eax !=  NULL
invoke _RegCodCalc
invoke SetDlgItemText,hWnd,EditSN,offset szSN
mov eax,FALSE
ret
                 .else 
invoke MessageBox,NULL,offset szErr,offset szCaption,MB_OK
mov eax,FALSE
ret
.endif
.elseif eax  ==  IDCANCEL 
invoke  EndDialog,hWnd,NULL 
.endif
.else 
mov    eax,FALSE 
ret 
.endif
mov eax,TRUE
ret

_ProcDlgMain endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:

invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
end start



//KeyGen.rc
#include  

#define ICO_MAIN 0x1000
#define DLG_MAIN 1
#define EDITName 10
#define EDITSN 11

//ICO_MAIN ICON "01.ico"
DLG_MAIN DIALOG 100,150,250,60
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "注册机 by lq7972" 
FONT 9,"宋体" 

{
 CONTROL "Name:" ,-1,"Static",SS_LEFT,10,13,40,17
 CONTROL "SN:" ,-2,"Static",SS_CENTER,10,40,20,17
 CONTROL "" ,10,"Edit",ES_LEFT,30,13,150,10
 CONTROL "" ,11,"Edit",ES_LEFT,30,40,150,10
 DEFPUSHBUTTON "GENERATE",IDOK,200,11,40,15
 PUSHBUTTON "EXIT",IDCANCEL,200,36,41,14
}



#makefile
NAME = KeyGen 
OBJS = $(NAME).obj
RES = $(NAME).res

LINK_FLAG = /subsystem:windows
ML_FLAG = /c /coff

$(NAME).exe: $(OBJS) $(RES)
Link $(LINK_FLAG) $(OBJS) $(RES)

.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<

clean:
del *.obj
del *.res