Tải bản đầy đủ (.pdf) (10 trang)

Cracker Handbook 1.0 part 313 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (757.03 KB, 10 trang )

=== Calculation 2 ===
0040C7FD |. 83C4 0C ADD ESP,0C
0040C800 |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
0040C804 |. 51 PUSH ECX ; /StringToAdd
0040C805 |. 53 PUSH EBX ; |ConcatString
0040C806 |. FF15 C4614200 CALL DWORD PTR DS:[<&KERNEL32.lstrcatA>] ; \lstrcatA
0040C80C |. 33C9 XOR ECX,ECX ;<== Sec4 = 0;
0040C80E |. 33C0 XOR EAX,EAX ;<== i = 0;
0040C810 |. 85F6 TEST ESI,ESI
0040C812 |. 76 14 JBE SHORT FolderVi.0040C828
0040C814 |. 8B15 60B54200 MOV EDX,DWORD PTR DS:[42B560] <=4th Default Value (0x0B)
=== Calculation 3 ===
0040C81A |> 0FBE2C38 /MOVSX EBP,BYTE PTR DS:[EAX+EDI] ;<== FU[i]
0040C81E |. 0FAFEA |IMUL EBP,EDX ; Temp = FU[i] * 4th Default Value (0x0B)
0040C821 |. 03CD |ADD ECX,EBP ; Sec4 =Sec4 + Temp
0040C823 |. 40 |INC EAX ;i ++
0040C824 |. 3BC6 |CMP EAX,ESI ;While (i < Length (FU))
0040C826 |.^ 72 F2 \JB SHORT FolderVi.0040C81A ; Continue Loop
0040C828 |> 51 PUSH ECX ; /<%u> ; Sec4 (Convert hex > dec)
0040C829 |. 8D5424 14 LEA EDX,DWORD PTR SS:[ESP+14] ; |
0040C82D |. 68 749E4200 PUSH FolderVi.00429E74 ; |Format = "%u"
0040C832 |. 52 PUSH EDX ; |s
0040C833 |. FF15 70624200 CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; \wsprintfA
=== Calculation 3 ===
0040C839 |. 83C4 0C ADD ESP,0C
0040C83C |. 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10]
0040C840 |. 50 PUSH EAX ; /StringToAdd
0040C841 |. 53 PUSH EBX ; |ConcatString
0040C842 |. FF15 C4614200 CALL DWORD PTR DS:[<&KERNEL32.lstrcatA>] ; \
lstrcatA <== EAX
: Right Code


0040C848 |. 5F POP EDI
0040C849 |. 5E POP ESI
0040C84A |. 5D POP EBP
0040C84B |. 5B POP EBX
0040C84C |. 81C4 00010000 ADD ESP,100
0040C852 \. C3 RETN
=== Trace Into ===
0040C680 |. 8B9424 140100>MOV EDX,DWORD PTR SS:[ESP+114] ;<=== FS
0040C687 |. 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C] ;<=== Right Serial
0040C68B |. 51 PUSH ECX
0040C68C |. 52 PUSH EDX
0040C68D |. E8 2EFEFFFF CALL FolderVi.0040C4C0 ;<== Compare
0040C692 |. 83C4 10 ADD ESP,10
0040C695 |. F7D8 NEG EAX
0040C697 |. 1BC0 SBB EAX,EAX
0040C699 |. 5E POP ESI
0040C69A |. F7D8 NEG EAX
0040C69C |. 81C4 00010000 ADD ESP,100
0040C6A2 \. C3 RETN
=== Trace Into ===
0040C178 . 83C4 08 ADD ESP,8
0040C17B . 85C0 TEST EAX,EAX ;<=== Wrong Code Jump to Nag
0040C17D . 74 43 JE SHORT FolderVi.0040C1C2
0040C17F . 8D5424 04 LEA EDX,DWORD PTR SS:[ESP+4]
0040C183 . 8D8424 040100>LEA EAX,DWORD PTR SS:[ESP+104]
0040C18A . 52 PUSH EDX
0040C18B . 50 PUSH EAX
0040C18C . 68 18964200 PUSH FolderVi.00429618 ; ASCII "Software\FolderView\Registration"
0040C191 . 68 01000080 PUSH 80000001
0040C196 . E8 15050000 CALL FolderVi.0040C6B0

