Game - Hướng dẫn cheat game Minesweeper: Phần 1
Hệ điều hành Windows có rất nhiều những công cụ phục vụ cho nhu cầu học tập, công việc hay giải trí. Vì thế, các nhà lập trình của Microsoft dành thời gian viết ra các phần mềm, đặc biệt là các game giải trí dành cho giới văn phòng và nổi bật nhất là Minesweeper. Hôm nay, mình sẽ hướng dẫn các bạn cách gian lận trò chơi Minesweeper này.
Chúng ta nhìn vào menu bar của phần mềm OllyDBG, chọn View Memory và nó sẽ hiện ra các dòng dữ liệu dưới dạng mã hex. Chúng ta tìm tới chỗ minesam .data và chuột phải chọn Dump để dump dữ liệu trong file đó ra. Chúng ta sẽ tìm tới dòng có số là 10005340 để xác định dữ liệu trong game được lưu vào trong thanh ghi.
Chúng ta nhìn vào menu bar chọn View -> CPU sẽ hiện cửa sổ các thanh ghi chứa các dữ liệu và các tiến trình trong game. Chúng ta tiếp tục chọn Debug -> Run để chạy chương trình ở chế độ debug.
Chúng ta thử click vào ô bất kỳ trong game, khi đó dữ liệu trong thanh ghi cũng sẽ thay đổi theo. Do đó, chúng ta biết được game sẽ được lưu vào trong bộ nhớ RAM.
Chúng ta có thể đọc được RAM, chúng ta có thể gian lận nó trong game. Các bạn lưu ý là cái dòng 0A 00 00 00 09 00 00 00 09 00 00 00 là chuỗi byte bảng game trong RAM, chúng ta có thể dùng phần mềm để dump dữ liệu ra và thay đổi dữ liệu trong đó.
Chúng ta chọn Search -> Find Again để tìm dữ liệu của bảng game.
Chúng ta chạy file python bằng câu lệnh python cheat.py để thực hiện đoạn cheat. Chúng ta sẽ thấy những dấu sao, đó là nơi sẽ có những trái mìn. Chúng ta cứ theo đó và làm theo trò chơi và chúng ta sẽ hoàn thành game một cách nhanh nhất.
Chuẩn bị
Các bạn cần chuẩn bị những công cụ để thực hiện việc gian lận game Minesweeper:- Python: bạn cần có thư viện Python để thực hiện một đoạn code để hack game. Link download: https://www.python.org/downloads/
- OllyDBG: dùng để xem các đoạn mã nhị phân, các thanh ghi, các hàm thư viện và dữ liệu trong game. Link download: http://www.ollydbg.de/download.htm
- Procdump: chương trình dùng để crash dump để dò lỗi ứng dụng. Link download: https://docs.microsoft.com/en-us/sysinternals/downloads/procdump
- HxD: là phần mềm giúp ta đọc được dữ liệu trong thanh RAM. Link download: https://mh-nexus.de/en/hxd/
- Minesweeper: tất nhiên không thể thiếu file cài đặt game rồi. Link download: https://vinaurl.in/puLHulvQ2v (lưu ý: các bạn nên disable trình diệt virus để có thể tải được game).
Thực hành
OllyDBG
Đầu tiên, chúng ta mở game và nhấn thử một ô bất kỳ trong các ô vuông trong game Minesweeper. Sau đó các bạn cứ để thời gian trong game nó chạy và các bạn mở OllyDBG lên và xem các thanh ghi trong game.|  | 
| Cửa sổ OllyDBg | 
Chúng ta nhìn vào menu bar của phần mềm OllyDBG, chọn View Memory và nó sẽ hiện ra các dòng dữ liệu dưới dạng mã hex. Chúng ta tìm tới chỗ minesam .data và chuột phải chọn Dump để dump dữ liệu trong file đó ra. Chúng ta sẽ tìm tới dòng có số là 10005340 để xác định dữ liệu trong game được lưu vào trong thanh ghi.
|  | 
| Cửa sổ Dump | 
Chúng ta nhìn vào menu bar chọn View -> CPU sẽ hiện cửa sổ các thanh ghi chứa các dữ liệu và các tiến trình trong game. Chúng ta tiếp tục chọn Debug -> Run để chạy chương trình ở chế độ debug.
|  | 
| Cửa sổ CPU | 
Chúng ta thử click vào ô bất kỳ trong game, khi đó dữ liệu trong thanh ghi cũng sẽ thay đổi theo. Do đó, chúng ta biết được game sẽ được lưu vào trong bộ nhớ RAM.
|  | 
| Cửa sổ game | 
Chúng ta có thể đọc được RAM, chúng ta có thể gian lận nó trong game. Các bạn lưu ý là cái dòng 0A 00 00 00 09 00 00 00 09 00 00 00 là chuỗi byte bảng game trong RAM, chúng ta có thể dùng phần mềm để dump dữ liệu ra và thay đổi dữ liệu trong đó.
Procdump
Chúng ta tắt trò chơi, mở Procdump ra gõ procdump –ma Minesweeper.exe mine để dump ra một file khác có tên là mine.dmp|  | 
| Cửa sổ cmd | 
HxD
Mở HxD và chọn file mine.dmp để mở. Sau đó, chúng ta nhấn tổ hợp phím Ctrl+F, chọn tab Hex-Value và gõ 0A 00 00 00 09 00 00 00 09 để tìm chuỗi byte trong thanh RAM.|  | 
| Cửa sổ HxD | 
Chúng ta chọn Search -> Find Again để tìm dữ liệu của bảng game.
|  | 
| Cửa sổ HxD | 
Python
Chúng ta sẽ thực hiện một đoạn code python để hiển thị các "trái mìn" trong bảng game.import os 
# Dump memory 
cmd = "del mine.dmp" 
os.system(cmd)
cmd = "procdump -ma minesam.exe mine" 
os.system(cmd) 
# Find gameboard 
mark ='\x0A\x00\x00\x00\x09\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x10\x10\x10\x10' 
nread = 20 
boardfound = 0 
gameboard = []
with open("mine.dmp", "rb") as f:  
  line = f.read(20)  
  
  while (boardfound == 0):    
    c = f.read(1)    
    if c == "":      
      print "File ended, but gameboard not found!"      
      exit()    
    line = line[1:] + c    
    nread += 1    
    if nread % 0x100000 == 0:      
      print "Looking at byte", hex(nread), nread    
    if line == mark:      
      print "Gameboard found at ", hex(nread)      
      boardfound = 1  
  for i in range(4):    
    gameboard.append('\x10')  
  for i in range(500):    
    gameboard.append(f.read(1)) 
# Print Gameboard 
l = len(gameboard) 
m = 32 # items per line 
for i in range(0, l-m, m):  
  line = ""  
  for j in range(m):    
    g = gameboard[i+j]    
    # print i, j, ord(g)    
    if g == '\x10':      
      c = "-"    
    elif g == '\x0f':      
      c = " "    
    elif g == '\x8f':      
      c = "*"    
    elif g == '\x00':      
      c = " "    
    else:      
      c = chr( ord(g) - 16 )    
    line += c  
  print line
Chúng ta chạy file python bằng câu lệnh python cheat.py để thực hiện đoạn cheat. Chúng ta sẽ thấy những dấu sao, đó là nơi sẽ có những trái mìn. Chúng ta cứ theo đó và làm theo trò chơi và chúng ta sẽ hoàn thành game một cách nhanh nhất.
|  | 
| Hoàn thành game | 
 

 
 
 
