30/09/2018, 18:09

Thắc mắc về Auto game: làm sao để lấy được những dữ liệu vd như máu, vị trí của người chơi để inject vào trong trò chơi

Mình thấy hiện giờ có khá nhiều auto game, vậy câu trả lời cua minh là làm sao để những phần mềm này lấy được những dữ liệu vd như máu, vị trí của người chơi để inject vào trong trò chơi

Le Hoai viết 20:25 ngày 30/09/2018

Công nghệ hiện thời thì mình cũng ko rõ lắm. Nhưng hồi xưa nhớ có ArtMoney j đấy thì nó đại loại như sau :

  1. Các chỉ số hp, exp hay các chỉ số các thì thực chất cũng là một biến int, double … được lưu trên RAM.
  2. Đầu tiên chươn trình sẽ filter ra dải bộ nhớ của chương trình game, khi một chương trình start nó sẽ được HĐH cấp phát một vùng nhớ riêng.(Làm sao ArtMoney có thể truy cập được của chương trình khác thì mình không biết ).
  3. Giả sử HP của bạn đang là 200 => Input giá trị 200 vào filter, nó sẽ filter tất cả các vùng nhớ trong dải lấy được ở step 2, xem cái nào có giá trị là 200 thì liệt kê ra. giả sử chúng ta có 3 vùng nhớ là X1, X2, X3 có giá trị 200 ( thực tế thì nhiều lắm ).
  4. Bạn vào game đánh đánh vài con quái, làm cho hp giảm xuống 183 chẳng hạn. Sau đó ra ngoài chương trình ArtMoney => filter các vùng nhớ X1,X2,X3 xem cái nào có gái trị 183. => Chúng ta sẽ xác định được chính xác địa chỉ nào là nơi chưa giá trị của HP.
  5. Sau đó thì can thiệp trực tiếp vào vùng nhớ này và thay đổi giá trị 183 thành bao nhiêu là tùy ý bạn.

Lưu ý là cách làm này vẫn có thể có xác xuất filter mãi ở step 4 mà vẫn ra nhiều giá trị, bạn phải quay lại step3 đến khi nào xác định được thì thôi.
Còn hiện nay thì nó thường đồng bộ với server or được mã hóa theo acchs nào đó, nên cách làm này khả năng là ko hữu dụng nữa, chỉ tham khảo thôi

Mai Anh Dũng viết 20:21 ngày 30/09/2018

Câu trả lời của @leHoai gần đủ rồi đấy. Đạt bổ sung thêm

Các chỉ số hp, exp hay các chỉ số các thì thực chất cũng là một biến int, double … được lưu trên RAM.

Chính xác

Đầu tiên chương trình sẽ filter ra dải bộ nhớ của chương trình game, khi một chương trình start nó sẽ được HĐH cấp phát một vùng nhớ riêng.(Làm sao ArtMoney có thể truy cập được của chương trình khác thì mình không biết ).

ArtMoney hay một chương trình khác là CheatEngine sẽ lấy process ID của game để lấy được vùng nhớ. Lúc mình chạy ArtMoney lên nó sẽ bắt mình chọn cái process (Game) để “hack”

Giả sử HP của bạn đang là 200 => Input giá trị 200 vào filter, nó sẽ filter tất cả các vùng nhớ trong dải lấy được ở step 2, xem cái nào có giá trị là 200 thì liệt kê ra. giả sử chúng ta có 3 vùng nhớ là X1, X2, X3 có giá trị 200 ( thực tế thì nhiều lắm ).

Đúng Làm nhiều sẽ hiểu.

Sau đó thì can thiệp trực tiếp vào vùng nhớ này và thay đổi giá trị 183 thành bao nhiêu là tùy ý bạn.

Vùng nhớ mà mình lấy được gọi là offset, tức là khoảng cách từ điểm bắt đầu của stack của chương trình cho tới điểm lưu trữ biến này. Các biến này là biến static hoặc là global thì ta mới có thể có được offset chính xác. Vì các biến này là biến toàn cục/static nên nó sẽ được cấp vùng nhớ static và tồn tại từ khi bắt đầu cho đến khi kết thúc chương trình, có như vậy nó mới không thay đổi và có thể đọc được giá trị.

Ví dụ nhé, ta có biến double m_hp nằm trong class Character. Giả sử Class Character này là biến static để có thể truy cập từ nhiều nơi trong game.

class Character {
    double m_hp;
    double m_mp;
}

