+14

Hướng dẫn cơ bản về Cheat Engine (Phần 1)


Giới thiệu về Cheat Engine (CE)

Cheat engine là một phần mềm công khai mã nguồn (khác với mã nguồn mở) tạo ra bởi Eric Heijnen cho hệ điều hành Windows vào năm 2008. Nó cung cấp nhiều tính năng mạnh mẽ giúp bạn can thiệp và chỉnh sửa các game offiline để làm cho chúng khó hơn hoặc dễ hơn tùy sở thích của bạn (ví dụ: 100 HP quá dễ, hãy thử chơi trò chơi với 1 HP 🥶) , đồng thời còn chứa các công cụ hữu ích khác để giúp debug game và thậm chí cả các ứng dụng thông thường, kiểm tra các hoạt động trên hệ điều hành và sẽ còn nhiều tính năng hơn nữa (Cheat Engine vẫn đang được phát triển).

Tuy nhiên, Cheat Engine không phải là một phần mềm dễ sử dụng, và bạn cần có kiến thức cơ bản về lập trình và bộ nhớ máy tính để có thể sử dụng nó hiệu quả. Nếu bạn là một sinh viên IT thì việc tìm hiểu CE sẽ giúp bạn làm quen với các khái niệm và tạo động lực học tốt Programming hay Computer Architecture.

Cài đặt

Để cài đặt Cheat Engine, truy cập trang chính thức tại https://www.cheatengine.org. Trong quá trình cài đặt, bạn sẽ gặp tùy chọn cài đặt phần mềm bảo mật Avast. Nếu bạn muốn tiết kiệm thời gian, bạn có thể bỏ qua tùy chọn này.

Lưu ý rằng Cheat Engine có thể bị nhận diện là phần mềm độc hại bởi một số phần mềm bảo mật, tốt nhất bạn nên tạm thời tắt chúng đi để quá trình cài đặt được mượt mà (với Windows Defender thì không cần).

Thực hành các Step trong Cheat Engine Tutorials

Cheat engine 7.5 cung cấp 2 tutorials hướng dẫn các bạn làm quen với các tính năng trong CE. Trong bài viết này chúng ta sẽ tìm hiểu cách dùng Cheat engine giải quyết các Step trong CE Tutorials. Còn game thì ta sẽ giải quyết trong những bài viết tới. Chúng ta cùng đến với nội dung chính của bài viết nào. Sau khi khởi động CE thì ta mở CE tutorials bằng cách chọn Menu Help => Cheat Engine Tutorials (x86_64). Process Tutorial-x86-64.exe được khởi chạy và Step 1 xuất hiện.

Step 1: Welcome

image.png

Bước này nhằm giới thiệu cách attach CE vào process của CE tutorial.

Mỗi Step trong CE Tutorial đều có một password, nhập password này vào textbox phía dưới bên phải để chuyển thẳng đến Step contain password mà không cần thực hiện lại các Step trước đó. Nếu bạn là người mới bắt đầu thì chọn Next để sang bước 2 thôi.

Step 2: Exact Value scanning (PW=090453)

Step 2 hướng dẫn chúng ta cách scan chính xác một giá trị nào đó, trong tutorial này thì đó là giá trị của Health.

Mục tiêu của chúng ta là tìm địa chỉ bộ nhớ nơi mà chứa giá trị integer của Health và sửa giá trị này thành 1000. Cơ chế scan của CE là lọc dần giá trị không đúng qua các lần scan với Next Scan.

  1. Trong Tutorial nhấn vào “Hit me”.
  2. Trong CE ghi vào ô Value giá trị vừa thay đổi. VD: Health: 99 thì ghi là 99 rồi nhấn First Scan.
  3. Nếu vẫn còn nhiều giá trị, bạn vào tutorial nhấn “Hit me” thêm lần nữa để giá trị thay đổi.
  4. Vào CheatEngine, nhập giá trị vừa thay đổi và nhấn Next Scan.
  5. Nếu bạn đã tìm thấy thì nhấn đúp chuột trái vào Adress đó. Nó sẽ di chuyển xuống cửa sổ phía dưới.
  6. Bây giờ nhấn đúp chuột trái vào giá trị Value phía dưới và thay đổi thành 1000 và nhấn OK.
  7. Nút Next sẽ được enable, hãy bấm vào và chuyển sang bước tiếp theo.