0040C19B . 68 18964200 PUSH FolderVi.00429618 ; ASCII "Software\FolderView\Registration"
0040C1A0 . 68 01000080 PUSH 80000001
0040C1A5 . E8 16020000 CALL FolderVi.0040C3C0
0040C1AA . 83C4 18 ADD ESP,18
0040C1AD . 6A 01 PUSH 1 ; /Result = 1
0040C1AF . 56 PUSH ESI ; |hWnd
0040C1B0 . FF15 34624200 CALL DWORD PTR DS:[<&USER32.EndDialog>] ; \EndDialog
0040C1B6 . 33C0 XOR EAX,EAX
0040C1B8 . 5E POP ESI
0040C1B9 . 81C4 00020000 ADD ESP,200
0040C1BF . C2 1000 RETN 10
0040C1C2 > 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
0040C1C4 . 68 74964200 PUSH FolderVi.00429674 ; |Title = "FolderView"
[B]0040C1C9 . 68 90B84200 PUSH FolderVi.0042B890 ; |Text = "Sorry, you have entered an
incorrect registration code."[/b]
0040C1CE . 56 PUSH ESI ; |hOwner
0040C1CF . FF15 78624200 CALL DWORD PTR DS:[<&USER32.MessageBoxA>] ;
\MessageBoxA
0040C1D5 > 33C0 XOR EAX,EAX ; Default case of switch 0040C0CD
0040C1D7 . 5E POP ESI
0040C1D8 . 81C4 00020000 ADD ESP,200
0040C1DE . C2 1000 RETN 10
/*/*/*/ - SERIAL tương ứng :
User : kienmanowar Serial : 1730-47200-1510-12980
User : REA-cRaCkErTeAm Serial : 2005-50200-1705-13805

III – Keygen :
Code:
char reaName[64]={0};
char reaSerial[64]={0};


int LenName=0;
int i=0,j=0;
int Temp=0, Temp1 = 0;
char Sec1[10] = {0}, Sec2[10] = {0}, Sec3[10] = {0}, Sec4[10] = {0};
int Sec1_temp = 0, Sec2_temp = 0, Sec3_temp = 0,Sec4_temp = 0;
LenName=GetDlgItemText(IDC_NAME,reaName,64);

