MSV's Blog – Chuyển nhà sang http://msv-vn.blogspot.com

Chuyển nhà sang http://msv-vn.blogspot.com

  • LINK QUẢNG CÁO

    softprovn

Hướng dẫn crack Internet Download Manager

Posted by MSV trên 13/10/2008

Phần mềm này quá nổi tiếng rồi, chắc có lẽ tôi không nên giới thiệu thêm về nó. Có chăng chỉ là 1 chút ít thông tin “ngoài lề” nhưng cần thiết trong quá trình crack.

1. Crack tools

– OllyDBG: Disassembler
– PEiD with plugin Krypto ANAlyzer: scan code.

Download tại đây:

http://www.softpedia.com/get/Programming/Packers-Crypters-Protectors/PEiD-updated.shtml
http://www.ollydbg.de/

2. Information software

Cài đặt, run process. Vào phần Help\About ta thấy

Bấm vào nút đăng kí, nhập fake username/code ta thấy bad nag hiển thị

3. Information code

Dùng PEiD scan ta thấy nó code bằng Microsoft Visual C++ 6.0 [Overlay]. Với plugin Krypto ANALyzer, ta lại biết thêm có 4 crypto.

Hờ hờ… Nếu bạn đă từng crack IDM th́ bạn sẽ nhận thấy sự khác biệt về code của chúng ở ngay chỗ này đây. Các version trước 5.11 build 5 hầu như đều dùng UPX để pack, nhưng hông hiểu sao cái ver này lại không bị pack kiểu đó nữa. Có lẽ các nhà sx phần mềm IDM có chiêu ǵ mới chăng? Cũng chính v́ lẽ đó mà các file patch cũ không sử dụng được cho version này nữa!
IDM ver 5.11 build 5 này bị “Overlay” và “Crypto”. Bạn có thể unpack để làm mất overlay, dùng DeCrypto để làm mất crypto. Nhưng khoan vội hăy làm. Cứ load vào OllyDBG thử xem, bạn vẫn có thể dễ dàng nhận thấy những thông tin quen thuộc! Với những thông tin này, tôi lờ mờ đoán rằng không cần unpack và decrypto mà vẫn có thể crack được nó.
Do đây là soft register và sau đó nó kiểm tra online nên chú ư trong quá tŕnh crack, chúng ta phải t́m hết những điểm cần thiết để patch (sau khi crack xong, tôi đếm lại có tới 23 điểm!).

4. Phương pháp crack

– Dùng stack để tìm offset
– Patch nút register trước, làm cho đăng kí thành công, từ đó suy ra chỗ mà IDM kiểm tra thông tin soft đă được registered hay chưa mỗi khi nó start.

5. Crack it

Target file: IDMan.exe
Tắt IDM (tắt hoàn toàn, không c̣n thấy biểu tượng ở dưới systemtray), load IDMan.exe vào OllyDBG, ta dừng tại EOP

Để dễ dàng theo dõi, tôi xin chia ra làm 2 phần. Trước tiên, ta patch “Registration” trước để lấy thông tin (phần 1). Sau đó, dựa trên thông tin của phần 1, ta tìm cách patch để IDM hoàn toàn thuộc về mì́nh (phần 2).

Phần 1: Registration

Như ta đă phân thấy ở /*phần 2. Information soft */, sau khi nhập fake user/code th́ IDM bắn bad nag. Vậy ta thử t́m xem trong phần referenced text strings của nó có chứa chuỗi này không?
Chuột phải vào khung “code windows”, chọn “Search for >> All referenced text strings”, cửa sổ [R] bật ra, ta thử t́m chuỗi “You have entered incorrect Serial Number…” —> không t́m được nó nằm ở đâu cả. Điều này cũng phải thôi v́ code nó có dạng Overlay, nếu bạn unpack cho mất Overlay th́ sẽ thấy chuỗi này. Nhưng thôi, ta c̣n 1 chiêu khác khá hiệu quả để t́m chuỗi, đó là dùng stack. Now! Bây giờ bấm F9 1phát để run process nhé.
Khi OllyDBG run hoàn toàn, vào menu register của IDM nhập fake user/code (với serial =1234567890), sau khi IDM bắn nag ra. Quay trở lại OllyDBG, bấm F12 để tạm dừng chương tŕnh. Bấm tiếp ALT + K để mở stack, ta thấy:

