Chuyển đến nội dung chính
Hướng dẫn AI

Kết nối Trợ lý AI với x64dbg bằng x64dbg-MCP Server

Tìm hiểu cách cài đặt x64dbg-MCP Server, bảo mật điểm cuối HTTP, kết nối Trợ lý AI tương thích với MCP và thực hiện các tác vụ gỡ lỗi phổ biến như tải tệp nhị phân, đặt điểm dừng, kiểm tra thanh ghi, đọc bộ nhớ, truy vết mã và phân tích mô-đun.

Kết nối Trợ lý AI với x64dbg bằng x64dbg-MCP Server

Máy chủ x64dbg-MCP là gì?

x64dbg-MCP Server là một plugin gốc triển khai Model Context Protocol cho x64dbg. Plugin cung cấp các chức năng của x64dbg thông qua JSON-RPC trên HTTP, cho phép trợ lý AI tương thích với MCP điều khiển các phiên gỡ lỗi bằng lập trình.

Trợ lý có thể tải hoặc gắn vào một tiến trình, đặt điểm ngắt, thực hiện từng lệnh, kiểm tra các thanh ghi, đọc và vá bộ nhớ, kiểm tra mô-đun và luồng, trích xuất chuỗi, lần theo tham chiếu, phân tích cấu trúc PE và thực hiện nhiều thao tác phân tích ngược khác.

Plugin được viết bằng Zig và chạy trực tiếp bên trong x64dbg. Plugin không yêu cầu Python, .NET hoặc môi trường chạy riêng. Plugin hỗ trợ đặc tả MCP 2024-11-05 với các giao thức truyền tải Streamable HTTP và SSE cũ.

Chỉ sử dụng phần mềm này cho hoạt động phân tích ngược hợp pháp, phân tích mã độc, nghiên cứu bảo mật, giáo dục hoặc công việc khác mà bạn được ủy quyền rõ ràng.

Tính năng chính

  • Điều khiển trình gỡ lỗi toàn diện: Các công cụ bao phủ việc dịch ngược, thực thi, điểm ngắt, thanh ghi, bộ nhớ, mô-đun, luồng, ngăn xếp lời gọi, ký hiệu, tham chiếu, phân tích PE, truy vết, kết xuất, kiểm tra PEB và nhiều chức năng khác.
  • Phạm vi sự kiện trình gỡ lỗi rộng: Plugin ghi lại các sự kiện gồm khởi tạo, dừng, điểm ngắt, ngoại lệ, thực hiện từng bước, gắn tiến trình, hoạt động DLL và hoạt động luồng.
  • Triển khai gốc: Plugin không có phần phụ thuộc vào môi trường chạy hoặc framework bên ngoài.
  • Hỗ trợ x32 và x64: Một cơ sở mã có thể xây dựng plugin cho cả hai kiến trúc x64dbg.
  • Hai giao thức truyền tải MCP: Streamable HTTP được khuyến nghị, còn SSE hỗ trợ các ứng dụng MCP cũ.
  • Xác thực bắt buộc: Mọi yêu cầu phải mang theo Bearer token hợp lệ.
  • Tự động khởi động: Máy chủ khởi động khi x64dbg được mở.
  • Cấu hình tích hợp: Menu Plugins của x64dbg cung cấp các cài đặt cho địa chỉ liên kết, cổng và token.
  • Biên dịch chéo: Zig có thể xây dựng plugin Windows từ Windows, WSL, Linux hoặc macOS.

Cách tích hợp hoạt động

Khi x64dbg khởi động, plugin phân giải các ký hiệu API của trình gỡ lỗi từ x64bridge.dll và x64dbg.dll. Sau đó, plugin khởi động một máy chủ HTTP trên luồng nền. Ứng dụng MCP gửi các yêu cầu JSON-RPC đã xác thực và mỗi công cụ MCP ánh xạ tới các lệnh gọi SDK x64dbg, chẳng hạn như đặt điểm ngắt, đọc bộ nhớ hoặc tiếp tục thực thi.

Vì plugin chạy bên trong tiến trình x64dbg, plugin giao tiếp trực tiếp với API của trình gỡ lỗi. Không cần tiến trình trợ giúp bên ngoài hoặc dịch vụ thăm dò định kỳ.

Cài đặt plugin

Tùy chọn 1: Cài đặt bản phát hành

  1. Tải gói mới nhất từ các bản phát hành trên GitHub của dự án.
  2. Giải nén gói.
  3. Sao chép nội dung của thư mục dist/ vào thư mục gốc của bản cài đặt x64dbg.
  4. Khởi chạy phiên bản x32 hoặc x64 của x64dbg.

