Packed : N/A
Language : Microsoft Visual C++ 6.0
Crack Tools : OllyDbg 1.09d, PEiD v0.92
Unpack tools : N/A .
Request : Real Serial .
Introduction : PDF Split-Merge v1.1
PDF Split-Merge is a stand-alone application that can be used to split, merge, and
manage your PDF files, PDF Split- Merge is offered as an easy to use GUI (Graphical
User Interface) application, and a command line application.
PDF Split-Merge is used to split files by pages, you can split the file into single pages or
save every a few pages as a new file, it also can be used to merge multiple PDF files or
selected pages from one or more files into a PDF file, preservation of original links, and
form fields.
PDF Split-Merge software is a standalone program and does not require Adobe Acrobat,
or even Acrobat Reader.
I/ Information :
- Now , bây giờ chúng ta lại tiếp tục lôi đồ nghề ra nào . Và như được lập trình sẵn ta lại
làm :wink: : Dùng PEid v0.92 để Detect , chúng ta biết chương trình không bị Pack , và
được viết bằng Microsoft Visual C++ 6.0 . Phù , thế là không phải Unpack . Hihiiii……!
:cool:
- Vẫn là động tác quen thuộc :smiling: : Chạy thử chương trình , chúng ta thấy hiện lên
một 1 Dialog Box : “Please register PDF Split-Merge v1.1”, và chương trình chỉ
cho
phép chúng ta dùng thử 10 lần (chậc chậc…. sao ít thế :pinch: ) nếu chúng ta ko đưa
money cho họ và đổi lại họ sẽ đưa số Serial cho chúng ta . Đưa money để buy soft á .
Nghe hơi lạ tai :blink2: , chúng ta đâu có thói quen này , và lần này cũng vậy thôi hãng
VeryPdf ạ (trừ khi Free All cho chúng ta )! Hihiiiii :D Muốn vậy thì chúng ta chỉ có
1 cách duy nhất là Kill & Kill nó thôi . Thông cảm nhé hãng VeryPdf , tớ còn đang là SV
chưa earn $ được, với lại $ còn phải dùng vào nhiều việc lém . Hihiiii…… ! :)
- OK ! bây giờ nhìn vào Dialog ta thấy mã ID của Software : Product ID :
[ZLTA987654325JNX] (cái này ta ko cần quan tâm làm gì cho mệt óc ) . Nhìn xuống
phía dưới là ch
ỗ mà ta phải nhập Series , đây mới là chỗ ta cần :wink: . OK ! ta nhập đại
vào 1 cái Series xem nó bảo sao . Ở đây em nhập là : Series : 0361985 . Nhấn OK . Oh !
Tất lẽ dĩ ngẫu là 1 cái nag sẽ văng ra, đập ngay vào mặt chúng ta ( ko văng nag ra mới là
chuyện lạ :-o ) : "Series number error , please check it and try again " . Nó chửi
Serial của chúng ta tầm bậy các bạn ạ . Thế có ức ko cơ chứ , ức đến tận cổ :(( , đã vậy
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 ! :laugh:
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 đó 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 . :w00t:
- 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
0012E178 100019C9 ? USER32.MessageBoxA verypdf.100019C3
0012E17C 001B02FE hOwner = 001B02FE ('Please registe
0012E180 100172C4 Text = "Series number error, pleas
0012E184 00000000 Title = NULL
0012E188 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:
100019BD 68 C4720110 PUSH verypdf.100172C4 ; ASCII "Series
number error, please check it and try again."
100019C2 56 PUSH ESI
100019C3 FF15 3C330110 CALL NEAR DWORD PTR
DS:[<&USER32.Mess>; USER32.MessageBoxA ===> We’re here .
100019C9 68 FB030000 PUSH 3FB ===> Set BreakPoint here .
100019CE 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:
10001969 FF15 34330110 CALL NEAR DWORD PTR DS:[<&USER32.GetD>;
USER32.GetDlgItemTextA ===> Set BreakPoint Here .
1000196F 68 20A80110 PUSH verypdf.1001A820 ; 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:
10001974 E8 F7F7FFFF CALL verypdf.10001170
*** Ở đ
â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:
10001969 FF15 34330110 CALL NEAR DWORD PTR DS:[<&USER32.GetD>;
USER32.GetDlgItemTextA ===> We're here .
1000196F 68 20A80110 PUSH verypdf.1001A820
10001974 E8 F7F7FFFF CALL verypdf.10001170 ===> gọi hàm check Serial
.
Trace Into
10001170 83EC 18 SUB ESP, 18
10001173 53 PUSH EBX
10001174 56 PUSH ESI
10001175 8B7424 24 MOV ESI, DWORD PTR SS:[ESP+24] ===> Đưa Input
vào ESI
10001179 8D5424 08 LEA EDX, DWORD PTR SS:[ESP+8]
1000117D 57 PUSH EDI
1000117E 32DB XOR BL, BL
10001180 8A46 0E MOV AL, BYTE PTR DS:[ESI+E] ===> Đưa ký tự thứ 15
trong chuỗi FS vào AL
10001183 8A4E 0F MOV CL, BYTE PTR DS:[ESI+F] ===> Đưa ký tự thứ
16 trong chuỗi FS vào CL
10001186 52 PUSH EDX
10001187 884424 1C MOV BYTE PTR SS:[ESP+1C], AL ===> đoạn
SS:[ESP+1C] chứa ký tự thứ 15
1000118B 885C24 1D MOV BYTE PTR SS:[ESP+1D], BL
1000118F 884C24 10 MOV BYTE PTR SS:[ESP+10], CL ===> đoạn
SS:[ESP+10] chứa ký tự thứ 16
10001193 885C24 11 MOV BYTE PTR SS:[ESP+11], BL
10001197 E8 55150000 CALL verypdf.100026F1
1000119C 8BF8 MOV EDI, EAX ===> Đưa ký tự thứ 16 trong chuỗi FS vào
EDI
1000119E 8D4424 1C LEA EAX, DWORD PTR SS:[ESP+1C] ===> EAX
chứa ký tự thứ 15
100011A2 50 PUSH EAX
100011A3 E8 49150000 CALL verypdf.100026F1
100011A8 03F8 ADD EDI, EAX ===> lấy tổng của ký tự 15 + ký tự 16
100011AA 83C4 08 ADD ESP, 8
100011AD 83FF 0B CMP EDI, 0B ===> so sánh với 0B
100011B0 74 09 JE SHORT verypdf.100011BB ==> Nếu bằng thì tiếp tục
quá trình tính toán Serial .
100011B2 5F POP EDI
100011B3 5E POP ESI
100011B4 33C0 XOR EAX, EAX
100011B6 5B POP EBX
100011B7 83C4 18 ADD ESP, 18
100011BA C3 RETN
100011BB 8A0E MOV CL, BYTE PTR DS:[ESI] ===> Đưa ký tự thứ nhất
trong chuỗi FS vào CL
100011BD 8A56 01 MOV DL, BYTE PTR DS:[ESI+1] ===> Đưa ký tự thứ 2
trong chuỗi FS vào DL
100011C0 8D4424 0C LEA EAX, DWORD PTR SS:[ESP+C]
100011C4 884C24 18 MOV BYTE PTR SS:[ESP+18], CL
100011C8 50 PUSH EAX
100011C9 885C24 1D MOV BYTE PTR SS:[ESP+1D], BL
100011CD 885424 10 MOV BYTE PTR SS:[ESP+10], DL
100011D1 885C24 11 MOV BYTE PTR SS:[ESP+11], BL
100011D5 E8 17150000 CALL verypdf.100026F1
100011DA 8D4C24 1C LEA ECX, DWORD PTR SS:[ESP+1C]
100011DE 8BF8 MOV EDI, EAX
100011E0 51 PUSH ECX
100011E1 E8 0B150000 CALL verypdf.100026F1
100011E6 03F8 ADD EDI, EAX ===> l
ấy tổng của ký tự thứ nhất + ký tự
thứ 2
100011E8 83C4 08 ADD ESP, 8
100011EB 83FF 09 CMP EDI, 9 ===> so sánh với 9
100011EE 74 09 JE SHORT verypdf.100011F9 ===> Nếu bằng thì tiếp tục
quá trình tính toán Serial .
100011F0 5F POP EDI
100011F1 5E POP ESI
100011F2 33C0 XOR EAX, EAX
100011F4 5B POP EBX
100011F5 83C4 18 ADD ESP, 18
100011F8 C3 RETN
100011F9 8A4E 05 MOV CL, BYTE PTR DS:[ESI+5] ===> Đưa ký tự thứ 6
trong chuỗi FS vào CL
100011FC 33C0 XOR EAX, EAX
100011FE 80F9 24 CMP CL, 24 ===> so sánh ký tự thứ 6 với ký tự ' $ '
10001201 5F POP EDI
10001202 5E POP ESI
10001203 5B POP EBX
10001204 0F94C0 SETE AL
10001207 83C4 18 ADD ESP, 18
1000120A C3 RETN
10001979 83C4 04 ADD ESP, 4
1000197C 85C0 TEST EAX, EAX ===> kiểm tra EAX= 0 ?
1000197E 74 39 JE SHORT verypdf.100019B9 ===> nếu EAX=0 thì nhảy
đến bắn Bad boy .
10001980 6A 40 PUSH 40
10001982 68 28730110 PUSH verypdf.10017328 ; ASCII "Thank you
purchased the"
10001987 68 F8720110 PUSH verypdf.100172F8 ; ASCII "Thank you
purchased the PDF Split-Merge v1.1."
1000198C 56 PUSH ESI
*** 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 :
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à :
63210$7890123456
****** 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 :