- Ứng với mỗi ký tự trong 3 ký tự sau ta có một giá trị trong bảng này... all REA‘s members, HacNho, RongChauA, Deux, Infinity, ..... REVERSE ENGINEERING ASSOCIATION http://www.rea.fare
Trang 100415BE5 | 83C4 04 ADD ESP,4
00415BE8 | 85C0 TEST EAX,EAX ; <== if correct return value = 4
00415BEA | 74 29 JE SHORT B2.00415C15
00415BEC | 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+C] ; <== Section_III
00415BF0 | 0FBE51 03 MOVSX EDX,BYTE PTR DS:[ECX+3] ; <== Section_III[3]
00415BF4 | 52 PUSH EDX
00415BF5 | E8 1CA41300 CALL B2.00550016 ; <== Must be (0-9)
00415BFA | 83C4 04 ADD ESP,4
00415BFD | 85C0 TEST EAX,EAX ; <== if correct return value = 4
00415BFF | 74 14 JE SHORT B2.00415C15
00415C01 | 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C] ; <== Section_III
00415C05 | 0FBE08 MOVSX ECX,BYTE PTR DS:[EAX] ; <== Section_III[0]
00415C08 | 51 PUSH ECX
00415C09 | E8 B2A31300 CALL B2.0054FFC0 ; <== Must be (a-z,A-Z)
00415C0E | 83C4 04 ADD ESP,4
00415C11 | 85C0 TEST EAX,EAX ; <== if correct return value = 1 or 2
00415C13 75 05 JNZ SHORT B2.00415C1A
- Bảng giá trị mặc định (96 giá trị – không tính giá trị 00 – tương ứng 96 ký tự : char(0x32) - char(0x7F)
005C23D6 48 00 10 00 10 00 10 00 10 00 10 00 10 00 10 00 H
005C23E6 10 00 10 00 10 00 10 00 10 00 10 00 10 00 10 00
005C23F6 84 00 84 00 84 00 84 00 84 00 84 00 84 00 84 00 „.„.„.„.„.„.„.„ 005C2406 84 00 84 00 10 00 10 00 10 00 10 00 10 00 10 00 „.„
005C2416 10 00 81 00 81 00 81 00 81 00 81 00 81 00 01 00
005C2426 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
005C2436 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
005C2446 01 00 01 00 01 00 10 00 10 00 10 00 10 00 10 00
005C2456 10 00 82 00 82 00 82 00 82 00 82 00 82 00 02 00 ‚.‚.‚.‚.‚.‚.1[1]
005C2466 02 00 02 00 02 00 02 00 02 00 02 00 02 00 02 00
1[1].1[1].1[1].1[1].1[1].1[1].1[1].1[1]
Trang 2005C2476 02 00 02 00 02 00 02 00 02 00 02 00 02 00 02 00
1[1].1[1].1[1].1[1].1[1].1[1].1[1].1[1]
005C2486 02 00 02 00 02 00 10 00 10 00 10 00 10 00 20 00 1[1].1[1].1[1]
- Ứng với mỗi ký tự trong 3 ký tự sau ta có một giá trị trong bảng này Giá trị này sau đó thực hiện tiếp lệnh
0055003A | 83E0 04 AND EAX,4
- Và theo như giá trị trong bảng, chí có các giá trị “84” sau khi thực hiện phép AND mới trả về giá trị là “4”, còn các gía trị khác đề trả về giá trị “0” Tương tứng với các giá trị “84” là số ( 0 – 9 )
- Tương tự như vậy, ký tự đầu tiên được thực hiện tiếp lệnh :
0054FFE8 | 25 03010000 AND EAX,103
- Lập luận tương tự, chỉ có các giá trị “81”, ‘01”, “82”, “02” mới trả về giá trị khác
“0” ( “1” hoặc “2” ) Và tương ứng với các giá trị này là các ký tự ( a – z, A – Z )
/*/*/*/ - SERIAL tương ứng với USER :
User : REA-cRaCkErS Serial : N/A
Serial : 1603-3437-L912 or 9406-3437-u419
III – KeyGen :
/Section 1/- Tạo chuỗi ngẫu nhiên gồm 4 ký tự, trong đó hai giá trị hai ký tự sau ở dạng HEX phải nằm trong khoảnng 1 < Value < 12
/Section 2/- Chuỗi mặc định : 3437
/Section 3/- Chuỗi ngẫu nhiên trong đó ký tự đầu tiên nằm trong khoảng ( a – z, A – Z ) ba ký tự cuối cùng nằm trong khoảng ( 0 – 9 )
IV – SourceCode ( VC++ ) :
char reaSerial[64]={0};
char reaDefaultString[256] =
"0123456789qwertyuioplkjhgfdsazxcvbnmMNBVCXZASDFGHJKLPOIUYTRE WQ";
char reaThirdSection[10]={0};
int i=0;
int FirstSection=0;
srand( (unsigned)time( NULL ) );
Trang 3FirstSection = (GetTickCount()%89 + 10) * 100 + (2 + GetTickCount()%10);
i=0;
while ( i < 4 ) {
if ( i == 0 ) {
reaThirdSection[i] = reaDefaultString[10 + GetTickCount()%52];
i++;
} else {
reaThirdSection[i] = reaDefaultString[rand() % 10]; i++;
} }
wsprintf(reaSerial,"%i-3437-",FirstSection);
lstrcat(reaSerial,reaThirdSection);
SetDlgItemText(IDC_Serial,reaSerial);
V – End of Tut :
- Finished – 07/07/2004
- Thank to my family, Computer_Angel, Zombie_Deathman, Littleboy all REA‘s members, HacNho, RongChauA, Deux, Infinity, all my friend, and YOU
REVERSE ENGINEERING ASSOCIATION
http://www.rea.fareastking.com
Reverse Engineering Association
SoftWare
Homepage : http://www.anthemion.co.uk/dialogblocks
Production : Anthemion Software Ltd
SoftWare : DialogBlocks 1.52
Trang 4Copyright by : Copyright © Anthemion Software Ltd, May 2004 All Rights Reserved
Type : Name / Serial
Packed : N / A
Language : Microsoft Visual C++ 6.0
Crack Tool : OllyDbg 1.09d, PEiD 0.92, kWdsm 10
Unpack : N / A
Request : Correct Serial / KeyGen
DialogBlocks 1.52
DialogBlocks is an editor for authoring cross-platform dialogs for wxWidgets applications You can use it to produce help files for your Windows, Linux, or Mac applications, in conjunction with wxWidgets
I – Information :
- Dùng PEiD kiểm tra biết chương trình không bị PACK được viết bằng Microsoft
Visual C++ 6.0
- Nhập thử Name và Fake Serial, ta nhận được thông báo "Sorry, invalid
registration key…” Ta tìm được đoạn CODE này ở địa chỉ :
00413EDC > \B8 44BA6C00 MOV EAX,dialogbl.006CBA44 ; ASCII "Sorry, invalid registration key The key should be of the form:EA0927CF-E8CF149B-416363EE(three groups of 8 characters).Please also check that your specified user name is the sameas the one under which you purchased
DialogBlocks."
- Dò ngược lên trên và ta đặt BP tại lệnh CALL đầu tiên của Function này :
00413D96 E8 A52F2200 CALL <JMP.&MSVCRT._EH_prolog> ; <== Set BreakPoint here
II – Cracking :
- Load chương trình lên, chạy chương trình với User và Fake Serial, chương trình dừng lại tại điểm đặt BP Để đi đến được đoạn CODE mã hoá của chương trình ta cần trace into vài lần :
00413E5F E8 FC140000 CALL dialogbl.00415360 ; <== Real Serial I
-=== TraceInto I === -
Trang 5004153B1 | E8 EBFEFFFF CALL dialogbl.004152A1 ; <== Trace Into
-=== TraceInto II === -
004152C7 | E8 28FEFFFF CALL dialogbl.004150F4 ; <== Trace Into here
-=== TraceInto III === -
- Quá trình chuyển đổi chuỗi U nhập về dạng LowerCase :
0041514E |> /8A07 /MOV AL,BYTE PTR DS:[EDI]
00415150 | |3C 20 |CMP AL,20
00415152 | |74 0E |JE SHORT dialogbl.00415162
00415154 | |0FBEC0 |MOVSX EAX,AL
00415157 | |50 |PUSH EAX ; /c
00415158 | |FF15 48746600 |CALL DWORD PTR DS:[<&MSVCRT.tolower>]
; \tolower
0041515E | |8806 |MOV BYTE PTR DS:[ESI],AL
00415160 | |59 |POP ECX
00415161 | |46 |INC ESI
00415162 |> |47 |INC EDI
00415163 | |381F |CMP BYTE PTR DS:[EDI],BL
00415165 |.^\75 E7 \JNZ SHORT dialogbl.0041514E
- Kết hợp với chuỗi mặc định “Anthemion Software DialogBlocks” :
00415167 |> \FF75 EC PUSH [LOCAL.5] ; /src
0041516A | 8D85 84FDFFFF LEA EAX,[LOCAL.159] ; |
00415170 | 881E MOV BYTE PTR DS:[ESI],BL ; |
00415172 | 50 PUSH EAX ; |dest
00415173 | E8 7A1C2200 CALL <JMP.&MSVCRT.strcat> ;
\strcat
- Quá trình tạo chuỗi MD5Hash :
00415188 | E8 D2D0FFFF CALL dialogbl.0041225F ; <==
MD5Start
0041518D | 8D85 84FDFFFF LEA EAX,[LOCAL.159]
00415193 | 50 PUSH EAX ; /s
00415194 | E8 3B1C2200 CALL <JMP.&MSVCRT.strlen> ;
\strlen
00415199 | 50 PUSH EAX
0041519A | 8D85 84FDFFFF LEA EAX,[LOCAL.159]
004151A0 | 50 PUSH EAX
004151A1 | 8D45 84 LEA EAX,[LOCAL.31]
Trang 6004151A4 | 50 PUSH EAX
004151A5 | E8 DDD0FFFF CALL dialogbl.00412287 ; <==
MD5Update
004151AA | 8D45 84 LEA EAX,[LOCAL.31]
004151AD | 50 PUSH EAX
004151AE | 8D45 DC LEA EAX,[LOCAL.9]
004151B1 | 50 PUSH EAX
004151B2 | E8 70D1FFFF CALL dialogbl.00412327 ; <==
MD5Finished
- Chuỗi MD5Hash được tạo thành là 16 bytes ( 16 ký tự ) Ta chia làm 4 đoạn, mỗi đoạn 4 bytes Quá trình tạo chuỗi Serial thực chỉ là quá trình chuyển đổi
ba đoạn đầu tiên của chuỗi MD5Hash thành chuỗi Serial theo định dạng
“XXXXXXXX-YYYYYYYY-ZZZZZZZZ” :
004151BC | 8D75 DC LEA ESI,[LOCAL.9] ; <== Add of MD5Hash
004151BF |> 33C9 /XOR ECX,ECX
004151C1 | 33C0 |XOR EAX,EAX
004151C3 |> 0FB61406 |/MOVZX EDX,BYTE PTR DS:[ESI+EAX] ; <== MD5Str[i]
004151C7 | C1E1 08 ||SHL ECX,8
004151CA | 03CA ||ADD ECX,EDX