Tôi đánh dấu 2 khung quan trọng bằng số 1 và số 2. Khung số 2 sử dụng hàm MessageBoxA quen thuộc để hiển thị box nag, nhưng trước đó, tiến tŕnh chuẩn bị cho việc bắn nag ta lại thấy ở khung số 1 (tại address 004A1441) – tại đây, ḍng chữ “You have entered incorrect Serial Number…” đă lấp ló xuất hiện. Nó load vào stack để chuẩn bị cho việc hiển thị nag.
Như vậy, ta phát cho address 004A1441 cái break point xem sao. Bấm kép vào cột “Called from”, ḍng tại khung 1, ta được OllyDBG quay về cửa sổ [C], bấm phím F2 để set breakpoint tại điểm này.

Chúng ta cũng chú ư rằng, tại address này có đến 5 chỗ jump đến, tất cả là mă nhăy JMP, có nghĩa là phải có ít nhất 5 trường hợp dẫn đến sai user/code.
Để đón đầu, bây giờ chúng ta set cho mỗi address dẫn đến sai use/code 1 cái breakpoint, và nhớ đặt commnet theo thứ tự như trên để dễ phân biệt. Đồng thời lần lên phía trên vài chục ḍng, set trên đầu PUSH của nó 1 cái breakpoint nữa.

Rồi, bây giờ bấm F9 vài lần để run hoàn toàn, trở lại IDM, bấm tắt bad nag, bấm lại nút OK để đăng kí. OllyDBG ice tại đầu PUSH mà ta vừa set breakpoint phía trên. Tiếp tục bấm F8 để trace cho đến ḍng như h́nh dưới:

Chú ư tại đây nhé, bấm F8 lần nữa, nó nhảy qua 004A1441 – tức là chỗ đă Call nag. Bấm F9 để run luôn, OllyDBG không bị ice tại các chỗ mà ta đă set break point như h́nh 6 (các chỗ mà ta đặt comment- sai user/code (1)..) mà nó chỉ ice tại 004A1441. Như vậy, ta suy đoán “đường dẫn đến khung thành” bắt đầu đâu đó từ đoạn 004A1430 –> 004A1441 cho nên ta đặt breakpoint hết các điểm trong dăy này xem.

Rồi, coi như bạn đă làm theo hướng dẫn, bây giờ bấm F9 để xả nag, xong bấm lại OK để tiếp tục đăng kí, OllyDBG ice tại đầu PUSH, bấm F2 để xoá breakpoint tại điểm này đi (v́ không c̣n cần thiết nữa), tiếp tục bấm F9 cho nó RUN luôn. Ồ, nó ice rồi, ngay tại 004A143E

Địa chỉ này được nhảy đến từ 004A1B4C, mă nhảy JMP. Ta lần đến địa chỉ này xem

Ồ, lần này ta lại thấy rằng, để mă nhảy JMP này có điều kiện thực thi, th́ nó phải bắt nguồn từ 004A1B3F, địa chỉ dịch chuyển chuỗi ASCII “You have entered incorrect Serial Number. Please don’t mix 0(zero) and O(ou), I and 1 while typing your S/N! CUT and PASTE your S/N!” từ 00BDADE0 vào EAX, mà tại 004A1B3F ta lại thấy dấu “>”, dấu hiệu từ nơi khác jump đến. Nh́n xuống chỗ khoanh tṛn, ta biết được địa chỉ này được jump đến từ 004A153C. Set 2 cái break point như trong h́nh để làm của. Xong nhảy đến vị trí 004A153C xem!

Hờ hờ… Đây là mă nhảy JNZ – thực thi khi sự so sánh ở phía trên (CMP ECX,17) là không thoả điều kiện. Tôi không cần biết CMP nó so sánh cái ǵ mà chỉ cần biết rằng một khi JNZ thực thi th́ nó sẽ nhảy đến nag thông báo sái user/code!
Như vậy, để vô hiệu hoá mă nhảy này, có nghĩa là cho dù kết quả so sánh CMP như thế nào đi chăng nữa th́ cũng chỉ có 1 con đường để đi qua, th́ không ǵ hay hơn hết, chúng ta edit lệnh JNZ thành NOP (bằng cách đặt thanh sáng xẩm tại vị trí đó, ấn phím space, ghi vào NOP).
Lệnh JNZ trên có 6 byte, nên sau khi NOP ta thấy có 6 byte (hex=90) sinh ra. Sau khi NOP xong, nhớ set 1 breakpoint tại address NOP đầu tiên.
Rồi, bây giờ bấm F9 vài lần và xả nag. Bấm lại OK của IDM để đăng kí, chúng ta thấy nó ice tại chỗ vừa set breakpoint.

Bấm F9 để tiếp tục. Oh, bây giờ nó lại ice tại vị trí 004A16AB có comment “Sai user/code (1)” ở h́nh 06 trên

