# 05. Cơ chế Bảo mật & Chống Nhận diện (Anti-Detection & Security)

> **Cấp độ Bảo mật**: Hardware-Level Input & Kernel Stealth Memory  
> **Mục tiêu**: Triệt tiêu hoàn toàn các dấu hiệu nhận diện phần mềm (Software Artifacts) và mẫu hành vi phi sinh học (Non-Human Behavioral Heuristics).

---

## 1. Mô hình Đe dọa của POE2 (Threat Model - T9/2026)

Hệ thống bảo mật và chống gian lận của Path of Exile 2 vận hành theo mô hình kiểm tra đa tầng kết hợp:

```mermaid
graph TD
    subgraph "Mô hình Kiểm tra của Game Client"
        CheckAPI["Kiểm tra Cờ Input: LLMHF_INJECTED trong GetAsyncKeyState / RawInput"]
        CheckMem["Quét Chữ ký & Thuộc tính Trang Bộ nhớ (PAGE_EXECUTE_READWRITE)"]
        CheckThreads["Duyệt danh sách Luồng bất thường (Thread Enumeration)"]
        ScreenShot["Chụp màn hình kiểm tra ngầm (Internal Framebuffer Capture)"]
    end

    subgraph "Mô hình Phân tích Máy chủ (Server-Side Heuristics)"
        Trajectory["Phân tích Quỹ đạo Chuột (Độ thẳng, Vận tốc góc)"]
        Timing["Thống kê Phân phối Thời gian (Click Dwell Time, Reaction Variance)"]
        Activity["Phát hiện Thời gian Chơi Bất thường (24/7 Farming Activity)"]
    end

    CheckAPI --> BanDecision["Cảnh báo & Khóa Tài khoản"]
    CheckMem --> BanDecision
    CheckThreads --> BanDecision
    ScreenShot --> BanDecision
    Trajectory --> BanDecision
    Timing --> BanDecision
    Activity --> BanDecision
```

1. **Phát hiện Đầu vào Cấp phần mềm (Software Input Flagging)**:
   - Các hàm API chuẩn của Windows như `mouse_event` hoặc `SendInput` tự động gắn cờ `LLMHF_INJECTED`. POE2 bắt các thông điệp này qua hàm `GetRawInputData` hoặc các hook cấp thấp (`WH_MOUSE_LL`). Bất kỳ thao tác nào có cờ này sẽ bị ghi nhận vào danh sách khả nghi.
2. **Phân tích Hành vi Máy tính (Behavioral Profiling)**:
   - Chuột di chuyển theo đường thẳng hoàn hảo hoặc dịch chuyển tức thời (Instant Teleport).
   - Khoảng cách thời gian giữa các cú click là hằng số cố định (ví dụ: đúng 100ms mỗi lần bấm).
   - Tỷ lệ click trúng chính xác tâm điểm ảnh (Pixel-perfect accuracy) 100% không có sai số.
3. **Quét Bộ nhớ & Chụp ảnh Màn hình**:
   - Quét các trang bộ nhớ bị thay đổi cờ bảo vệ từ `PAGE_EXECUTE_READ` sang `PAGE_EXECUTE_READWRITE` (dấu hiệu của việc vá mã / code patch).
   - Chụp lại bộ đệm DirectX 12 để tìm các lớp phủ ESP hiển thị thông tin can thiệp.

---

## 2. Mô phỏng Đầu vào Cấp độ Phần cứng (Hardware-Level Emulation)

Để vượt qua hoàn toàn việc kiểm tra cờ phần mềm, **AutoPOE2** chuẩn hóa việc điều khiển chuột/phím thông qua thiết bị phần cứng rời:

```mermaid
flowchart LR
    subgraph HostPC ["Máy tính Chơi Game (Gaming PC)"]
        GameClient["PathOfExile.exe"]
        USBCable["Cổng USB Vật lý"]
    end

    subgraph KMBoxDevice ["Bộ Điều khiển Phần cứng: KMBox B+ Pro / Net"]
        Firmware["Firmware Tùy biến: Giả lập Chuột Gaming Logitech G502"]
        HardwareChip["Vi xử lý STM32 / Dual MCU"]
    end

    subgraph Controller ["Tiến trình Điều khiển (Tool Core)"]
        CoreInput["Core Input Synthesizer"]
        SerialPort["Giao tiếp UART (COM Port) hoặc Cáp Mạng UDP"]
    end

    CoreInput --> SerialPort
    SerialPort --> HardwareChip
    HardwareChip --> Firmware
    Firmware --> USBCable
    USBCable --> GameClient
```