Bản phân phối phản ánh cấu trúc thư mục của x64dbg, vì vậy việc sao chép vào thư mục gốc sẽ cài đặt plugin cho cả hai kiến trúc:

dist/
├── x32/
│   └── plugins/
│       └── x64dbg-MCP-Server.dp32
└── x64/
    └── plugins/
        └── x64dbg-MCP-Server.dp64

Máy chủ tự động khởi động. Các cổng mặc định là:

  • x64: 0.0.0.0:9094
  • x32: 0.0.0.0:9095

Tùy chọn 2: Xây dựng từ mã nguồn

Việc xây dựng yêu cầu Zig 0.16-dev hoặc mới hơn. Từ thư mục gốc của kho mã, hãy chạy:

zig build -Doptimize=ReleaseSafe --prefix dist

Lệnh này tạo các tệp plugin x32 và x64 bên dưới dist/. Sao chép nội dung của thư mục đó vào thư mục gốc x64dbg giống như khi sử dụng gói phát hành.

Cấu hình máy chủ và xác thực

Trong x64dbg, mở Plugins > x64dbg-MCP Server > Configure MCP Server.... Hộp thoại cho phép bạn thay đổi địa chỉ liên kết, cổng và token xác thực.

  • Sử dụng 127.0.0.1 khi ứng dụng MCP chạy trên cùng hệ thống Windows và không cần truy cập từ xa.
  • Sử dụng 0.0.0.0 khi kết nối từ WSL hoặc một máy khác cần truy cập máy chủ qua mạng.
  • Chọn Copy để sao chép token hiện tại.
  • Chọn Generate để thay token mới.

Bearer token được tự động tạo trong lần chạy đầu tiên. Các yêu cầu không có token chính xác sẽ nhận phản hồi 401 Unauthorized. Các thay đổi đã lưu có hiệu lực ngay lập tức vì máy chủ tự động khởi động lại. Cấu hình được lưu trong mcp_config.json bên cạnh tệp thực thi x64dbg.

Máy chủ cung cấp quyền đọc và ghi bộ nhớ, thao tác tiến trình và thực thi lệnh trình gỡ lỗi qua HTTP không mã hóa. Không để máy chủ lộ ra mạng không đáng tin cậy, dù xác thực Bearer là bắt buộc.

Kết nối ứng dụng MCP

Cấu hình Streamable HTTP được khuyến nghị

Thêm một mục máy chủ vào cấu hình ứng dụng MCP, chẳng hạn như .mcp.json. Với cổng x64 mặc định, hãy sử dụng:

{
  "mcpServers": {
    "x64dbg": {
      "type": "http",
      "url": "http://localhost:9094/",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN_HERE"
      }
    }
  }
}

Thay YOUR_TOKEN_HERE bằng token đã sao chép từ hộp thoại cấu hình plugin. Nếu sử dụng x32dbg, hãy đổi cổng mặc định thành 9095.

Cấu hình SSE cho các ứng dụng khách cũ

Nếu ứng dụng khách MCP của bạn chỉ hỗ trợ SSE, hãy chọn phương thức truyền sse và thêm /sse vào endpoint:

{
  "mcpServers": {
    "x64dbg": {
      "type": "sse",
      "url": "http://localhost:9094/sse",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN_HERE"
      }
    }
  }
}

Để truy cập từ WSL hoặc từ xa, hãy thay localhost bằng địa chỉ IP của máy chủ Windows và đảm bảo máy chủ được liên kết với 0.0.0.0.

Chạy phiên gỡ lỗi cơ bản có AI hỗ trợ

Sau khi kết nối ứng dụng khách, hãy mở x64dbg và yêu cầu trợ lý thực hiện một chuỗi tác vụ gỡ lỗi nhỏ. Một phiên điển hình có thể bắt đầu như sau:

Tải calc.exe và dừng tại điểm vào.

Trợ lý có thể kết hợp LoadBinary, SetBreakpoint, run và WaitForPause để tải tệp thực thi, tiếp tục thực thi và chờ đến khi đạt điểm dừng.

Kiểm tra các thanh ghi

Sau khi tiến trình mục tiêu tạm dừng, hãy hỏi:

Hiển thị các thanh ghi CPU hiện tại.

