HexDiff V2.51和它的序號產生器(MASM32) (6千字)

看雪資料發表於2015-11-15

Software:HexDiff Version 2.51
http://www.eftstudio.com
檔案比較工具。可以快速的在兩個或者多個檔案間進行比較,找出不同的地方
Tools:TRW 2000
Cracker:lq7972[bruceyu13@sina.com]
Notes:學習中~

這個軟體的註冊無論成功與否,都沒有諸如“Thanks”或“Sorry”的資訊框;下斷點“bpx hmemcpy”在跟蹤中也不時從HexDiff領空和Kernel32/User32領空間跳動,我們可以用“pmodule”返回來
>>它的註冊資訊放在登錄檔的\HKEY_CURRENT_USER\Software\EFT Studio\HexDiff v2.5\Register,與登錄檔有關的斷點應該好一些,不過我沒去試:-)
下面看註冊演算法
(跟蹤很簡單,就是利用F10帶過Call,敲“D Register”來看它的作用,詳細過程本文略)
按12次(?)F12,敲pmodule,再按8次F12,按F10返回,一直到“00412235”按F8,按F10到“0040D5F8”,F8跟進,就找到註冊演算法了~夠快吧:)

0167:0040D4F0 53               PUSH     EBX
0167:0040D4F1 56               PUSH     ESI
0167:0040D4F2 8B74240C         MOV      ESI,[ESP+0C] ;使用者名稱
0167:0040D4F6 57               PUSH     EDI
0167:0040D4F7 8BFE             MOV      EDI,ESI
0167:0040D4F9 83C9FF           OR       ECX,BYTE -01 ;下面幾行算使用者名稱長度
0167:0040D4FC 33C0             XOR      EAX,EAX
0167:0040D4FE 33DB             XOR      EBX,EBX
0167:0040D500 F2AE             REPNE SCASB 
0167:0040D502 F7D1             NOT      ECX
0167:0040D504 49               DEC      ECX
0167:0040D505 8BC1             MOV      EAX,ECX ;這幾行把使用者名稱後填0
0167:0040D507 881C30           MOV      [EAX+ESI],BL
0167:0040D50A 885C3001         MOV      [EAX+ESI+01],BL
0167:0040D50E 885C3002         MOV      [EAX+ESI+02],BL
0167:0040D512 885C3003         MOV      [EAX+ESI+03],BL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
0167:0040D516 99               CDQ      ;哈,要進入註冊碼的計算了
0167:0040D517 83E203           AND      EDX,BYTE +03
0167:0040D51A 03C2             ADD      EAX,EDX
0167:0040D51C BAE7A9E771       MOV      EDX,71E7A9E7
0167:0040D521 C1F802           SAR      EAX,02
0167:0040D524 40               INC      EAX
0167:0040D525 3BC3             CMP      EAX,EBX
0167:0040D527 7E0A             JNG      0040D533
;====================================================================================
0167:0040D529 8B0E             MOV      ECX,[ESI]
0167:0040D52B 83C604           ADD      ESI,BYTE +04
0167:0040D52E 03D1             ADD      EDX,ECX ;我們要的東東
0167:0040D530 48               DEC      EAX
0167:0040D531 75F6             JNZ      0040D529
;====================================================================================
0167:0040D533 8B7C2414         MOV      EDI,[ESP+14]

你搞定了嗎?是不是很簡單呢?

最後,還是寫個序號產生器吧
【序號產生器】
;KeyGen.asm
/////////////////////////////////////////////////////////////////////////////////////
// HexDiff Version 2.51 KeyGen
// TeH kEygeN bY lq7972, wITh WIn32mAsM
// 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 8 dup (?)

.data
hInstance dd 0

szErr db '請輸入使用者名稱!',0 
szCaption db '錯誤!',0 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;***************************************************************************************
_RegCodCalc proc

pushad
lea esi,szName
invoke lstrlen,offset szName
cdq
mov edx,071E7A9E7H
sar eax,2
inc eax
@@:
mov ecx,[esi]
add esi,4
add edx,ecx
dec eax
jnz @B
invoke dw2hex,edx,offset szSN ;這是masm32的轉換函式
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 "exDiff Version 2.51 序號產生器" 
FONT 9,"宋體" 
{
 CONTROL "Name:" ,-1,"Static",SS_LEFT,10,13,40,17
 CONTROL "Code:" ,-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

相關文章