Mở Đầu
Trong phần trước của loạt bài viết này, chúng ta đã cùng nhau chinh phục hai thử thách đầu tiên trong Cheat Engine Graphical Game Tutorial. Trong bài viết này, chúng ta sẽ tiếp tục thực hiện thử thách cuối cùng, hứa hẹn nhiều điều mới mẻ và thử thách nâng cao hơn. Đây có thể xem là phần kết cho loạt bài viết hướng dẫn Cheat Engine cơ bản của mình.
Phân Tích Thử Thách
Thử thách mà chúng ta sẽ đối mặt là một trò chơi 2D. Giao diện trò chơi bao gồm một nền đất màu xanh lá và các platform màu đỏ nằm phía trên. Nhiệm vụ của chúng ta là nhảy lên các platform màu đỏ để biến chúng thành màu xanh. Khi tất cả các platform đều chuyển sang màu xanh, cánh cửa kết thúc sẽ được mở khóa. Thế nhưng, game sẽ có một chút 'troll' khi nếu chúng ta chạm vào các mũi nhọn, nhân vật sẽ tan biến, và game sẽ bắt đầu lại từ đầu. Vì vậy, để vượt qua thử thách này, chúng ta sẽ cần sử dụng Cheat Engine để can thiệp vào mã game, tắt tính năng phát hiện va chạm, cho phép nhân vật bay và di chuyển tức thời.
Mục tiêu của thử thách này là giúp chúng ta làm quen với các phương pháp áp dụng Cheat Engine trong các trò chơi nhập vai, và tìm kiếm những cách khác nhau để chiến thắng thử thách này một cách dễ dàng nhất có thể.
Giải Quyết Thử Thách 3 Trong Cheat Engine Graphical Game Tutorial
Trong thử thách này, chúng ta có thể nhấn phím space
để nhân vật nhảy lên. Tuy nhiên, nếu nhấn phím này nhiều lần, nhân vật sẽ không nhảy cho đến khi chạm đất. Rõ ràng cần có một biến trạng thái nào đó quyết định việc nhân vật có thể nhảy hay không. Đây là lý do đầu tiên mà mình nghĩ đến trong bất kỳ trò chơi nhập vai nào. Mình sẽ sử dụng Cheat Engine để quét biến trạng thái đó.
Hướng giải quyết như sau: đầu tiên, mình quét với giá trị Unknown initial value. Sau đó, mình chuyển sang quét với value Unchanged để giảm số lượng địa chỉ tìm được. Khâu quan trọng nhất chính là khi nhân vật nhảy lên, mình chuyển sang quét với Changed Value. Việc này sẽ cho phép phát hiện địa chỉ lưu trữ trạng thái nhảy của nhân vật. Sau khi nhấn phím space
, khi nhân vật chưa chạm đất, nhanh tay chọn Next scan. Lần quét này sẽ giúp xác định trạng thái nhân vật khi chuyển từ có thể nhảy sang không thể nhảy. Sau khi nhân vật đã chạm đất, ta tiếp tục quét với Changed Value lần nữa để thấy trạng thái nhân vật từ không thể nhảy thành có thể nhảy, điều này rất quan trọng để tìm ra biến đúng.
Nếu cảm thấy tốc độ game quá nhanh, tính năng speed hack
của Cheat Engine sẽ giúp giảm tốc độ trò chơi, khiến việc quét địa chỉ trở nên dễ dàng hơn mà không cần phụ thuộc vào tính năng pause của trò chơi, nhưng chú ý chỉ nên dùng với game offline.
Sau khi scan, số lượng địa chỉ đã được giảm bớt. Nếu bạn muốn chính xác hơn, có thể thực hiện thêm quét với Unchanged value một vài lần. Mình tìm thấy một địa chỉ chứa value 0 và 1. Khi nhân vật nhảy, value là 1 và khi đứng yên, value là 0. Mình thử freeze value của địa chỉ này thành 0, kết quả là giờ mình có thể nhảy ở trên không trung. Dù điều khiển vẫn hơi khó do code change value vẫn hoạt động, mình đã sử dụng code injection để làm cho hành động của nhân vật trở nên mượt mà hơn bằng cách thay đổi đoạn mã assembly từ mov byte ptr [rbx+7C],01
thành mov byte ptr [rbx+7C],00
.
Bây giờ nhân vật đã có thể bay, nhưng vẫn chưa hoàn thành thử thách. Trong khá trình tìm biến nhảy, mình cũng phát hiện ra một số địa chỉ chứa giá trị cao, có lẽ là tọa độ Y trong hệ tọa độ của game 2D. Mỗi object trong game có tọa độ riêng tại một thời điểm.
Để xử lý các mũi nhọn cản trở, mình tìm giá trị tọa độ của những mũi nhọn và freeze lại. Tuy vậy, chỉ freeze tọa độ không đủ để ngăn các mũi nhọn. Ta cần xác định đoạn mã cập nhật tọa độ của chúng và sửa nó thành nop. Một khi đã kiểm soát được các mũi nhọn, ta có thể tiếp cận cánh cửa và chiến thắng thử thách này.
Nếu còn thời gian, bạn có thể tìm địa chỉ quyết định việc cửa có khóa hay không. Dù việc này sẽ mất thời gian vì cần phải làm tất cả các platform xanh thì cửa mới mở. Nhưng nếu tìm ra, thì bạn cũng không cần quan tâm đến mũi nhọn nữa vì chúng chỉ hoạt động khi tất cả các platform xanh.
Cuối cùng, để thực sự trở thành 'god' trong thử thách này, ta sẽ cần tìm đoạn mã phát hiện va chạm giữa nhân vật và kẻ thù. Đây là phần khó nhất, vỉ việc chạm vào kẻ địch sẽ biến mất ngay lập tức mà không có chỉ số HP để quét. Tuy nhiên, bằng cách theo dõi tọa độ X của nhân vật, chúng ta có thể xác định va chạm bằng cách khám phá các địa chỉ boolean gần giá trị X. Sau khi phân tích, mình tìm ra được 2 địa chỉ đại diện cho thuộc tính IsDead
và IsVisible
. Cuối cùng, chỉ cần điều chỉnh đoạn mã kiểm tra va chạm thì chúng ta có thể đi qua những mũi nhọn mà không gặp rắc rối.
Bypass Kiểm Tra Tính Toàn Vẹn
Trong quá trình giải quyết các thử thách trong Cheat Engine Graphical Game Tutorial, đôi khi bạn gặp thông báo integrity check error
. Khi đó, trò chơi sẽ bị lag hơn bình thường. Mình đã tìm địa chỉ liên quan đến lỗi này và nhận ra rằng chỉ cần sửa đổi đoạn mã assembly sẽ khiến lỗi này xuất hiện. Điều này cho thấy các trò chơi thực tế có cơ chế bảo vệ chống gian lận bằng cách kiểm tra tính toàn vẹn của chúng.
Kết Luận
Vậy là chúng ta đã hoàn thành tất cả các tutorial và thử thách trong Cheat Engine. Hy vọng qua bài viết này, bạn đọc nắm được những kiến thức cơ bản nhất về Cheat Engine và có thể tự mình khám phá nhiều tính năng thú vị khác của công cụ này. Cheat Engine không chỉ là công cụ để 'hack game', mà còn là tài nguyên hỗ trợ lập trình viên trong việc debug và phân tích game, cũng như tạo ra các bản mod độc đáo.
Sử dụng Cheat Engine một cách hiệu quả và có trách nhiệm là điều mà bạn nên luôn ghi nhớ. Đây là công cụ dành để học hỏi, nghiên cứu và giải trí lành mạnh. Tránh sa đà vào việc ảnh hưởng tiêu cực đến trải nghiệm của người chơi khác trong môi trường online. Chúc bạn có những giờ phút thú vị với Cheat Engine!
source: viblo