Trợ lý có thể gọi GetAllRegisters. Để thay đổi một giá trị trong phiên gỡ lỗi được ủy quyền, trợ lý có thể sử dụng SetRegister.

Đọc và dịch ngược bộ nhớ

Yêu cầu trợ lý kiểm tra mã xung quanh con trỏ lệnh hiện tại:

Đọc 64 byte tại con trỏ lệnh hiện tại và dịch ngược 10 lệnh tiếp theo.

Việc này có thể sử dụng GetCurrentAddress, ReadMemory và Disassemble. Để kiểm tra một hàm đã được phân tích hoàn chỉnh, hãy yêu cầu DisassembleFunction.

Thực thi từng bước qua mã

Các công cụ thực thi tương ứng với những thao tác quen thuộc trong x64dbg:

  • StepInto đi vào các lệnh gọi hàm như F7.
  • StepOver bỏ qua các lệnh gọi hàm như F8.
  • StepOut chạy cho đến khi hàm hiện tại trả về.
  • run tiếp tục thực thi như F9.
  • PauseDebug tạm dừng tiến trình mục tiêu.
  • RunToAddress tiếp tục cho đến khi đạt địa chỉ được chỉ định.

Ví dụ:

Bỏ qua ba lệnh tiếp theo, sau đó hiển thị địa chỉ hiện tại và ngăn xếp lệnh gọi.

Trợ lý có thể gọi StepOver ba lần, sau đó gọi GetCurrentAddress và GetCallStack.

Sử dụng điểm dừng hiệu quả

Plugin hỗ trợ điểm dừng phần mềm thông thường, điểm dừng phần cứng, điểm dừng bộ nhớ, điểm dừng có điều kiện và điểm dừng ngoại lệ.

Ví dụ về điểm dừng có điều kiện

Đặt điểm dừng trên hàm mục tiêu, nhưng chỉ tạm dừng khi điều kiện x64dbg được chỉ định là đúng.

Trợ lý có thể sử dụng SetConditionalBreakpoint với biểu thức điều kiện x64dbg và một thao tác ghi nhật ký tùy chọn. Các công cụ liên quan có thể bật, tắt, chuyển đổi, xóa hoặc đặt lại số lần điểm dừng được kích hoạt.

Điểm dừng phần cứng và bộ nhớ

Sử dụng SetHardwareBreakpoint để theo dõi thao tác đọc, ghi hoặc thực thi thông qua các thanh ghi gỡ lỗi khả dụng. Sử dụng SetMemoryBreakpoint khi việc theo dõi đọc, ghi hoặc thực thi ở cấp trang phù hợp hơn với quá trình điều tra.

Trước khi tạo thêm điểm dừng, hãy yêu cầu trợ lý gọi ListBreakpoints. Việc này giúp tránh trạng thái trình gỡ lỗi bị trùng lặp hoặc xung đột.

Phân tích mô-đun, ký hiệu và tham chiếu

Máy chủ cung cấp một số công cụ để chuyển từ gỡ lỗi cấp thấp sang phân tích chương trình trên phạm vi rộng hơn:

  • ListModules báo cáo các mô-đun đã tải, địa chỉ cơ sở và kích thước.
  • AnalyzeModule kiểm tra các section PE, điểm vào và kích thước image.
  • GetImports và GetExports kiểm tra các bảng import và export.
  • SearchSymbols tìm các ký hiệu khớp với một mẫu.
  • GetFunctions liệt kê các hàm và nhãn đã được phân tích.
  • GetReferences tìm các tham chiếu CALL và JMP đến một địa chỉ mục tiêu.
  • FindPattern quét bộ nhớ mô-đun và hỗ trợ ký tự đại diện ??.
  • GetStrings trích xuất các chuỗi ASCII từ bộ nhớ của mô-đun.
  • DetectOEP hỗ trợ xác định điểm vào ban đầu của các tệp thực thi đã được đóng gói.

Một yêu cầu phân tích thực tế có thể là:

Liệt kê các mô-đun đã tải, phân tích tệp thực thi chính, trích xuất các chuỗi ASCII và hiển thị các tham chiếu đến hàm đã chọn.

Mẹo nâng cao

Sử dụng quy trình làm việc nhận biết sự kiện

Tránh giả định rằng tiến trình mục tiêu đã tạm dừng ngay sau khi tiếp tục thực thi. Hãy sử dụng WaitForPause hoặc WaitForEvent sau run, các thao tác với điểm dừng hoặc những tác vụ gỡ lỗi bất đồng bộ khác. GetEventLog có thể dùng để xem lại các điểm dừng, ngoại lệ, lần tải DLL và những sự kiện liên quan gần đây.