Lần lên phía trên, ngay vị trí 004A169A có dấu “>” nơi khác jump đến, ta cũng thấy 1 chuỗi quen thuộc. Nếu ṭ ṃ, bạn có thể chuột phải tại vị trí này, chọn “Find referenced to >> Address constant”, bạn sẽ thấy có khoảng 8 chỗ chứa địa chỉ này (lúc đầu tôi suy đoán có ít nhất là 5 chỗ dẫn đến sai user/code như h́nh 6, bây giờ bạn đă thấy được điều đó là đúng). OK, cái này để bạn “ngâm kíu” sau, c̣n mục đích của tôi là chỉ cần “đăng kí được” để lấy thông tin làm cơ sở patch.
Trở lại tiến tŕnh, theo kinh nghiệm ứng dụng vào trường hợp này th́ chúng ta nên set 2 cái break point. 1 cái tại dấu “>” c̣n 1 cái th́ phía trên nó (bạn làm như trong h́nh nhé). Mục đích của việc này là để xem có phải IDM so sánh từ nơi khác và từ nơi khác này nhảy đến báo hịêu sai user/code, hay là nó debug thẳng !?
Rồi, bây giờ bấm F9 vài lần để xả nag. Xong bấm lại OK của IDM để tiếp tục đăng kí. OllyDBG ice tại vị trí NOP phía trên, bấm bỏ break point tại vị trí NOP này đi. Bấm tiếp F9 để run. Oh, OllyDBG ice tại vị trí 4A169A, vị trí được jump từ nơi khác đến. Theo h́nh trên, vị trí này được jump từ address 004A1683. Ta nhảy đến đó xem! Vị trí này cũng gần ở đó.

Đoạn lệnh tôi bôi đen phía trên sẽ so sánh chiều dài chuỗi serial mà bạn đă nhập vào. Nếu chiều dài chuỗi <23 kí tự, lập tức lệnh JE sẽ thực thi và nhảy đến bad nag. Ngược lại th́ lệnh này không thực thi. Như vậy, ta cũng NOP lệnh này để “con đường nào cũng qui về 1 mối” luôn (hoặc nếu bạn không muốn NOP, th́ nên nhập serial ít nhất có 23 kí tự số). OK!, tôi xem như bạn đă NOP lệnh này. Bây giờ bấm F9 vài lần để xả bad nag. Xong bấm OK của IDM để đăng kư lại.
Rồi…, OllyDBG đă ice tại 00A1698, tại lệnh nhảy JE. Nếu lệnh này thực thi th́ nó sẽ nhảy qua khỏi address 004A16AB – address chứa thông báo sai user/code. Vậy điều ǵ sẽ xảy ra nếu lệnh này không thực thi ? Cho nên để chắc ăn, chúng ta edit lại lệnh này thành JMP cho nó luôn nhảy bất kể kết quả so sánh thế nào.

Sau khi edit xong, bấm F9 run nó để xem kết quả thế nào ?

Olàla… OllyDBG lại 1 lần nữa ice tại address 004A1722 – address chứa comment “sai username (2)” của h́nh 06 – chứa string của bad nag. Lần lên vị trí 004A1711 cách vị trí ice vài ḍng, ta thấy có dấu hiệu “>” nơi khác jump đến. Cụ thể là tại 2 vị trí 004A1704, 004A1708. Ta set 2 cái breakpoint cho 2 vị trí này. Xong ấn F9 vài lần để xả bad nag và ấn OK của IDM để đăng kí lại, OllyDBG ice tại vị trí JMP mà ta vừa edit, ấn tiếp F9 ta thấy nó ice tại 004A1704 trong h́nh trên.

Tại đây, ta thấy sẽ có 3 trường hợp xảy ra đều dẫn đến sự xuất hiện của bad nag:
– 1. Nếu JNZ tại 004A1704 thực thi –> Bad nag.
– 2. Vượt qua cửa ải 1 trên, nếu JE tại 004A1708 thực thi –> Bad nag.
– 3. Vượt qua 2 cửa ải trên, nếu JE tại 004A170F không thực thi –> Bad nag.
Như vậy, nếu ta NOP lệnh JNZ tại 004A1704, NOP lệnh JE tại 004A1708, edit JE tại 004A170F thành JMP 004A1727 th́ sẽ nhảy qua address chứa bad nag. Thế nhưng, làm vậy th́ dài ḍng quá, tại sao ta không edit lệnh JNZ tại 004A1704 thành JMP 004A1727 luôn cho rồi ?!