if (LenName < 1)
{
MessageBox(" ===== Your name atleast 1 chart =====
","Hey !! Please
input your name again !! ");
}
else
{
// Caculation 0
while (i < LenName)
{
Temp = reaName[i] + 0x32;
Temp1 = Temp1 + Temp ;
i++;
}
Sec1_temp = Temp1;
wsprintf(Sec1,"%u-",Sec1_temp);

i = 0;
Temp = 0;
Temp1 = 0;
// Calculation 1

while (i < LenName)
{
Temp = reaName[i] * 0x28;
Temp1 = Temp1 + Temp;
i++;
}
Sec2_temp = Temp1;
wsprintf(Sec2,"%u-",Sec2_temp);

//Calculation 2
i = 0;
Temp = 0 ;
Temp1 = 0;
while ( i < LenName)
{
Temp = reaName[i] + 0x1E;
Temp1 = Temp1 + Temp;
i++;
}
Sec3_temp = Temp1;
wsprintf(Sec3,"%u-",Sec3_temp);
OK

}
Temp = reaName[i] + j +
4*Temp;
Trace tiếp tới đây. Đoạn code này check xem FN ta nhập vào có nằm trong danh sách
BlackList của nó
hay không. Nếu có thì bắn “HACKER” :
N

ếu không thì nhảy qua :

Đặt vệt sáng tại địa chỉ 180039D4 rồi nhìn xuống phía
dưới :
Oki và chúng ta sẽ thấy tại địa chỉ [1800A9B8] nó sẽ chứa các Magic String. Mỗi
Magic String này có
10 kí tự được ngăn cách nhau bởi dấu ‘.’
Trace tiếp chúng ta sẽ thấy tại địa chỉ 180039E3 chương trình so sánh EBX với giá trị
chứa trong
[18009008] (so sánh EBX với 0x66). Và EBX ở đây chính là số lần lặp của đoạn code
này. Như vậy
đoạn code này sẽ lặp đi lặp lại tối đa là 102 lần, tùy thuộc vào lệnh nhảy tại 180039FD
có được Set
hay không. Muốn biết thì chúng ta phải xem xem tại địa chỉ 180039F3 chương trình s

kiểm tra cái gì
và như th
ế n
ào.

Trace into :
Đoạn code này tính giá trị EBX từ chuỗi “Bejeweled1240409” cuối cùng EBX =
0x29. Trace tiếp:
Đoạn code này sẽ check 10 kí tự đầu tiên trong chuỗi FS. Quá trình kiểm
tra như sau :
- Đầu tiên chương trình sẽ check xem vị trí xuất hiện của kí tự FS[0] trong
chuỗi
Str1 = "ZXHYGKLQ9867WEPRCDSANMJBVFTU5342"
- CL = vị trí xuất hiện.
- Sau đó chương trình đem kí tự đầu tiên của chuỗi MagicStr mà EDI đang

tr
ỏ tới để tính :

+ DL = MagicStr[1]
+ DL = DL AND 0x7F
+ DL = DL ^ 0x29
- EAX = DL
- EDX = EAX % 0x20 = Temp1
- EAX = CL
- Compare EAX và EDX
- Nếu bằng thì lặp lại quá trình check như trên cho các kí tự tiếp theo trong FS và
MagicStr cho đến
hết, cuối cùng EAX = 1 còn không thì EAX = 0, EDI sẽ trỏ tới chuỗi MagicStr tiếp
theo và lại lặp lại quá
trình kiểm tra 10 kí tự đầu tiên trong FS với chuỗi MagicStr này.
Vậy để 10 kí tự đầu tiên thỏa mãn đoạn code này thì các FS[i] (i = 0 9) = Str1[Temp1]

Có tất cả 0x66 chuỗi MagicStr tất cả. Chúng ta hãy tìm cách copy tất cả các MagicStr
này và Paste vào
Notepad đ
ể còn dùng khi code Keygen (sử dụng Follow Value in Dump).
- Sau khi quá trình kiểm tra trên được thỏa mãn thì chương trình sẽ check tiếp :
Quá trình này kiểm tra như sau : Chương trình lấy giá trị Temp tính được ở trên đem
chia 0x66 lấy
phần dư, rồi đem so sánh với số lần lặp. Có nghĩa là EBX = Temp % 0x66 hay là
chúng ta phải lấy
chuỗi MagicStr thứ [Temp % 0x66] để tính 10 kí tự đầu tiên trong Serial chứ không
thể lấy ngẫu nhiên
bất kì một MagicStr nào để tính số Serial.
N

ếu 10 kí tự đầu tiên mà thỏa mãn đoạn code trên thì nó sẽ nhảy qua RETN và check
tiếp 5 kí tự còn
lại :
Trace tiếp :
Trace tiếp. Đoạn code này còn chuyển giá trị Temp (<100000) sang
dạng chuỗi.
Tiếp tục tới đây; nếu chỉ patch thì tại 18003B00 : Chuyển
75 à 74
Tại địa chỉ 18003AE9
ta Trace into
:
Đây chính là đoạn code check 5 kí tự còn lại trong FS. Quá trình kiểm
tra như sau :
- Đầu tiên nó check xem giá trị Temp có lớn hơn 100000 hay không. Nếu có thì SAR
Temp,1 cho đến
khi Temp < 100000
- Convert Temp thành xâu rồi lấy từng kí tự Temp[i] để tính :
+ EDX = Temp[i] % 20 = Temp2 – vị trí xuất hiện FS[i] (i = 10 14) trong chuỗi
Str1
+ FS[i] (i = 10 14) = Str1[Temp2]
OK tới đây ta có thể thấy toàn bộ quá trình check Serial của cái Game này. Và bây gi

là Keygen :
III. Keygen :
//Khai bao;

×