lại chương trình - và chúng ta sẽ nhận được lỗi đại loại như sau : "Error, please enter CD to run game" hoặc "CD error" hoặc "Error reading CD-ROM”" Gì cũng được, nhưng ta hãy ghi thông báo đó ra giấy. Chương 4 : Tìm đúng đoạn code Load chương trình trong W32DASM. Trong khi W32DASM đang load các bác sẽ thấy rất nhiều "dị ngữ" - đừng lo nhá, chúng ta không cần phải hiểu nó đâu. Load xong chúng ta click nút String Data references - nút thứ 2 từ bên phải qua. Bây giờ chúng ta đang có danh sách của tất cả các text trong chương trình - quá nhiều. Do đó để thu hẹp phạm vi tìm kiếm lại, chúng ta nên tìm kiếm bằng chữ cái đầu tiên (ví dụ nếu ta có thông báo lỗi là "Error reading CD-ROM" thì chúng ta sẽ ấn chữ E để đến những text bắt đầu bằng chữ E). Và khi các bác đa tìm đưộc rồi thì hãy double click vào đó, chúng ta sẽ đến đoạn code tương tự như thế này : Code: :0044XBCK EB08 Jmp 0044EBD8” hoặc Code: :0044XBCK EB08 Call 0044EBD8 hoặc Code: :0044XBCK EB08 Push 0044EBD8 Nếu đúng như thế thì em xin chúc mừng - các bác đã đến được đoạn code quan trọng rồi đó. Tiếp theo chúng ta cần phải tìm được offset của nó. Các bác hãy nhìn xuống phía dưới của chương trình và sẽ thấy tương tự như sau : Code: Line:*** Pg *** of *** Code Data @:0045821 @Offset 00045821h in file:***.exe Chúng ta hãy chú ý: @Offset 00045821h Vậy địa chỉ này có offset là 00045821, hãy ghi nó ra giấy (nhớ là không có chữ h đâu nhé). Có offset rồi, công việc của chúng ta bây giờ chỉ là sửa code và "xóa sổ" cái protection đáng ghét kia ;)) Chương 5 : Sửa code Đóng W32DASM (các bác nhớ phải đóng lại thì mới chỉnh sửa code được), dùng Hiew để load chương trình lên. Sau đó ấn F4 rồi chọn Decode. Tiếp theo ấn F5 rồi nhập vào offset mà ta tìm được trong W32DASM, nó sẽ đưa ta đến vị trí chính xác trong chương trình. Bây giờ là 1 phần khó khăn đây - thực hiện nó không khó nhưng để hiểu được thì khó vô cùng. Tại gần điểm mà ta đang ở trong chương trình, các bác sẽ thấy 1 dòng lệnh dạng Hex, giống như BC1BB3D2D1. Nếu các bác có 1 chút kiến thức về ASM thì sẽ dễ dàng thấy tại đây có 5 byte, và chúng ta cần phải sửa cả 5 byte này thành 90 (nghĩa là NOP). Để làm điều này ta ấn F3, sau đó ấn số 90 5 lần để thay thế cho 5 byte, nghĩa là BC1BB3D2D1 đã chuyển thành 9090909090. Xong ấn F9 để save lại rồi ấn F10 để thoát khỏi Hiew. Chương 6 : Kiểm tra Bây giờ trong tay chúng ta là 1 file EXE không hề bị lỗi. Hãy chạy thử nó trong thư mục chứa game để kiểm tra. Nếu nó chạy bình thường > chúc mừng các bác, các bác vừa "thịt" xong 1 "kẻ bảo vệ" CD đấy. Còn nếu nó vẫn hiện lỗi như ở chương 3 thì xin chia buồn và các bác hãy chịu khó bắt đầu lại từ chương 3 cho đến khi không còn 1 lỗi nào hiện ra nữa và game chạy bình thường nhá(nếu bác nào lười đọc lại từ chương 3 thì hãy đọc chương 7 sau đây - rất ngắn gọn). Chương 7 : Tóm tắt phương pháp- Khởi động chương trình mà không dùng đĩa và theo dõi những lỗi xảy ra > ghi lại nó - Tìm lỗi đó trong W32DASM và offset - Khởi động Hiew. Ấn F4 > chọn Decode > ấn F5 > nhập vào offset > sửa mỗi byte thành 90 - Ấn F9 để save lại > ấn F10 để thoát khỏi Hiew. Chúc các bác may mắn :)!!! The_lighthouse(REA) ==== Crack CD Protection (Mortal Kombat 4) ==== Written by : Prof. Dr. Sorin Translated by : kienmanowar Mục đích của bài viết này là hướng dẫn cách bạn tìm hiểu một trong nhiều phương pháp để loại bỏ CD Protection. Vậy CD Protection thực chất nó là cái gì ?? Như các bạn đã biết khi chúng ta set up một game , sau khi bỏ đĩa CD ra khỏi ổ đĩa và run game thì sẽ có một thông báo hiện lên yêu cầu chúng ta phải cho đĩa CD vào ổ đĩa thì game mới chơi được , đó chính là cơ chế CD Protection theo cách hiểu của mình. Thực chất việc crack một game cũng khác là mấy so với cách mà chúng ta thường dùng để crack soft , mọi thao tác đều thực hiện tương tự . Mục đích chính của việc loại bỏ CD Protection là nhằm bảo vệ ổ đĩa CD của chúng ta mà thôi. chúng ta vẫn có thể chơi game mà không cần phải có đĩa (với điều kiện chúng ta set up full) CD, do đó game chúng ta play sẽ nhanh hơn đó là điều tất nhiên vì tốc độ quay của ổ đĩa cứng bao giờ cúng nhanh hơn ổ CD ROM rất nhiều :D . Và một điều cũng không kém phần quan trọng sau khi đọc xong bài viết này là knowledge của chúng ta lại nhỉnh lên chút xíu hiiiiiii :wub: Ollydbg Tutorial Let’s Begin ~~~~~~~~~ -**** Đầu tiên chúng ta sẽ đi một vòng để tìm hiểu về các cửa sổ chính trong Ollydbg . Để thực hiện điểu này , chúng ta hãy chọn lấy một chương trình và mở chương trình này lên trong Ollydbg . Ở đây mình chọn một game mà có thể nó đã rất quen thuộc với tất cả các bạn đó là : Mortal Kombat 4 (Rồng đen) . Khi chúng ta open chương trình này lên trong Ollydbg (cụ thể là chúng ta mở cái file dùng để run game), chương trình Ollydbg sẽ cho chúng ta những thông tin như sau : Ở đây chúng ta thấy có 4 cửa sổ lớn : - The Disassembler Window : Ở cửa sổ này các bạn có thể nhìn thấy các đoạn code của chương trình ở dạng ngôn ngữ asm, và đồng thời tại cửa sổ này các bạn cũng có thể chú thích cho từng từng dòng mã asm . - The Registers Window : Đây là cửa số chứa thông tin chi tiết về các thanh ghi như eax, ebx, ecx v….v… Các cờ trạng thái cũng được quản lý tại cửa sổ này - The Dump Window : Tại cửa sổ này bạn có thể xem hoặc chỉnh sửa theo 2 dạng là hex và Ascii bộ nhớ của chình mà bạn muốn debug - The Stack Window : Một cửa sổ không kém phần quan trọng , mọi thứ trước khi được thực hiện phải được nạp vào Stack. -**** Cuối cùng có một cửa sổ nằm bên dưới cửa sổ Disassembler Window : Chúng ta gọi nó là The Tip Window . Đây không phải là tên gọi của nó nhưng với mình, mình thích gọi như vậy. : ) .Khi bạn đang ở tại một dòng code nào đó trong quá trình debug , Olly sẽ cho bạn thấy thông tin chi tiết về dòng code đó . Lấy ví dụ đơn giản như sau : nếu bạn debug tới dòng lệnh “ mov eax , dword ptr [123]” . Thì cửa sổ này sẽ cho bạn biết được giá trị hay con số nào đang được lưu giữ tại [123] . Và còn nhiều điều thú vị khác nữa mà cửa sổ này sẽ mang lại cho chúng ta . -**** Đó là những gì tổng quan nhất mà bạn nên biết về chương trình Olly . Chúng ta sẽ đi sâu tìm hiểu kĩ hơn nữa trong quá trình chúng ta debugging . Chúng ta sẽ thực hành theo phương pháp đọc tới đâu thực hành tới đó. Mục tiêu của bài viết này là nhắm vào trò chơi Mortal Kombat 4. Oki , Let’s do it !!! : ) ! ! ! Here We Go ! ! ! -**** Mình coi như các bạn đã có trong tay mục tiêu rùi nhé…. Bây giờ hãy cài đặt game MK4 từ đĩa CD gốc . Sau đó lấy đĩa CD cài đặt game ra khỏi ổ CD ROM , và run game. Ạch , sau khi run game bạn không thể chơi được , nó hiện ra một thông báo như sau : -**** Hmm … nó sử dụng cơ chế CD Protection đây mà. Bây giờ chúng ta hãy dùng chương trình Olly và mở file Mk.exe (tất nhiên là phải mở trong Olly rùi vì chúng ta đang muốn chơi được game mà ). Sau khi hoàn tất quá trình loading file trong Olly , chúng ta sẽ tiến hành tìm kiếm điểm đặt Break Points , đó chính là công việc debugging. Các bạn đã sẵn sàng chuẩn bị cho con đường gian khổ nhưng đầy thú vị này chưa hiiiii : ). Chúng ta sẽ làm cho game này sẽ chạy vù vù mà không hiện một yêu cầu nào bắt chúng ta phải đưa đĩa CD gốc cài đặt game vào ổ CD ROM nữa. Điều này có nghĩa là chúng ta có thể chơi game mà không cần đến CD !!. -**** Hiii , từ nãy đến giờ có vẻ toàn là những lời nói sáo rỗng , chúng ta sẽ tiến hành công việc ngay bây giờ. Tại màn hình chính của Olly , chúng ta nhấn F9 để run chương trình. Sau khi chương trình được run , chúng ta lại nhìn thấy cái thông báo đáng ghét kia hiện lên “ Insert CD……” . Oki , chúng ta quay trở lại Olly , nhấn F12 để Pause chương trình này lại. -**** Như chúng ta đã biết các chương trình được xây dựng trên nền tảng hệ điều hành Windows đều sử dụng một thư viện các hàm API có sẵn để truy cập vào ổ CD ROM , cụ thể là có 2 lệnh như sau là Kernel 32 – GetDriveTypeA hoặc Kernel 32 – GetLogicalDrives. Chúng ta sẽ set Break Points tại những hàm API này của game MK khi nó kiểm tra ổ CD xem có đĩa trong ổ CD ROM không. -**** Để set BP tại các hàm API trên chúng ta thực hiện như sau , vẫn tại màn hình chính của Olly chúng ta nhấn tổ hợp phím Ctrl+N để hiện thị cửa sổ ‘Name’, cửa sổ này cho ta biết tên các hàm API được sử dụng trong chương trình. Khi hiện cửa sổ này chúng ta sẽ tìm kiếm hai hàm trên là GetDriveTypeA và GetLogicalDrives và đặt BP tại những hàm này bằng cách right click lên hàm đó chọn “Set Breakpoint on every reference” giống như hình minh họa dưới đây : . đoạn code tương tự như thế này : Code: :00 44XBCK EB08 Jmp 00 44EBD8” hoặc Code: :00 44XBCK EB08 Call 00 44EBD8 hoặc Code: :00 44XBCK EB08 Push 00 44EBD8 Nếu đúng như thế thì em xin chúc mừng. Line:*** Pg *** of *** Code Data @ :00 458 21 @Offset 00 045821h in file:***.exe Chúng ta hãy chú ý: @Offset 00 045821h Vậy địa chỉ này có offset là 00 0458 21, hãy ghi nó ra giấy (nhớ là không có. cho 5 byte, nghĩa là BC1BB3D2D1 đã chuyển thành 909 0 909 0 90. Xong ấn F9 để save lại rồi ấn F 10 để thoát khỏi Hiew. Chương 6 : Kiểm tra Bây giờ trong tay chúng ta là 1 file EXE không hề bị