Sau khi edit xong. Bấm F8 để trace, nó nhảy đến 004A1727, nếu trace tiếp tục th́ ta sẽ thấy nó sẽ thao tác “cái ǵ đó trong “HKEY_LOCAL_MACHINE\SOFTWARE\Internet Download Manager”. Thôi nhiêu đó cũng được, bây giờ bấm F9 để tiếp tục RUN thử xem…. Hàhà… Đăng kí thành công rồi.

Nó không thông báo “Thank you…” hay ǵ ǵ đó. Nhưng ngược lại, vào giao diện của IDM bấm nút “Registration” th́ thấy nó đă mờ đi. Mở About lên th́ phần about này đă khác hẳn ở các chỗ mà tôi đă khoanh tṛn trong h́nh 1.
OK, bây giờ ta save lại kết quả. Bấm chuột phải trong khung “code window”, chọn “Copy to executable >> All modifications >> Copy all”, cửa sổ [D] xuất hiện, tắt cửa sổ này đi, OllyDBG hỏi có lưu lại thay đổi không, bấm YES và lưu lại với tên file là IDMan_Patch.exe nằm trong cùng thư mục cài đặt IDM.
Sau khi lưu xong, bấm CTRL +F2 để restart lại. Mở thư mục cài IDM lên, chạy file IDMan_Patch.exe thử xem! Vẫn là chưa đăng kí. Như vậy ta có cái nh́n sơ bộ về IDM. Nó kiểm tra xem soft đă được đăng kí hay chưa khi start.
Tóm lại, trong phần đăng kí này ta patch 4 điểm:

004A153C 0F85 FD050000 JNZ IDMan.004A1B3F
—> Nop 6byte
004A1683 74 15 JE SHORT IDMan.004A169A
—> Nop 2byte
004A1698 74 16 JE SHORT IDMan.004A16B0
—->004A1698 EB 16 JMP SHORT IDMan.004A16B0
004A1704 75 0B JNZ SHORT IDMan.004A1711
—> 004A1704 EB 21 JMP SHORT IDMan.004A1727


Phần 2: Patch with information registration

Theo thông tin nhận được từ phần 1, ở h́nh 19. Khi ta đăng kí xong th́ IDM “làm cái ǵ đó” trong “HKEY_LOCAL_MACHINE\SOFTWARE\Internet Download Manager”. Vậy bây giờ ta thử mở registry theo nhánh đó lên xem.

Oh, th́ ra nó lưu trữ thông tin đăng kí trong đây. Thế th́ tại sao chúng ta không lần theo dấu vết này để patch? Có thể đây chính là tử huyệt của IDM lắm chứ.
OK! Tắt Regedit đi, trở lại OllyDBG, bấm CTRL + F2 để restart IDM. Chuột phải vào code window, chọn “Search for >> All referenced text strings”, cửa sổ [R] bật ra, ta thử t́m chuỗi “HKEY_LOCAL_MACHINE\SOFTWARE\Internet Download Manager” xem nó có xuất hiện đâu không. Sau đó set BreakPoint tại tất cả các chỗ vừa t́m được (tôi t́m được khoảng 10 chỗ có chuỗi này).
Bấm 1 phát phím F9 để RUN. Lập tức OllyDBG ice tại 00423B2F:

Tôi đặt comment cho nó là +1. Bấm F9 1 phát nữa, IDM run hoàn toàn! Quái lạ, vậy c̣n khoảng 9 chỗ chứa chuỗi trên nó sử dụng vào đâu ? Sau khi xem xét, tôi thấy có 2 chỗ dùng để sử dụng cho phần About và Registration. Như vậy, ít ra th́ c̣n 7 chỗ nữa.
Thôi, bây giờ chịu khó bấm CTRL + F2 để restart lại, bấm F9 để run cho nó ice tại 00423B2F trên. Ta sẽ xem xét đường đi nước bước của nó. Trace vài ḍng, ta xuống tới đây (điều kiện để xuống tới đây: Bạn phải đăng kí thành công trong phần 1. Tức là trong registry của bạn xuất hiện nhánh như h́nh registry editor trên).

Bạn tự phân tích đoạn code trên nhé, những chỗ mà tôi set BreakPoint, tôi sẽ edit chúng lại thành NOP để cho nó không thực thi nữa.
Tiếp tục:

Tiếp tục trace thêm 1 đoạn nữa, bạn sẽ tới đây

Tại BreakPoint h́nh trên, lệnh JNZ sẽ kiểm tra xem thời hạn sử dụng miễn phí đă hết chưa, nếu chưa hết th́ bỏ qua. C̣n đă hết rồi th́ sẽ nhảy đến nag trial. Như vậy, ta NOP luôn lệnh này cho chắc ăn.
Tới đây, xem xét trước sau không thấy đoạn mă nào quan trọng nữa. Thôi th́ ấn F9 1phát để xem sao… Wao!… Nó ice tại string “SOFTWARE\Internet Download Manager” rồi. Tôi đặt comment tại điểm này là +2 nhé.