Step 3: Unknown initial value (PW=419482)

Step 3 hướng dẫn chúng ta cách tìm một giá trị chưa biết trước bằng cách thực hiện một chuỗi scan theo sự thay đổi tăng giảm của giá trị cần tìm.

Khi thực hiện scan với Value type Unknown initial value , CE sẽ scan toàn bộ vùng nhớ mà phần mềm được cấp phát nên kết quả rất nhiều, cửa sổ bên trái sẽ không hiển thị gì. Sau khi Next Scan filter bớt kết quả thì các giá trị tìm được xuất hiện.

  1. Đầu tiên click “Hit me” ở Tutorial, đến Cheat Engine và chọn Unknown initial value ở phần Scan type rồi nhấn First Scan.
  2. Vẫn ở phần Scan type chọn Decreased value rồi nhấn Next Scan.
  3. Nếu còn nhiều Address quá, không xác định được giá trị đúng ở đâu, ta lại nhấn “Hit me” trong tutorial tiếp rồi nhấn Next scan. Nếu địa chỉ vẫn còn nhiều thì cứ lặp lại đến khi còn khoảng vài cái rồi chọn 1 Address bạn thấy đúng nhất.
  4. Thay đổi value thành 5000.
  5. Nút Next sẽ được enable, hãy bấm vào và chuyển sang bước tiếp theo.

Step 4: Floating points (PW=890124)

Step 2 và 3 chúng ta đã thực hiện tìm kiếm với giá trị kiểu integer(4 bytes), nhưng nhiều khi giá trị mà ta hướng đến sẽ có những kiểu giá trị khác.

Nếu bạn thực hiện scan value như mô tả ở 2 step trên mà không tìm thấy kết quả thì hãy nghĩ đến việc scan với kiểu dữ liệu khác bằng cách New Scan => Value Type: ...

Trong step 4 chúng ta sẽ thực hiện scan các giá trị thuộc kiểu float và double.

  1. Ta nhìn vào phần Value type và chọn Float, Scan Type chọn Exact Value và nhìn vào giá trị HP.
  2. Nhấn vào “Hit me”, giá trị sẽ giảm dần.
  3. Ta sẽ thấy giá trị của HP có dấu chấm. Ta sẽ ghi số trước dấu chấm. VD: Health: 92.8 thì sẽ ghi là 92 vào trong Value rồi chọn First Scan.
  4. Chọn 1 Address đúng nhất rồi thay đổi giá trị thành 5000. Thế là xong HP.
  5. Ammo tương tự nhưng Scan Type là Double. Nếu xong thì nhấn Next. Sang bước 5.

Step 5: Code finder (PW=888899)

Bước này đã bắt đầu khó hơn các bước bên trên, trong game thực tế sẽ có nhiều trường hợp chúng ta không thể sửa giá trị thành công như trường hợp các step 2, 3, 4.

Step 5 này là bước tiếp theo chúng ta cần làm, sau khi tìm được Address của value mục tiêu thì ta tiếp tục tìm đoạn code nào trong chương trình liên quan đến địa chỉ này.

Theo như tutorial hướng dẫn chúng ta sẽ sửa đổi đoạn code làm thay đổi giá trị mục tiêu thành nop (không làm gì cả).

  1. Nhấn chuột phải vào address đó rồi chọn Find out what writes to this address rồi chọn YES.
  2. Một bảng mới hiện ra có tiêu đề là The following opcodes changed the selected address.
  3. Bạn nhấn Change value ở Tutorial để thay đổi giá trị và trong bảng đã theo dõi được một đoạn code đã thực hiện ghi giá trị cho address đã chọn.
  4. Ta chọn vào dòng đó rồi chọn Replace.
  5. Một bảng hiện ra, ta có thể đặt tên thoải mái cho dòng đó. Hoặc để mặc định cũng được. Rồi nhấn OK!.
  6. Nút Next sẽ được enable, hãy bấm vào và chuyển sang bước tiếp theo.

Step 6: Pointers (PW=098712)

Việc bỏ hoàn toàn logic xử lý như Step 5 có thể làm game hay phần mềm hoạt động không đúng và crash chương trình. Step 6 hướng dẫn chúng ta sử dụng pointer để chỉnh sửa giá trị mục tiêu một cách an toàn hơn.

