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