### 2.1. Thiết bị Phần cứng KMBox (B+ Pro / Net) - Chuẩn An toàn Cao nhất
- **Cơ chế Hoạt động**:
  - Thiết bị cắm vào cổng USB của PC chơi game và nạp firmware giả lập định danh (USB VID/PID) của một chuột chơi game thật (ví dụ: Logitech G Pro X Superlight hoặc Razer DeathAdder).
  - Hệ điều hành Windows và client POE2 nhìn nhận thiết bị này là một chuột/bàn phím vật lý 100%. Mọi tín hiệu gửi đi đều mang cờ phần cứng gốc (không bao giờ có cờ `INJECTED`).
  - Giao thức điều khiển được gửi từ Tool tới KMBox qua cổng Serial UART tốc độ cao (Baudrate: 115200) hoặc qua gói tin UDP mạng nội bộ (KMBox Net với độ trễ < 0.2ms).

#### Mã nguồn Mẫu C++ Điều khiển KMBox Net qua UDP Socket:
```cpp
#include <winsock2.h>
#include <ws2tcpip.h>
#include <string>
#include <cstdio>

#pragma comment(lib, "ws2_32.lib")

class KMBoxNetClient {
private:
    SOCKET sock;
    sockaddr_in serverAddr;
    uint32_t clientMac;

public:
    KMBoxNetClient(const std::string& ip, int port, uint32_t mac) : clientMac(mac) {
        WSADATA wsa;
        WSAStartup(MAKEWORD(2, 2), &wsa);
        sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        
        serverAddr.sin_family = AF_INET;
        serverAddr.sin_port = htons(port);
        inet_pton(AF_INET, ip.c_str(), &serverAddr.sin_addr);
    }

    ~KMBoxNetClient() {
        closesocket(sock);
        WSACleanup();
    }

    // Di chuyển chuột tương đối (Relative Move) qua phần cứng
    void Move(short rx, short ry) {
        #pragma pack(push, 1)
        struct {
            uint32_t mac;
            uint32_t rand;
            uint32_t index;
            uint32_t cmd;
            short x;
            short y;
        } pkt;
        #pragma pack(pop)

        pkt.mac = clientMac;
        pkt.cmd = 0xA2345678; // Mã opcode phần cứng KMBox
        pkt.x = rx;
        pkt.y = ry;
        
        sendto(sock, (const char*)&pkt, sizeof(pkt), 0, (sockaddr*)&serverAddr, sizeof(serverAddr));
    }

    // Gửi phím bấm phần cứng (Spacebar để Dodge Roll)
    void SendKey(uint8_t vKey, bool isDown) {
        // Gói tin mô phỏng gõ phím vật lý HID ScanCode
    }
};
```

### 2.2. Giải pháp Dự phòng Phần mềm (Virtual HID Filter Driver)
- Nếu người dùng chưa trang bị phần cứng KMBox, hệ thống tích hợp giải pháp phần mềm dự phòng: **Custom Virtual HID Driver** can thiệp trực tiếp vào ngăn xếp driver USB (`hidclass.sys`), tước bỏ cờ `LLMHF_INJECTED` trước khi thông điệp chạm tới tầng người dùng (User-Mode).

---

## 3. Thuật toán Mô phỏng Quỹ đạo Sinh học Người (Human Bio-Jitter Engine)

Mọi chuyển động chuột của hệ thống được tính toán qua 3 tầng thuật toán mô phỏng hành vi tự nhiên của con người:

```mermaid
graph LR
    StartPos["Tọa độ Hiện tại (X1, Y1)"]
    TargetPos["Tọa độ Đích (X2, Y2)"]
    
    Bezier["Đường cong Bézier Bậc 3 (Cubic Bézier Curve)"]
    Fitts["Định luật Fitts (Gia tốc & Giảm tốc)"]
    Brownian["Nhiễu Sinh học Ngẫu nhiên (Brownian Tremor)"]
    Overshoot["Lệch điểm ngắm & Sửa lỗi (Overshoot & Correction)"]
    
    StartPos --> Bezier
    TargetPos --> Bezier
    Bezier --> Fitts
    Fitts --> Brownian
    Brownian --> Overshoot
    Overshoot --> FinalOutput["Tọa độ Chuột Thực tế"]
```

### 3.1. Đường cong Bézier Bậc 3 với Điểm Kiểm soát Động
Quỹ đạo chuột không bao giờ đi theo đường thẳng mà uốn lượn theo một đường cong mượt mà:
$$B(t) = (1-t)^3 P_0 + 3(1-t)^2 t P_1 + 3(1-t) t^2 P_2 + t^3 P_3, \quad t \in [0, 1]$$
- $P_0$: Điểm xuất phát của con trỏ chuột.
- $P_3$: Điểm đích (vật phẩm rơi hoặc vị trí quái).
- $P_1, P_2$: Hai điểm kiểm soát (Control Points) được sinh ngẫu nhiên lệch khỏi đường nối trực tiếp một khoảng tỉ lệ thuận với khoảng cách di chuyển.

### 3.2. Mô hình Tốc độ theo Định luật Fitts (Fitts's Law Velocity Profile)
- Tay người khi lia chuột sẽ tăng tốc nhanh ở giai đoạn đầu và từ từ giảm tốc khi tiếp cận gần mục tiêu để đảm bảo độ chính xác.
- Tốc độ di chuyển theo biến $t$ được điều tiết bằng hàm Sigmoid / Ease-Out:
  $$v(t) = \frac{1}{1 + e^{-k(t - t_0)}}$$

