của chúng ta tầm bậy các bạn ạ . Thế có ức ko cơ chứ :(( , mà cũng đúng thôi , nếu chúng ta nhập đúng thì chúng ta đã chẳng phải ngồi đây . Hihi ! :w00t: Khi chúng ta exit cái Dialog Box đó nó còn pop-up ra 1 cái nag nhắc nhở ta : "Please register " , đòi tiền như đòi nợ ấy . :sad: Biết rồi nói mãi , làm gì mà cứ nhắc hoài thế , chờ tý nữa tớ sẽ đưa Serial (not money ) cho ngay thôi mà . Hihi ! :P Ok , chúng ta hãy ghi nhớ lấy tất cả những thứ đó . - Bây giờ chúng ta hãy load chương trình vào trong OllyDbg . Nế u nó hiện ra 1 bảng thông báo thì cứ nhấn OK , sau đó nó lại cho ta chọn Yes (Analysis) & No (Analysis) . Ta chọn No (Analysis) . Sau đó click chuột phải chọn Search for / All referenced text strings để tìm chuỗi thông báo trên . Ặc ặc mấy 1 phút mà vẫn không thấy cái chuỗi thông báo đó đâu cả . Chẳng nhẽ chúng ta lại chịu bó tay trước thời cuộc sao . Không đâu các bạn cứ bình tĩnh , chúng ta lại sử dụng phương pháp Stack của anh Moonbaby . - Nhấn Ctrl + F2 để load lại chương trình vào trong OllyDbg . Nhấn F9 để Run chương trình . Chúng ta lạ i nhập FS như ở trên vào . Xong nhấn OK , xuất hiện thông báo : "Series number error , please check it and try again ". Giữ nguyên chương trình , quay trở lại Ollydbg , nhấn F12 , Olly sẽ dừng chương trình lại . Nhấn tiếp Alt + K để hiện cửa sổ : “Call stack of main thread “ . Ta thấy ngay thông báo : *** Ở đây chúng ta chú ý đến dòng màu đỏ : Code: Call stack of main thread Address Stack Procedure / arguments Called from Frame 0012E928 003218A9 ? USER32.MessageBoxA verypdf.003218A3 0012E92C 001502FE hOwner = 001502FE ('Please registe 0012E930 00337308 Text = "Series number error, pleas 0012E934 00000000 Title = NULL 0012E938 00000010 Style = MB_OK|MB_ICONHAND|MB_APPLM ***Double-click vào cột Called from của dòng này , chúng ta đến địa chỉ : Code: 0032189D 68 08733300 PUSH verypdf.00337308 ; ASCII "Series number error, please check it and try again." 003218A2 56 PUSH ESI 003218A3 FF15 34333300 CALL NEAR DWORD PTR DS:[333334] ; USER32.MessageBoxA ===> We’re here . 003218A9 68 FB030000 PUSH 3FB ===> Set BreakPoint here . 003218AE 56 PUSH ESI *** Sau khi đặt BP tại đây , Ollydbg sẽ dừng chương trình lại , nhấn F8 để xuất hiện lại thông báo : "Series number error, please check it and try again " Nhấn OK để chấp nhận thông báo này , chương trình sẽ dừng lại tại điểm BP mà chúng ta vừa đặt . Xoá điểm BP này đi . RETN , nhìn lên trên 1 chút chúng ta sẽ thấy đoạn code sau . Đây là tử huyệt , chúng ta sẽ đặt BP tại đây : Code: 00321849 FF15 2C333300 CALL NEAR DWORD PTR DS:[33332C] ; USER32.GetDlgItemTextA ===> Set BreakPoint Here . 0032184F 68 60A83300 PUSH verypdf.0033A860 ; ASCII "0361985" II/ Cracking : ***OK, sau khi đặt BP tại đó , chúng ta nhấn F9 để Run chương trình , ta sẽ thấy hộp thoại đăng kí xuất hiện l ại , sau khi đã nhập FS đầy đủ như ở trên ta đã làm , nhấn OK . Chúng ta sẽ quay trở lai Olly và chương trình sẽ Ice tại điểm mà chúng ta set BP. Nhìn xuống phía dưới 1 chút , chúng ta sẽ thấy hàm Call . Đây chính là lệnh gọi hàm kiểm tra Series : :w00t: Code: 00321854 E8 A7F7FFFF CALL verypdf.00321000 *** Ở đây chúng ta cũng thấy lệnh text thanh ghi EAX . Vì vậy chúng ta sẽ Trace Into vào trong hàm Call trên xem nó làm gì với FS của chúng ta : Code: 00321849 FF15 2C333300 CALL NEAR DWORD PTR DS:[33332C] ; USER32.GetDlgItemTextA ===> We're here . 0032184F 68 60A83300 PUSH verypdf.0033A860 ; ASCII "0361985" 00321854 E8 A7F7FFFF CALL verypdf.00321000 ===> gọi hàm check Serial . Trace Into 00321000 83EC 18 SUB ESP, 18 00321003 53 PUSH EBX 00321004 56 PUSH ESI 00321005 8B7424 24 MOV ESI, DWORD PTR SS:[ESP+24] ===> Đưa Input vào ESI 00321009 8D5424 08 LEA EDX, DWORD PTR SS:[ESP+8] 0032100D 57 PUSH EDI 0032100E 32DB XOR BL, BL 00321010 8A46 0E MOV AL, BYTE PTR DS:[ESI+E] ===> Đưa ký tự thứ 15 trong chuỗi FS vào AL 00321013 8A4E 0F MOV CL, BYTE PTR DS:[ESI+F] ===> Đưa ký tự thứ 16 trong chuỗi FS vào CL 00321016 52 PUSH EDX 00321017 884424 1C MOV BYTE PTR SS:[ESP+1C], AL ===> đoạn SS:[ESP+1C] chứa ký tự thứ 15 0032101B 885C24 1D MOV BYTE PTR SS:[ESP+1D], BL 0032101F 884C24 10 MOV BYTE PTR SS:[ESP+10], CL ===> đoạn SS:[ESP+10] chứa ký tự thứ 16 00321023 885C24 11 MOV BYTE PTR SS:[ESP+11], BL 00321027 E8 49150000 CALL verypdf.00322575 0032102C 8BF8 MOV EDI, EAX ===> Đưa ký tự thứ 16 trong chuỗi FS vào EDI 0032102E 8D4424 1C LEA EAX, DWORD PTR SS:[ESP+1C] ===> EAX chứa ký tự thứ 15 00321032 50 PUSH EAX 00321033 E8 3D150000 CALL verypdf.00322575 00321038 03F8 ADD EDI, EAX ===> lấy tổng của ký tự 15 + ký tự 16 0032103A 83C4 08 ADD ESP, 8 0032103D 83FF 0B CMP EDI, 0B ===> so sánh với 0B 00321040 74 09 JE SHORT verypdf.0032104B ==> Nếu bằng thì tiếp tục quá trình tính toán Serial . 00321042 5F POP EDI 00321043 5E POP ESI 00321044 33C0 XOR EAX, EAX 00321046 5B POP EBX 00321047 83C4 18 ADD ESP, 18 0032104A C3 RETN 0032104B 8A0E MOV CL, BYTE PTR DS:[ESI] ===> Đưa ký tự thứ nhất trong chuỗi FS vào CL 0032104D 8A56 01 MOV DL, BYTE PTR DS:[ESI+1] ===> Đưa ký tự thứ 2 trong chuỗi FS vào DL 00321050 8D4424 0C LEA EAX, DWORD PTR SS:[ESP+C] 00321054 884C24 18 MOV BYTE PTR SS:[ESP+18], CL 00321058 50 PUSH EAX 00321059 885C24 1D MOV BYTE PTR SS:[ESP+1D], BL 0032105D 885424 10 MOV BYTE PTR SS:[ESP+10], DL 00321061 885C24 11 MOV BYTE PTR SS:[ESP+11], BL 00321065 E8 0B150000 CALL verypdf.00322575 0032106A 8D4C24 1C LEA ECX, DWORD PTR SS:[ESP+1C] 0032106E 8BF8 MOV EDI, EAX 00321070 51 PUSH ECX 00321071 E8 FF140000 CALL verypdf.00322575 00321076 03F8 ADD EDI, EAX ===> lấy tổng của ký tự thứ nhất + ký tự thứ 2 00321078 83C4 08 ADD ESP, 8 0032107B 83FF 09 CMP EDI, 9 ===> so sánh với 9 0032107E 74 09 JE SHORT verypdf.00321089 ===> Nếu bằng thì tiếp tục quá trình tính toán Serial . 00321080 5F POP EDI 00321081 5E POP ESI 00321082 33C0 XOR EAX, EAX 00321084 5B POP EBX 00321085 83C4 18 ADD ESP, 18 00321088 C3 RETN 00321089 8A4E 05 MOV CL, BYTE PTR DS:[ESI+5] ===> Đưa ký tự thứ 6 trong chuỗi FS vào CL 0032108C 33C0 XOR EAX, EAX 0032108E 80F9 26 CMP CL, 26 ===> so sánh ký tự thứ 6 với ký tự ' & ' 00321091 5F POP EDI 00321092 5E POP ESI 00321093 5B POP EBX 00321094 0F94C0 SETE AL 00321097 83C4 18 ADD ESP, 18 0032109A C3 RETN 00321859 83C4 04 ADD ESP, 4 0032185C 85C0 TEST EAX, EAX ===> kiểm tra EAX= 0 ? 0032185E 74 39 JE SHORT verypdf.00321899 ===> nếu EAX=0 thì nhảy đến bắn Bad boy . 00321860 6A 40 PUSH 40 00321862 68 70733300 PUSH verypdf.00337370 ; ASCII "Thank you purchased the" 00321867 68 3C733300 PUSH verypdf.0033733C ; ASCII "Thank you purchased the PDF Password Remover v2.2." *** Như vậy theo phân tích ở trên ta thấy Real Serial của chương trình sẽ phải thoả mãn các yêu cầu sau : :w00t: 1. Chiều dài tối thiểu phả i là 16 ký tự 2. ở vị trí thứ 6 trong chuỗi Ser phải là ký tự mặc định ‘ & ’ 3. Các ký tự ở vị trí S[0] , S[1] , S[14] , S[15] phải là các ký tự thoả mãn điều kiện sau : S[0] + S[1] = 0x9 S[14] + S[15] = 0xB 4. Các ký tự còn lại là mặc định . *** Từ đó ta có thể dễ dàng suy ra Real Serial của chương trình là : 18345&0361985056 ****** Chúng ta lại làm tiếp những động tác quen thuộc cuối cùng , tắt Ollydbg , chạy thử chương trình , nhập vào : Series : 18345&0361985056 Hoặc : Series : 54321&0123456738 OK ! Done ! Chương trình cảm ơn chúng rối rít ta kìa “thank you ……”, ngại quá :wub: (chúng ta đâu có đưa money cho họ , chỉ đưa vài con số thui mà , có gì đâu mà thanx ) . Thế mà vừa lúc trước mắng ta te tua : serial tầm bậy . Đã bảo là chờ tý sẽ có Serial ngay mà lại ko nghe , cứ pop-up ra nhắc nhở ta đăng ký hoài . Hihiiiiiiiii…… ! :laugh: Enjoy ! SOURCE CODE FOR PDF Password Remover v2.2 Code: char reaSerial[20]={0}; char reaRandChart[37]="1478523690POIUYTREWQASDFGHJKLMNBVCXZ"; int i=0; i=0; while ( i < 16 ) { reaSerial[i] = reaRandChart[rand()%36]; i++; } reaSerial[0] = reaRandChart[rand()%8]; reaSerial[1] = (0x9 - ((reaSerial[0] & 0xFF) - 0x30)) + 0x30; reaSerial[14] = reaRandChart[rand()%9]; reaSerial[15] = (0xB - ((reaSerial[1] & 0xFF) - 0x30)) + 0x30; reaSerial[5] = 0x26; SetDlgItemText(IDC_Serial,reaSerial); Chúc thành công ! :) SoftWare : PDF Split-Merge v1.1 Copyright by : Copyright @ 2001-2003 verypdf.com Inc . . 00321860 6A 40 PUSH 40 00321862 68 70 733300 PUSH verypdf.003 373 70 ; ASCII "Thank you purchased the" 003218 67 68 3C733300 PUSH verypdf.003 373 3C ; ASCII "Thank you purchased. CALL verypdf.00322 575 0032106A 8D4C24 1C LEA ECX, DWORD PTR SS:[ESP+1C] 0032106E 8BF8 MOV EDI, EAX 00321 070 51 PUSH ECX 00321 071 E8 FF140000 CALL verypdf.00322 575 00321 076 03F8 ADD EDI, EAX. ===> lấy tổng của ký tự thứ nhất + ký tự thứ 2 00321 078 83C4 08 ADD ESP, 8 0032107B 83FF 09 CMP EDI, 9 ===> so sánh với 9 0032107E 74 09 JE SHORT verypdf.00321089 ===> Nếu bằng thì tiếp