Theo dõi thay vì lặp lại từng bước riêng lẻ

Để ghi lại lịch sử lệnh ngắn, hãy sử dụng TraceInto nhằm ghi lại địa chỉ và mã dịch ngược khi đi vào các lệnh gọi hàm. Sử dụng TraceOver khi cần bỏ qua các lệnh gọi hàm. Cách này thuận tiện hơn việc gửi nhiều yêu cầu thực thi từng bước riêng biệt.

Kiểm tra hàng loạt biểu thức

EvalExpression đánh giá một biểu thức x64dbg, chẳng hạn như địa chỉ, thanh ghi hoặc biểu thức số học. Khi cần theo dõi đồng thời nhiều giá trị, hãy sử dụng WatchExpressions để đánh giá nhiều biểu thức trong một yêu cầu.

Bảo toàn và khôi phục trạng thái phân tích

Sử dụng CommentOrLabelAtAddress và các công cụ đánh dấu để chú thích những vị trí quan trọng. Gọi SaveDatabase để lưu cơ sở dữ liệu x64dbg dưới dạng tệp .dd64 hoặc .dd32.

Vá mã cẩn thận

WriteMemToAddress vá các byte, trong khi Assemble ghi một lệnh đã được hợp dịch tại một địa chỉ. Kiểm tra các byte hiện có và lưu lại các thay đổi trước khi vá. Sử dụng GetPatches để xem xét các sửa đổi và RestorePatches để khôi phục các byte ban đầu.

Điều tra các cấu trúc tiến trình

Sử dụng GetPEB để kiểm tra các trường Process Environment Block, GetSEHChain cho chuỗi Structured Exception Handler của x32, và GetArguments để kiểm tra các đối số của hàm từ thanh ghi hoặc ngăn xếp. FollowPointer có thể giải tham chiếu một chuỗi con trỏ theo số cấp được chỉ định.

Giảm thiểu việc tiếp xúc mạng

Ưu tiên 127.0.0.1 trừ khi cần kết nối từ xa. Nếu buộc phải liên kết với 0.0.0.0, hãy hạn chế quyền truy cập bằng các biện pháp kiểm soát mạng đáng tin cậy, bảo vệ token và thay token nếu nghi ngờ bị lộ. Lưu ý rằng giao thức truyền tải là HTTP, không phải HTTPS được mã hóa.

Các công cụ vận hành hữu ích

  • GetDebugState kiểm tra xem một phiên gỡ lỗi có đang hoạt động hay không, đồng thời báo cáo PID và con trỏ lệnh.
  • AttachProcess gắn x64dbg vào một tiến trình đang chạy theo PID.
  • ExecuteDebuggerCommand chạy trực tiếp một lệnh x64dbg.
  • ListCommandsByCategory giúp máy khách MCP phát hiện các công cụ hiện có.
  • GetThreads, SwitchThread, SuspendThread và ResumeThread quản lý ngữ cảnh luồng.
  • GetMemoryMap và GetDumpableRegions xác định các vùng bộ nhớ trước khi đọc hoặc kết xuất chúng.
  • DumpMemory lưu một vùng bộ nhớ được chọn, trong khi DumpModule lưu toàn bộ một mô-đun.
  • StopDebug kết thúc phiên hiện tại, còn RestartDebug khởi động lại phiên đó.

Kết luận

x64dbg-MCP Server kết nối các khả năng gỡ lỗi gốc của x64dbg với các trợ lý AI tương thích MCP mà không yêu cầu runtime bên ngoài. Sau khi cài đặt đúng các plugin x32 và x64, sao chép Bearer token đã tạo và cấu hình một endpoint HTTP hoặc SSE, bạn có thể thực hiện đầy đủ quy trình gỡ lỗi thông qua các yêu cầu bằng ngôn ngữ tự nhiên.

Hãy bắt đầu với địa chỉ liên kết chỉ dành cho máy cục bộ và các tác vụ kiểm tra đơn giản, chỉ đọc. Sau đó chuyển sang thao tác từng bước theo sự kiện, điểm dừng có điều kiện, truy vết, phân tích PE và các sửa đổi bộ nhớ được kiểm soát chặt chẽ. Luôn sử dụng máy chủ trên các mục tiêu được cấp phép và tránh để giao diện HTTP không mã hóa của máy chủ lộ ra các mạng không đáng tin cậy.