Ấn F8 để trace xuống 1 đoạn. Ta cũng bắt gặp các đoạn mă quen thuộc

Nhớ làm theo comment tại mỗi breakpoint nhé. NOP mấy chỗ đó.

Cuối cùng ta cũng bắt gặp đoạn lệnh kiểm tra thời hạn sử dụng. NOP luôn chỗ này.
Sau khi edit xong các chỗ, xem xét tới lui thấy không c̣n ǵ quan trọng nữa. Ấn F9 1 phát. OllyDBG lại ice thêm vài chỗ tại các string “SOFTWARE\Internet Download Manager”. Các điểm này cũng không thấy ǵ khả nghi nên tôi tiếp tục ấn F9 để thử lướt qua luôn. Cuối cùng là … Hàhà… bạn cứ thử xem.

Tóm lại, phần này ta patch các điểm:

———-> Từ address 00423B2F: ASCII “SOFTWARE\Internet Download Manager” <————-

00423C2E 75 28 JNZ SHORT IDMan.00423C58
–> Nop 2byte
00423C62 75 24 JNZ SHORT IDMan.00423C88
–> Nop 2byte
00423C8D 75 24 JNZ SHORT IDMan.00423CB3
–> Nop 2 byte
00423CB8 75 27 JNZ SHORT IDMan.00423CE1
–> Nop 2 byte
00423D02 75 1C JNZ SHORT IDMan.00423D20
–> 00423D02 EB 12 JMP SHORT 00423D16
00423D3F 0F85 AD010000 JNZ IDMan.00423EF2
—> Nop 6 byte
00423D6F 0F84 81000000 JE IDMan.00423DF6
–> Nop 6byte
00423E23 . 0F85 DF010000 JNZ IDMan.00424008
—>Nop 6byte

———–> Từ address 0042AC7B: ASCII “SOFTWARE\Internet Download <—————

0042ACFC 75 29 JNZ SHORT IDMan.0042AD27
–> Nop 2byte
0042AD25 75 17 JNZ SHORT IDMan.0042AD3E
–> Nop 2byte
0042AD43 75 30 JNZ SHORT IDMan.0042AD75
–> Nop 2byte
0042AD71 75 22 JNZ SHORT IDMan.0042AD95 ; l2
—> Nop 2byte
0042AD9C 0F85 4A020000 JNZ IDMan.0042AFEC
–> Nop 6byte
0042ADD8 0F84 81000000 JE IDMan.0042AE5F
–> Nop 6byte
0042AE99 . 0F85 15010000 JNZ IDMan.0042AFB4

Sau khi patch xong, bạn save lại file patch. Cách thức save giống như phần 1. Sau đó xóa bỏ file IDMan.exe, đổi tên file IDMan_Patch.exe thành IDMan.exe, vậy coi như IDM đă thuộc về bạn.

Tổng kết bài viết:

Để viết file crark, bạn nên chú ư tích hợp phần add registry theo như h́nh đầu tiên trong phần này, hoặc giả bạn bạn cũng có thể sọan 1 file reg trước (dùng notepad), nội dung file reg như sau (theo mẫu):
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Internet Download Manager]
“FName”=”Crack by LovePascal”
“LName”=”(h_huynhphong@yahoo.com)”
“Email”=”h_huynhphong@yahoo.com”
“Serial”=”1234567890”

Sau đó lưu file reg này với tên IDMan.reg. Crack xong, bấm đúp vào file reg này để add infomations cho IDM.
Nếu muốn share crack. Bạn có thể dùng DUP để tạo file patch, hoặc dùng 1 tŕnh ứng dụng nào đó để viết code. Tôi đă sử dụng Pascal để built cái crack cho phiên bản này, nó patch file IDMan.exe và add registry luôn. Đồng thời lo xa hơn 1 chút, để file crack này vẫn sử dụng được cho các phiên bản sau đó (điều kiện: vẫn code bằng Microsoft Visual C++ 6.0 [Overlay]) nên tôi đă built thêm phần tích hợp tự ḍ mă.
C̣òn 1 số điểm khác, nhưng qua sự kiểm tra file các code. Tôi thấy không cần thiết phải patch chỗ nào nữa. Vậy tut đến đây có thể xem là tạm dừng. Cám ơn bạn đă bỏ thời gian xem qua.

NGUỒN: thanhlich – http://www.softprovn.net

Bình luận về bài viết này