/*—————————————-*\
Để minh họa cho việc cracking software, chúng ta sẽ cùng xử 1 game của PopCap. Đây là trang có nhiều game hay. Dán link này vào 1 chương trình download manager nào đó để tải về game Mummy Maze Deluxe 1.1:
Sau khi tải về và cài đặt xong, chạy thử chương trình, bạn sẽ thấy các dấu hiệu của 1 phần mềm shareware như là:
– Có dòng “Register now!”
– Bị giới hạn số lần chơi và đòi phải đăng ký để tiếp tục chơi.
Code: hbb506
Thực ra thì có nhiều cách để crack game này, n để tiện cho các bạn newbie, dùng cách này cho dễ hiểu. Việc chúng ta phải làm bây giờ là bắt cái game này phải đồng ý bất cứ Name và Code nào mà chúng ta điền vào (0 bắn cái thông báo lỗi kia nữa).
Bây giờ thoát game, chuột phải lên biểu tượng của nó trên Desktop, chọn “Scan with PEiD”. PEiD sẽ báo game này coded bằng “Microsoft Visual C++ 6.0”. Như vậy là game này 0 bị pack hay protected.
Thoát PEiD, chuột phải lên biểu tượng game trên Desktop, chọn “Open with OllyDbg”. OllyDbg sẽ load nó lên (file “\Program Files\PopCap Games\Mummy Maze Deluxe\WinMM.exe”). Các bạn chờ 1 chút cho OllyDbg dịch file này ra mã ASM. Xong chuột phải lên CPU Window, chọn “Search for”—–>”All referenced text strings”. 1 cửa sổ mới bắn lên, các bạn chuột phải chọn “Search for text”. Gõ vào textbox dòng thông báo lỗi mà chúng ta đã ghi nhớ ở trên (“The registration number you entered is not valid for that name”). Tuy nhiên các bạn chỉ cần gõ vào textbox vài chữ đầu, chẳng hạn “the registration”, nhớ bỏ chọn “Case sensitive và chọn “Entire scope”, xong OK. Nó sẽ tìm cho chúng ta dòng text có nội dung như trên và hightlight dòng đó. Click đôi vào nó sẽ đưa chúng ta ra CPU Window:
0041EF0E 90 NOP
0041EF0F 90 NOP
0041EF10 /$ 6A FF PUSH -1
0041EF12 |. 68 A8DE4700 PUSH WinMM.0047DEA8 ; SE handler installation
0041EF17 |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
0041EF1D |. 50 PUSH EAX
0041EF1E |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP
0041EF25 |. 83EC 38 SUB ESP,38
0041EF28 |. 8A4424 03 MOV AL,BYTE PTR SS:[ESP+3]
0041EF2C |. 53 PUSH EBX
0041EF2D |. 55 PUSH EBP
0041EF2E |. 56 PUSH ESI
0041EF2F |. 894C24 10 MOV DWORD PTR SS:[ESP+10],ECX
0041EF33 |. 57 PUSH EDI
0041EF34 |. 884424 38 MOV BYTE PTR SS:[ESP+38],AL
0041EF38 |. BF D0224900 MOV EDI,WinMM.004922D0 ; ASCII “OK”
0041EF3D |. 83C9 FF OR ECX,FFFFFFFF
0041EF40 |. 33C0 XOR EAX,EAX
0041EF42 |. 33DB XOR EBX,EBX
0041EF44 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0041EF46 |. F7D1 NOT ECX
0041EF48 |. 49 DEC ECX
0041EF49 |. 895C24 3C MOV DWORD PTR SS:[ESP+3C],EBX
0041EF4D |. 51 PUSH ECX
0041EF4E |. 68 D0224900 PUSH WinMM.004922D0 ; ASCII “OK”
0041EF53 |. 8D4C24 40 LEA ECX,DWORD PTR SS:[ESP+40]
0041EF57 |. 895C24 48 MOV DWORD PTR SS:[ESP+48],EBX
0041EF5B |. 895C24 4C MOV DWORD PTR SS:[ESP+4C],EBX
0041EF5F |. E8 9C40FEFF CALL WinMM.00403000
0041EF64 |. 8A4C24 13 MOV CL,BYTE PTR SS:[ESP+13]
0041EF68 |. 53 PUSH EBX
0041EF69 |. 884C24 1C MOVa BYTE PTR SS:[ESP+1C],CL
0041EF6D |. 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C]
0041EF71 |. 895C24 54 MOV DWORD PTR SS:[ESP+54],EBX
0041EF75 |. E8 362AFEFF CALL WinMM.004019B0
0041EF7A |. BF 38444900 MOV EDI,WinMM.00494438 ; ASCII “The registration number you entered is not valid for that name.
0041EF7F |. 83C9 FF OR ECX,FFFFFFFF
0041EF82 |. 33C0 XOR EAX,EAX
0041EF84 |. 6A 01 PUSH 1
0041EF86 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0041EF88 |. F7D1 NOT ECX
———————————————————————————-
004205FF . C68424 D401000>MOV BYTE PTR SS:[ESP+1D4],3
00420607 . FF50 3C CALL DWORD PTR DS:[EAX+3C]
0042060A . 84C0 TEST AL,AL
0042060C . 75 09 JNZ SHORT WinMM.00420617
0042060E . 8BCD MOV ECX,EBP
00420610 . E8 FBE8FFFF CALL WinMM.0041EF10
00420615 . EB 60 JMP SHORT WinMM.00420677
———————————————————————–
00428F2D . C64424 4C 02 MOV BYTE PTR SS:[ESP+4C],2
00428F32 . FF52 3C CALL DWORD PTR DS:[EDX+3C]
00428F35 . 84C0 TEST AL,AL
00428F37 . 75 0A JNZ SHORT WinMM.00428F43
00428F39 . 8B4D 78 MOV ECX,DWORD PTR SS:[EBP+78]
00428F3C . E8 CF5FFFFF CALL WinMM.0041EF10
00428F41 . EB 4F JMP SHORT WinMM.00428F92
00428F43 > 8B0D 24134800 MOV ECX,DWORD PTR DS:[481324]
———————————————————————-
00435F05 . 8B8C24 D000000>MOV ECX,DWORD PTR SS:[ESP+D0]
00435F0C . 8A4424 13 MOV AL,BYTE PTR SS:[ESP+13]
00435F10 . 5F POP EDI
00435F11 . 5E POP ESI
00435F12 . 5D POP EBP
00435F13 . 5B POP EBX
00435F14 . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
00435F1B . 81C4 CC000000 ADD ESP,0CC
00435F21 . C2 0800 RETN 8
00435F24 90 NOP
——————————————————————
MOV AL,BYTE PTR SS:[ESP+13]
Chúng ta đang cần cho AL luôn bằng 1, vậy thì hãy thay lệnh này bằng lệnh:
MOV AL,1
bằng cách click đúp vào dòng lệnh tại 00435F0C, gõ vào textbox “MOV AL,1” (0 có dấu ngoặc kép) và hãy chắc chắn rằng “Fill with NOP’s” được chọn. Lúc này đoạn code sẽ được sửa thành:
00435F0C B0 01 MOV AL,1
00435F0E 90 NOP
00435F0F 90 NOP
—————————————-
Vậy là chúng ta đã crack xong game “Mummy Maze Deluxe 1.1” của PopCap Games
/*———————————cai nay copy ko biet co lam duco ko———-*\
KeyGen PDF Split/PDF Merge 2. 5
Download tại: http://www.adultpdf.com/
Chạy thử chương trình. Nó xuất hiện ngay cửa sổ đòi đăng ký bản FULL. Gõ đại vài ký tự vào đó và nhấn OK. Nó bắn thông báo “Series number error …”. Vì 0 đúng Key
Hộp thông báo nhìn giống như MessageBox API của Windows
Dùng PEiD scan thấy: “ASPack 2.12 -> Alexey Solodovnikov”
Như vậy soft này packed by ASPack 2.12
Chúng ta có thể UnPack nó bằng Tool nhưng ở đây ta sẽ 0 cần UnPack thành file mà chỉ UnPack in Memory để thấy được các hàm API mà nó sử dụng (tìm hàm MessageBox)
Load soft lên bằng OllyDbg. Có thông báo gì nhấn OK và No
Chúng ta sẽ đứng trên dòng lệnh PUSHAD. F8 1 cái để thực hiện lệnh này. Lúc này chuột phải vào thanh ghi ESP bên tay phải (Cửa sổ Registers) chọn “Follow in Dump”
Nhìn xuống góc trái dưới (cửa sổ Dump). Click chọn vào Byte đầu tiên, chuột phải chọn “Breakpoint—–>Hardware, on access—–>Byte”
F9 để run soft. OllyDbg sẽ đóng băng tại điểm ngắt vừa đặt (tại dòng lệnh JNZ). F8 đến lúc thực hiện xong lệnh RETN
Vào menu “Debug—–>Hardware breakpoints” và nhấn “Delete 1”
Giờ thì chuột phải vào CPU Window và chọn “Search for—–>All intermodular calls”
Click vào tab “Destination” để Olly sắp xếp tên hàm theo thứ tự. Tìm hàm MessageBoxA. Chuột phải vào hàm chọn “Set breakpoint on every call to MessageBoxA”
F9 để run soft. Cửa sổ Register của soft hiện ra như lúc ta chạy thử ban đầu. Lại gõ đại vài ký tự vào, chẳng hạn “123456”. Nhấn OK để Reg
Hê hê, Olly sẽ đóng băng tại hàm MessageBoxA:
0040D673 E8 A0631600 CALL pdfspme_.00573A18 ; JMP to USER32.MessageBoxA
0040D678 FF4D EC DEC DWORD PTR SS:[EBP-14]
0040D67B 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0040D67E BA 02000000 MOV EDX,2
0040D683 E8 24241500 CALL pdfspme_.0055FAAC
0040D62C 84C0 TEST AL,AL
0040D62E 75 67 JNZ SHORT pdfspme_.0040D697
Vậy chúng ta đặt tại đó 1 BreakPoint bằng cách nhấn F2.
F9 để run soft. Thông báo Key sai sẽ bắn ra. Cứ OK. Xong nhấn OK để Reg lại lần nữa. Olly sẽ đóng băng tại 0040D627
F7 để vào hàm. Dưới đây là toàn bộ code của hàm check Key:
0040DA6D 8BF2 MOV ESI,EDX
0040DA6F 85F6 TEST ESI,ESI
0040DA71 75 04 JNZ SHORT pdfspme_.0040DA77
0040DA73 33C0 XOR EAX,EAX
0040DA75 5E POP ESI
0040DA76 C3 RETN
0040DA77 803E 00 CMP BYTE PTR DS:[ESI],0
0040DA7A 75 04 JNZ SHORT pdfspme_.0040DA80
0040DA7C 33C0 XOR EAX,EAX
0040DA7E 5E POP ESI
0040DA7F C3 RETN
0040DA80 56 PUSH ESI
0040DA81 E8 72221400 CALL pdfspme_.0054FCF8
0040DA86 59 POP ECX
0040DA87 83F8 10 CMP EAX,10
0040DA8A 74 04 JE SHORT pdfspme_.0040DA90
0040DA8C 33C0 XOR EAX,EAX
0040DA8E 5E POP ESI
0040DA8F C3 RETN
0040DA90 33D2 XOR EDX,EDX
0040DA92 8BC6 MOV EAX,ESI
0040DA94 0FBE08 MOVSX ECX,BYTE PTR DS:[EAX]
0040DA97 83F9 41 CMP ECX,41
0040DA9A 7C 05 JL SHORT pdfspme_.0040DAA1
0040DA9C 83F9 5A CMP ECX,5A
0040DA9F 7E 04 JLE SHORT pdfspme_.0040DAA5
0040DAA1 33C0 XOR EAX,EAX
0040DAA3 5E POP ESI
0040DAA4 C3 RETN
0040DAA5 42 INC EDX
0040DAA6 40 INC EAX
0040DAA7 83FA 10 CMP EDX,10
0040DAAA ^7C E8 JL SHORT pdfspme_.0040DA94
0040DAAC 0FBE56 06 MOVSX EDX,BYTE PTR DS:[ESI+6]
0040DAB0 0FBE4E 0B MOVSX ECX,BYTE PTR DS:[ESI+B]
0040DAB4 03D1 ADD EDX,ECX
0040DAB6 81FA 9B000000 CMP EDX,9B
0040DABC 74 04 JE SHORT pdfspme_.0040DAC2
0040DABE 33C0 XOR EAX,EAX
0040DAC0 5E POP ESI
0040DAC1 C3 RETN
0040DAC2 B0 01 MOV AL,1
0040DAC4 5E POP ESI
0040DAC5 C3 RETN
Vì chuỗi Key của ta là “123456” nên cứ nhấn F8 sẽ nhảy đến 0040DA77. Tại đây thực hiện lệnh CMP BYTE PTR DS:[ESI],0. Kiểm tra xem ký tự đầu trong chuỗi Key có NULL 0? Nếu NULL thì thực hiện XOR EAX,EAX làm cho AL=0
Vì ký tự đầu trong chuỗi Key của ta là “1” nên cứ nhấn F8 sẽ nhảy đến 0040DA80. F8 đến 0040DA87. Tại đây thực hiện lệnh CMP EAX,10. Kiểm tra xem chiều dài chuỗi Key có phải 16 ký tự 0? (10(Hex) = 16(Dec)). Nếu 0 thì thực hiện XOR EAX,EAX làm cho AL=0
Vì chuỗi Key của ta là “123456” chỉ có 6 ký tự nên cứ nhấn F8 sẽ trả về AL=0 mà ta đang cần AL=1
Giả sử chuỗi Key của ta là 16 ký tự thì cứ nhấn F8 sẽ nhảy đến 0040DA90:
0040DA92 8BC6 MOV EAX,ESI
0040DA94 0FBE08 MOVSX ECX,BYTE PTR DS:[EAX]
0040DA97 83F9 41 CMP ECX,41
0040DA9A 7C 05 JL SHORT pdfspme_.0040DAA1
0040DA9C 83F9 5A CMP ECX,5A
0040DA9F 7E 04 JLE SHORT pdfspme_.0040DAA5
0040DAA1 33C0 XOR EAX,EAX
0040DAA3 5E POP ESI
0040DAA4 C3 RETN
0040DAA5 42 INC EDX
0040DAA6 40 INC EAX
0040DAA7 83FA 10 CMP EDX,10
0040DAAA ^7C E8 JL SHORT pdfspme_.0040DA94
Tại 0040DA97 sẽ tiến hành check ký tự đó bằng lệnh CMP ECX,41 (CMP=Compare; 41 là giá trị Hex của ký tự “A”)
Lệnh nhảy ngay dưới JL (Jump if Lower) nghĩa là nếu ký tự đó thấp hơn ký tự “A” sẽ nhảy đến 0040DAA1 (mà tại 0040DAA1 là thực hiện lệnh XOR EAX,EAX làm cho AL=0)
Nếu thõa mãn ĐK này thì tiếp tục check bằng lệnh CMP ECX,5A (5A là giá trị Hex của ký tự “Z”)
Lệnh nhảy ngay dưới JLE (Jump if Lower or Equal) nghĩa là nếu ký tự đó cao hơn ký tự “Z” sẽ thực hiện lệnh XOR EAX,EAX tại 0040DAA1 làm cho AL=0
Nếu cả 16 ký tự này đều thỏa mãn thì sẽ đến đoạn code:
0040DAB0 0FBE4E 0B MOVSX ECX,BYTE PTR DS:[ESI+B]
0040DAB4 03D1 ADD EDX,ECX
0040DAB6 81FA 9B000000 CMP EDX,9B
0040DABC 74 04 JE SHORT pdfspme_.0040DAC2
0040DABE 33C0 XOR EAX,EAX
0040DAC0 5E POP ESI
0040DAC1 C3 RETN
Tại 0040DAB0 sẽ đưa giá trị của ký tự thứ 12 trong chuỗi Key vào thanh ghi ECX
Tại 0040DAB4 sẽ cộng 2 giá trị này với nhau và lưu trong thanh ghi EDX
Tại 0050DAB6 sẽ so sánh tổng này với 9B (9B(Hex) = 155(Dec))
Nếu tổng này khác 9B sẽ thực hiện lệnh XOR EAX,EAX làm cho AL=0
Còn nếu tổng này = 9B sẽ nhảy đến đoạn code:
0040DAC4 5E POP ESI
0040DAC5 C3 RETN
Như vậy chuỗi Key của chúng ta phải có 16 ký tự. Các ký tự phải là các ký tự từ A->Z
Tổng của ký tự 7 và ký tự 12 phải bằng 155
Ví dụ: ILIKENGUYENTUANH
Còn ký tự 12 sẽ gán bằng 155 – đi giá trị ký tự 7
Dim Key(1 To 16) As String
Dim i As Integer
For i = 1 To 16
If i = 12 Then
Key(i) = Chr$(155 – Asc(Key(7)))
Else
Randomize
Key(i) = Chr$(Int((26 * Rnd) + 65))
End If
txtKey.Text = txtKey.Text & Key(i)
Next i
End Sub
Tự làm k.e.y.g.e.n 61 comments
Chào mừng bạn đến vớiSáng kiến kinh nghiệm hay
Xem điểm chuẩn lớp 10
Hướng dẫn mua bán BITCOIN => Bấm vào đây
Sách hay bấm vào đây
0 nhận xét Blogger 0 Facebook
Post a Comment
Cám ơn bạn đã phản hồi