Giả sử ta tìm được vị trí của m_hp0x78905050 thì địa chỉ của m_mp sẽ là 0x78905058 với double là 8 bytes. Vị trí của các biến này là cố định từ lúc khởi động cho tới lúc tắt và kể cả cho lần chạy game tiếp theo. Giá trị này chỉ thay đổi nếu class Character thay đổi cấu trúc hoặc vị trí khởi tạo của Character khác với lần trước. Ví dụ ta thêm biến double m_gold

class Character {
    double m_gold;
    double m_hp;
    double m_mp;
}

Hoặc lúc đầu ta khai báo:

static Character c;

Nay ta sửa lại

bool is_premium = false;
static Character c;

Còn hiện nay thì nó thường đồng bộ với server or được mã hóa theo acchs nào đó, nên cách làm này khả năng là ko hữu dụng nữa, chỉ tham khảo thô

Chỗ này chưa đúng, các thông tin này mình đọc ở client, nên việc đọc không bị ảnh hưởng bởi server. Còn việc ghi thì ăn thua hên xui Hên hên thì vẫn hack được speed

Minh Hoàng viết 20:22 ngày 30/09/2018

Một số thằng như kiểu linked list ấy, phải dò theo từng con trỏ mới biết giá trị cuối cùng nằm ở đâu, mà hình như CheatEngine có phần demo như vậy

明玉 viết 20:18 ngày 30/09/2018

đọc được giá trị trong game là một chuyện, điều khiển nv lại là một chuyện khác. cái này phải dùng một disassembler để đọc code của game xem nó chạy thế nào, xong vận dụng tùm lum kỹ thuật như inject code, hook code mới xong (ít nhất theo kiến thức của minh), những người làm được là có năng khiếu kiến trúc máy tính rồi

Nguyễn Cao Huy viết 20:12 ngày 30/09/2018

Em thấy có nhiều bot nó chẳng cần scan mà nó vẫn lấy đc giá tri

Mai Anh Dũng viết 20:19 ngày 30/09/2018

Sao em “thấy” được ?

Nguyễn Cao Huy viết 20:25 ngày 30/09/2018

@ltd để mai em chụp ảnh lên cho, em cũng không chắc nhưng giờ bố em đang ở nhà, bố em không cho chơi điện tử

Mai Anh Dũng viết 20:12 ngày 30/09/2018

@ltd để mai em chụp ảnh lên cho

Làm sao chụp ảnh mà em biết được là nó có scan hay không? Việc scan là việc trước khi viết ứng dụng cơ mà?

Người ta sẽ scan, tìm ra địa chỉ của các biến hp, mp, etc. sau đó viết ứng dụng để đọc các giá trị đấy.

Nguyễn Cao Huy viết 20:12 ngày 30/09/2018

không anh ạ, theo em nhớ thì CE đầu tien mình pahir scan giá trị ấy rồi thay đổi giá trị ấy rồi lại scan lai, cứ như thế đén khi tìm đc giá trị cuối cùng. còn cái L# này thì nó cho phép người dùng xây dựng lên các chương trình thông qua bộ thư viện của nó, nhung mà phải thông qua cái loader của nó thì mới inject được vào game, không thì sẽ bị ngoại lệ. Em đã thử viết 1 cái chương trình đơn giản cho phép lúc vào đầu game nó hiên số máu, … Vào game, nó hiện lên chỉ số máu ngay, mà không phải thay đổi giá trị đó như CE, mà CE quét lần 1 ra 1 đống, phải lọc từ từ r mới tìm đc ra giá trị cuối. Ma theo em biết thì địa chỉ của vùng nhớ sẽ bị thay đổi theo mỗi lần chạy chương trình thì phải.

Mai Anh Dũng viết 20:22 ngày 30/09/2018

Đó là bởi vì em chưa lấy được static address nên cứ phải scan đi scan lại, khi em lấy được static address rồi thì không cần phải scan nữa, vị mọi lần mở ứng dụng lên thì ta sẽ lấy được các giá trị đấy chính xác mà không cần phải scan nữa theo địa chỉ ta scan được.

Nguyễn Cao Huy viết 20:25 ngày 30/09/2018

thì ra là thế, em cảm ơn anh. Mà em lên mạng tìm hiểu về mấy cái đấy thì nó chỉ ra là"How to find pointer with CE", vậy thì stactic address và pointer có phải là giống nhau không anh ?

Bài liên quan
0