Vậy trước hết Pointer (con trỏ) là gì? HIểu đơn giản thì con trỏ là một biến mà giá trị của nó là địa chỉ của một vùng nhớ. Ta có thể lấy được giá trị của vùng nhớ đó thông qua con trỏ. Ví dụ nếu bạn có một con trỏ X trỏ tới biến Y thì bạn có thể lấy giá trị của Y bằng *X.

Các step 2, 3, 4 phía trên chúng ta có thể dễ dàng sửa đổi Health vì giá trị của nó được cập nhật đơn giản như sau:

Health = Health - random()

Ở step này chúng ta không thể sửa dễ dàng như trên vì Value được cập nhật phức tạp hơn, đoạn code được thực thi khi bấm nút Change value có thể như sau:

int* pointer; //pointer được khai báo là con trỏ global trỏ đến giá trị kiểu int, 
string labelValue = string(*pointer); //giá trị hiển thị mà chúng ta thấy trên step 6

BtnChangeValueClick()
{
    int newValue = random(); //tạo biến có giá trị bất kỳ và có địa chỉ bất kỳ
    *pointer = newValue; //giá trị của pointer lúc này chính là địa chỉ của biến newValue
    labelValue = string(*pointer); //cập nhật giá trị hiển thị mới
}

Logic change value của step 6 như trên cũng giải thích tại sao khi ta scan và tìm được địa chỉ của labelValue và sửa giá trị của nó thành 5000 rồi Change value thì giá trị hiển thị vẫn đổi bình thường.

Các bước cụ thể để hoàn thành Step này như sau:

  1. Trước tiên là tìm địa chỉ của giá trị hiện thị trên step, sau đó click đúp chuột trái để add địa chỉ này xuống list phía dưới.
  2. Click chuột phải vào địa chỉ trong list phía dưới chọn Find out what accesses this address, confirm attach debugger và cửa sổ Instruction hiện ra.
  3. Ta chọn vào dòng dưới của Instruction rồi chọn phần More Information. Một bảng Extra info sẽ hiện ra.
  4. Bạn nhìn vào phần dưới Copy memory có 1 giá trị gồm chữ và số, theo như của mình là 015FA510 (Của các bạn sẽ có thể khác).
  5. Sau đó ta vào Cheat Engine. Ở phần Scan ta chọn HEX rồi nhập code đó vào 015FA510 rồi chọn First Scan.
  6. Sau khi ra được Address rồi, ta chọn address đó rồi chọn vào Add address manually ở góc dưới bên phải của Cheat Engine.
  7. Một bảng Add address hiện ra, ta chọn vào Pointer. Nó sẽ hiện ra thêm 1 phần ở dưới nữa.
  8. Ở phần Address of pointer ta ghi địa chỉ vừa tìm được ra. Của mình là 015F2ABC sau đó nhấn OK! Chừng nào Value của Cheat Engine ra số đúng giống bên Value của Tutorial là OK, nếu là dấu hỏi thì ta làm lại từ bước 1.


Khuyến cáo

Trong bài viết này, chúng ta đã khám phá những bước cơ bản để sử dụng Cheat Engine, một công cụ mạnh mẽ để reverse game mechanic và modify memory game offline.

Lưu ý: Bạn chỉ nên dùng CE với game offline, sử dụng với game online sẽ có nhiều rủi ro với tài khoản game đó của bạn vì hành vi can thiệp sửa đổi game bị cấm trong điều khoản dịch vụ của các game (trừ trường hợp game đó tạo ra để mọi người có thể hack 😄)

Hãy nhớ rằng, quyền sửa đổi trò chơi nằm trong tay bạn. Hãy sử dụng nó một cách khôn ngoan, tôn trọng cộng đồng chơi game và quan trọng nhất là tận hưởng quá trình này.

Trong bài viết còn những điểm nào thiếu sót thì các bạn đừng ngại comment phản hồi để mình biết nhé. Nếu cảm thấy TUT này hữu ích thì hãy cho mình một upvote để mình có thêm động lực viết tiếp những bài tiếp theo giới thiệu những tính năng hay ho của CE nhé.

P/s: Các ảnh GIF nếu bạn thấy nhỏ quá thì có thể click chuột phải => Open image in new tab để xem được rõ hơn.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.