### 3.3. Rung lắc Bàn tay Tự nhiên (Brownian Micro-Jitter) & Hiện tượng Lệch đích (Overshoot)
- **Micro-Jitter**: Bổ sung một lượng nhiễu ngẫu nhiên Gaussian ($\mu = 0, \sigma = 0.5\text{ px}$) tại mỗi frame di chuyển, mô phỏng độ rung tay sinh học của người chơi.
- **Overshoot & Correction (Quá đà và căn chỉnh lại)**: Với xác suất ~35% (tỷ lệ chuẩn của người thật khi lia chuột nhanh), con trỏ chuột sẽ vọt qua mục tiêu khoảng 2 - 6 pixel, dừng lại trong 20ms, sau đó mới kéo nhẹ lại đúng vị trí cần nhấp.
- **Biến thiên Thời gian Giữ phím (Click Dwell Time)**:
  - Thời gian giữ nút chuột hoặc phím bấm tuân theo phân phối chuẩn Gaussian:
    $$\text{DwellTime} \sim \mathcal{N}(75\text{ms}, 15\text{ms})$$
  - Triệt tiêu hoàn toàn khả năng bị hệ thống phân tích nhịp nhấn phím phát hiện.

---

## 4. Truy cập Bộ nhớ Tàng hình (Stealth Memory Access)

Để đọc dữ liệu game một cách an toàn mà không để lại vết tích, hệ thống áp dụng 2 kỹ thuật hàng đầu:

### 4.1. Kỹ thuật 1: Đọc Bộ nhớ qua Card Phần cứng PCIe DMA (Direct Memory Access - Tuyệt đối An toàn)
- **Mô hình 2 Máy tính (Dual-PC Setup)**:
  - **PC 1 (Gaming PC)**: Chạy game `PathOfExile.exe` với 100% dung lượng sạch, hoàn toàn không cài đặt bất kỳ file hack hay script bot nào. Cắm 1 card PCIe DMA (Screamer PCIe Squirrel hoặc LeechCore FPGA).
  - **PC 2 (Radar / Bot PC)**: Chạy Tier 1 C++ Core Engine và Tier 2 Google Antigravity Agent Swarm. Đọc trực tiếp bộ nhớ RAM của PC 1 thông qua giao tiếp phần cứng DMA cáp USB-C / Thunderbolt tốc độ cao (băng thông > 300MB/s).
  - **Thư viện Tích hợp**: Sử dụng `vmmdll.h` (MemProcFS / PCILeech):
    ```cpp
    #include <vmmdll.h>

    // Khởi tạo DMA đọc bộ nhớ máy chơi game
    VMM_HANDLE hVMM = VMMDLL_Initialize(3, (LPSTR[]){ "", "-device", "fpga" });
    DWORD dwPID = 0;
    VMMDLL_PidGetFromName(hVMM, "PathOfExile.exe", &dwPID);

    // Đọc trạng thái người chơi an toàn tuyệt đối 100% không để lại dấu vết phần mềm
    PlayerState player;
    VMMDLL_MemReadEx(hVMM, dwPID, playerAddress, (PBYTE)&player, sizeof(player), NULL, VMMDLL_FLAG_NOCACHE);
    ```

### 4.2. Kỹ thuật 2: Đọc Bộ nhớ qua Kernel Driver Chế độ Nhân (Single-PC Stealth Driver)
- Nếu chỉ sử dụng 1 PC duy nhất:
  - Công cụ nạp một Kernel Driver sử dụng cơ chế bảo vệ phân trang nhớ CR3.
  - Driver map các trang nhớ vật lý của `PathOfExile.exe` sang không gian nhân (`MmMapIoSpace` hoặc `KeStackAttachProcess`).
  - Không mở bất kỳ `HANDLE` nào tới game, vô hiệu hóa hoàn toàn cơ chế quét `PROCESS_QUERY_INFORMATION` hay `PROCESS_VM_READ` của các module bảo vệ.

---

## 5. Lớp phủ Tàng hình trước Màn hình Chụp (Invisible Overlay Capture Protection)

Nếu kích hoạt giao diện Overlay hỗ trợ vẽ thông tin chiến thuật (ESP, quái, bẫy):
- Cửa sổ lớp phủ Direct3D 12 được áp dụng cờ bảo mật của Windows:
  ```cpp
  SetWindowDisplayAffinity(hWndOverlay, WDA_EXCLUDEFROMCAPTURE);
  ```
- **Tác dụng**:
  - Lớp phủ chỉ hiển thị trực tiếp lên mắt người nhìn qua màn hình vật lý.
  - Mọi thao tác chụp màn hình từ client game, chụp màn hình Windows (PrintScreen, Snip), phần mềm stream (OBS, Discord), hoặc công cụ kiểm duyệt từ xa sẽ chỉ nhìn thấy màn hình game nguyên bản 100% không có bất kỳ dấu vết nào của công cụ.
