Nội dung bài viết
- REA là gì?
- REA hoạt động như thế nào?
- REA có thể phân tích những gì?
- Khi nào nên dùng REA?
- Chuẩn bị trước khi cài REA
- 1. Kiểm tra Node.js và npm
- 2. Chuẩn bị coding agent
- 3. Chọn engine phân tích nếu làm việc với binary native
- Hướng dẫn cài đặt REA chi tiết
- Bước 1: mở terminal trong thư mục làm việc
- Bước 2: chạy trình setup
- Bước 3: khởi động lại và kiểm tra kết nối
- Bước 4: kiểm tra provider native nếu có
- Thực hành đầu tiên: phân tích ứng dụng JavaScript/Electron
- Chạy cùng bài toán bằng CLI
- Cách viết prompt hiệu quả cho REA
- Mẫu prompt điều tra một tính năng
- Mẫu prompt tái hiện tính năng
- Dùng REA với binary native
- Cập nhật, chẩn đoán và gỡ cài đặt
- Cài CLI toàn cục
- Cập nhật
- Chẩn đoán
- Gỡ cài đặt
- Lỗi thường gặp và cách xử lý
- Pháp lý, đạo đức và bảo mật khi reverse engineering
- Câu hỏi thường gặp về REA
- Kết luận
REA (Reverse Engineer Anything) biến coding agent thành một trợ lý phân tích phần mềm: bạn đặt câu hỏi bằng ngôn ngữ tự nhiên, agent dùng REA để quan sát ứng dụng, lần theo mã, đọc binary và trả về kết luận kèm bằng chứng.
Tóm tắt nhanh
- REA là MCP kiêm CLI mã nguồn mở, kết nối coding agent với các công cụ reverse engineering.
- Cài nhanh bằng
npx rea-agents@latest setup; cần Node.js và npm đúng phiên bản. - JavaScript/Electron và .NET có thể phân tích tĩnh; binary native cần thêm Hopper, Ghidra, IDA hoặc Kuna.
- Kết quả tốt nhất đến từ câu hỏi hẹp, yêu cầu bằng chứng và kiểm tra lại giả thuyết.
- Chỉ phân tích phần mềm bạn sở hữu hoặc được cho phép; luôn tuân thủ pháp luật và điều khoản sử dụng.
REA là gì?
REA là viết tắt của Reverse Engineer Anything. Dự án cung cấp một máy chủ MCP (Model Context Protocol) và bộ lệnh CLI để coding agent như Codex, Claude Code, Cursor, Gemini CLI hoặc VS Code có thể gọi các công cụ phân tích phần mềm ngay trong phiên làm việc.
Thay vì tự mở nhiều công cụ, tìm chuỗi, dò hàm, đọc assembly rồi ghép thủ công các mảnh thông tin, bạn có thể giao cho agent một nhiệm vụ cụ thể, chẳng hạn:
Use REA to inspect this Electron app.
Find what happens when I click Export.
Show the relevant files, IPC channel and output path.
Separate confirmed facts from assumptions.
REA không phải một “AI decompiler” hoạt động độc lập. Agent vẫn là bên lập kế hoạch và diễn giải; REA cung cấp công cụ, dữ liệu quan sát và bằng chứng để agent đi từ câu hỏi đến kết luận có thể kiểm tra.
MCP là gì?
MCP là giao thức giúp ứng dụng AI khám phá và gọi công cụ bên ngoài theo cấu trúc thống nhất. Trong trường hợp này, coding agent gọi REA qua MCP để mở mục tiêu, tìm hàm, đọc mã giả, quan sát trình duyệt hoặc phân tích tệp.
REA hoạt động như thế nào?
Quy trình điển hình gồm bốn thành phần:
- Bạn đưa mục tiêu và câu hỏi
Cung cấp đường dẫn ứng dụng, binary, thư mục mã đã giải nén, URL hoặc tệp ghi lại lưu lượng; sau đó nêu điều cần tìm hiểu. - Agent lập kế hoạch điều tra
Agent chọn công cụ phù hợp, bắt đầu từ quan sát rộng rồi thu hẹp vào module, hàm, request hoặc hành vi liên quan. - REA thực hiện phép phân tích
REA gọi bộ phân tích tĩnh, trình decompile, trình duyệt hoặc công cụ capture phù hợp và trả về dữ liệu có nguồn gốc. - Agent giải thích và kiểm chứng
Agent liên kết bằng chứng, nêu giới hạn, có thể viết bản tái hiện và chạy thử để xác nhận giả thuyết.
REA có thể phân tích những gì?
| Loại mục tiêu | REA có thể trả về | Yêu cầu bổ sung |
|---|---|---|
| JavaScript / Electron | Module, import, source map, route, IPC, native add-on và vị trí mã liên quan | Node.js và npm |
| Website | Cấu trúc trang, script, request mạng, ảnh chụp và hành vi khi tương tác | Chrome, Chromium hoặc Edge |
| Binary native | Hàm, chuỗi, symbol, call graph, assembly, pseudocode và reference | Hopper, Ghidra, IDA hoặc Kuna tùy nền tảng |
| .NET assembly | Metadata, CIL instruction, dependency native và so sánh build | Phân tích tĩnh, không bắt buộc engine native |
| Android APK | Manifest, class, method đã decompile và reference | JADX cùng JDK phù hợp |
| HAR, SAZ, PCAP | Request, response, endpoint, protocol và mẫu dữ liệu | Tùy định dạng có thể cần mitmdump hoặc TShark |
| Firmware, WASM, SQLite, model artifact | Inventory, metadata, cấu trúc, symbol hoặc nội dung được chọn | Phụ thuộc từng định dạng và hệ điều hành |
Danh sách trên chỉ là các nhóm phổ biến. REA còn hỗ trợ Go, Rust, IL2CPP, Godot PCK, Flutter, PyInstaller, EVM bytecode, GPU code object, crash dump và nhiều loại artifact khác. Hãy kiểm tra repository chính thức của REA vì khả năng và yêu cầu thay đổi nhanh theo phiên bản.
Khi nào nên dùng REA?
- Tìm hiểu cách một tính năng trong ứng dụng hoạt động khi không có mã nguồn.
- Lần theo luồng Electron từ renderer qua preload, IPC đến main process.
- Phân tích hành vi của binary cũ để bảo trì, tương thích hoặc nghiên cứu.
- Quan sát request của website và xác định đoạn script tạo ra hành vi.
- Kiểm tra giả thuyết bằng cách tái hiện một thuật toán nhỏ trong dự án của bạn.
- Tạo môi trường thử nghiệm agent từ dữ liệu HAR đã ghi lại.
REA không thay thế mọi công cụ chuyên dụng. Ví dụ, nếu mục tiêu là crawl toàn bộ website để phát hiện lỗi SEO, một crawler chuyên dụng vẫn phù hợp hơn; bạn có thể tham khảo bài Screaming Frog là gì và cách sử dụng. REA phát huy thế mạnh khi cần điều tra sâu một hành vi, mối liên hệ mã hoặc cơ chế nội bộ.
Ưu điểm
- Điều khiển bằng câu hỏi tự nhiên ngay trong coding agent.
- Kết hợp nhiều lớp phân tích trong một quy trình.
- Chạy phân tích trên máy cục bộ và nhấn mạnh bằng chứng.
- Có MCP cho agent và CLI cho terminal/automation.
- Mã nguồn phát hành theo giấy phép MIT.
Hạn chế
- Binary native sâu vẫn cần engine như Ghidra, Hopper hoặc IDA.
- Kết quả phụ thuộc chất lượng câu hỏi và phạm vi điều tra.
- Mã đã obfuscate, packed hoặc có anti-debug có thể khó phân tích.
- Khả năng hỗ trợ khác nhau theo hệ điều hành và kiến trúc.
- Kết luận của agent vẫn cần người dùng kiểm tra.
Chuẩn bị trước khi cài REA
1. Kiểm tra Node.js và npm
Theo tài liệu chính thức tại thời điểm bài viết được cập nhật, REA yêu cầu một trong các nhánh Node.js sau:
- Node.js 22 từ phiên bản 22.23.4 trở lên;
- Node.js 24 từ phiên bản 24.22.1 trở lên;
- Node.js 26 từ phiên bản 26.12.1 trở lên.
Kiểm tra phiên bản:
node -v
npm -v
Nếu phiên bản Node.js quá cũ, nên cài Node.js 24 LTS theo hướng dẫn chính thức của Node.js hoặc dùng trình quản lý phiên bản như fnm. Trên Linux, gói nodejs mặc định của một số bản phân phối có thể chưa đạt phiên bản tối thiểu.
2. Chuẩn bị coding agent
REA có thể kết nối với nhiều client hỗ trợ MCP, trong đó có Codex, Claude Code, Claude Desktop, Cursor, Gemini CLI, Windsurf, VS Code, OpenCode và một số agent khác. Bạn cần cài và đăng nhập agent trước khi chạy setup.
3. Chọn engine phân tích nếu làm việc với binary native
Nếu chỉ phân tích JavaScript/Electron hoặc .NET tĩnh, bạn chưa cần cài engine native. Với file thực thi và thư viện native, hãy chọn một provider:
- Ghidra: miễn phí, đa nền tảng; tài liệu REA hiện hướng dẫn Ghidra 12.1.x và JDK 21 trở lên.
- Hopper: hỗ trợ macOS và một số bản Linux; có bản demo với giới hạn do nhà cung cấp quy định.
- IDA: dùng installation hiện có và cấu hình MCP/bridge theo hướng dẫn.
- Kuna: lựa chọn decompiler khác cho những workflow được hỗ trợ.
Mẹo cho người mới
Hãy cài REA trước, bỏ qua Hopper ở lần setup đầu và thử bài tập JavaScript/Electron. Khi quy trình cơ bản đã chạy ổn, mới thêm Ghidra hoặc provider native để giảm số biến cần xử lý khi gặp lỗi.
Hướng dẫn cài đặt REA chi tiết
Bước 1: mở terminal trong thư mục làm việc
Tạo một thư mục riêng để thử nghiệm:
mkdir rea-work
cd rea-work
Trên Windows, dùng PowerShell. Trên macOS dùng Terminal. Trên Linux có thể dùng terminal mặc định của môi trường desktop.
Bước 2: chạy trình setup
npx rea-agents@latest setup
Trình cài đặt sẽ:
- Phát hiện các client
REA hiển thị danh sách agent có thể cấu hình. - Cho bạn chọn phạm vi
Dùng phím mũi tên để di chuyển, Space để chọn và Enter để tiếp tục. - Hiển thị kế hoạch thay đổi
Bạn được xem đường dẫn cấu hình, MCP registration, skill và provider liên quan trước khi ghi. - Yêu cầu xác nhận
REA chỉ áp dụng sau khi bạn duyệt kế hoạch; cấu hình hiện có được sao lưu và các mục không liên quan được giữ lại. - Yêu cầu khởi động lại agent
Thoát hoàn toàn client rồi mở lại để MCP mới được nạp.
Nếu chỉ muốn cấu hình cho Codex:
npx rea-agents@latest setup --client codex
Với Claude Code, thay codex bằng claude_code. Các ID phổ biến khác gồm cursor, gemini_cli, windsurf, vscode và opencode.
Lưu ý trên Windows
Nếu PowerShell báo không cho chạy script khi dùng npx, hãy thử npx.cmd rea-agents@latest setup. Nếu dùng WSL, nên cài Node.js và REA bên trong WSL rồi dùng đường dẫn Linux nhất quán.
Bước 3: khởi động lại và kiểm tra kết nối
Với Codex hoặc agent chạy trong terminal, hãy thoát phiên rồi khởi động lại. Với ứng dụng desktop, cần quit hoàn toàn thay vì chỉ đóng cửa sổ.
Kiểm tra riêng kết nối Codex:
npx -y rea-agents@latest doctor --client codex --json
Nếu mọi thứ đúng, báo cáo sẽ có "healthy": true. Bạn cũng có thể hỏi trực tiếp agent:
Check that REA is connected.
Show me which REA tools are available and which providers are ready.
Bước 4: kiểm tra provider native nếu có
Ví dụ với Ghidra:
npx -y rea-agents@latest doctor --provider ghidra --json
Nếu report báo thiếu Java, sai GHIDRA_INSTALL_DIR hoặc provider chưa sẵn sàng, hãy sửa đúng lỗi được nêu rồi chạy lại setup để lưu cấu hình provider vào client.
Thực hành đầu tiên: phân tích ứng dụng JavaScript/Electron
Đây là đường đi dễ nhất vì phân tích tĩnh JavaScript không cần Ghidra hay Hopper. Bạn có thể tải ứng dụng Notes mẫu từ trang hướng dẫn của REA, giải nén vào thư mục example, rồi giao cho agent:
Use REA to inspect the app in /absolute/path/to/example.
Find what happens when I click Export notes.
Show where notes.csv is written, which fields it contains,
and the relevant files and lines.
Do not run the app unless necessary.
Ở bài mẫu chính thức, agent cần lần theo nút Export qua renderer, preload, IPC rồi đến phần ghi file ở main process. Một câu trả lời tốt phải nêu rõ:
- Sự kiện hoặc hàm bắt đầu luồng xử lý.
- Tên API được expose qua preload.
- IPC channel hoặc lời gọi trung gian.
- Hàm định dạng dữ liệu và đường dẫn file đầu ra.
- File, dòng hoặc bằng chứng mà kết luận dựa vào.
- Điểm nào đã xác nhận và điểm nào còn là giả thuyết.
Chạy cùng bài toán bằng CLI
Nếu muốn nhận dữ liệu JSON để lưu hoặc đưa vào script:
npx -y rea-agents@latest analyze-javascript-application "/absolute/path/to/app" --json
Đường dẫn có khoảng trắng phải đặt trong dấu ngoặc kép. Với ứng dụng Electron đã đóng gói, mục tiêu có thể là thư mục đã giải nén hoặc file app.asar.
Cách viết prompt hiệu quả cho REA
Prompt “phân tích ứng dụng này” quá rộng, dễ tốn thời gian và tạo ra báo cáo lan man. Một prompt tốt nên có bốn phần: mục tiêu, câu hỏi, phạm vi và tiêu chuẩn bằng chứng.
Mẫu prompt điều tra một tính năng
Use REA to inspect [target path or URL].
Question:
How does [one specific feature] work?
Scope:
Start from [button, request, function or string].
Follow only the code path relevant to this feature.
Do not modify the target.
Evidence:
Cite files, functions, addresses or captured requests.
Separate confirmed facts, inferences and unknowns.
Suggest one verification step for each important inference.
Mẫu prompt tái hiện tính năng
Use REA to understand how [feature] works in [target].
Show the evidence and limitations first.
Then implement a clean-room version in my project
without copying proprietary code or assets.
Add tests that verify the observed behavior.
Nguyên tắc “hẹp trước, rộng sau”
Bắt đầu từ một thao tác, một chuỗi hiển thị, một request hoặc một hàm. Khi đã có điểm neo đáng tin cậy, mới mở rộng sang caller, callee, dữ liệu và các nhánh liên quan.
Dùng REA với binary native
Sau khi provider native đã sẵn sàng, hãy cung cấp đường dẫn tuyệt đối của binary và câu hỏi cụ thể. Ví dụ:
Use REA with Ghidra to inspect /absolute/path/to/program.
Find the function that validates the configuration file.
Show the strings, callers, pseudocode and key branches.
Do not patch or execute the binary.
Explain any uncertainty caused by compiler optimization.
Bạn cũng có thể gọi nhanh một hàm từ terminal:
npx -y rea-agents@latest function "/absolute/path/to/program" main --provider ghidra --json
Thay main bằng tên hàm hoặc địa chỉ đã tìm thấy. Pseudocode không phải mã nguồn gốc: tên biến có thể mất, kiểu dữ liệu có thể suy đoán sai và compiler optimization có thể làm biến dạng luồng điều khiển. Vì vậy nên đối chiếu pseudocode với assembly, caller, hằng số và hành vi chạy thật khi được phép.
Cập nhật, chẩn đoán và gỡ cài đặt
Cài CLI toàn cục
Nếu dùng REA thường xuyên:
npm install --global rea-agents
rea --help
Cập nhật
rea update
Nếu dùng qua npx, chạy lại setup với bản mới nhất, xem kế hoạch thay đổi và khởi động lại agent:
npx rea-agents@latest setup
Chẩn đoán
rea doctor --json
rea doctor --client codex --json
rea doctor --provider ghidra --json
rea doctor --skill --json
doctor là phép kiểm tra chỉ đọc. Hãy chọn đúng phạm vi để tránh bị nhiễu bởi một provider không dùng đến.
Gỡ cài đặt
rea uninstall
rea uninstall --purge-data
Lệnh thường gỡ các registration và skill do REA quản lý. Tùy chọn --purge-data xóa thêm cache và state thuộc REA, vì vậy cần đọc kỹ kế hoạch trước khi xác nhận.
Lỗi thường gặp và cách xử lý
Agent không thấy công cụ REA sau khi cài?
Hãy quit hoàn toàn client rồi mở lại. Chạy doctor --client đúng ID của client. Với editor, kiểm tra REA đã được bật trong phần MCP và công cụ được cho phép trong agent chat.
Lệnh npx không chạy trên PowerShell?
Dùng npx.cmd và npm.cmd. Nếu Node.js vừa được cài, đóng PowerShell rồi mở lại để PATH được cập nhật.
Linux báo thiếu hoặc không tương thích lệnh ps?
Một số workflow cần ps tương thích procps để kiểm tra quyền sở hữu process. Trên Debian/Ubuntu, cài gói procps; các bản phân phối khác dùng gói procps-ng hoặc tên tương ứng.
Ghidra không sẵn sàng?
Kiểm tra JDK 64-bit, java, javac, biến JAVA_HOME và GHIDRA_INSTALL_DIR. Sau đó chạy doctor --provider ghidra để nhận nguyên nhân cụ thể.
Phân tích quá chậm hoặc kết quả quá rộng?
Thu hẹp câu hỏi vào một feature, function, string, request hoặc thao tác người dùng. Yêu cầu agent dừng sau mỗi mốc bằng chứng thay vì lập inventory toàn bộ ứng dụng.
REA có tải ứng dụng của tôi lên máy chủ không?
REA thực hiện phân tích mục tiêu trên máy cục bộ. Tuy nhiên, kết quả công cụ được gửi cho coding agent và nhà cung cấp model có chính sách dữ liệu riêng. Không đưa bí mật, dữ liệu cá nhân hoặc mã nhạy cảm vào phiên làm việc nếu chính sách của tổ chức không cho phép.
Pháp lý, đạo đức và bảo mật khi reverse engineering
Chỉ phân tích khi có quyền
Reverse engineering có thể bị giới hạn bởi luật, giấy phép phần mềm, NDA, điều khoản dịch vụ hoặc cơ chế bảo vệ kỹ thuật. Chỉ phân tích phần mềm do bạn sở hữu, mã nguồn mở, mẫu thử được cấp phép hoặc mục tiêu mà bạn đã có văn bản cho phép.
- Không dùng REA để vượt kiểm soát truy cập, bẻ khóa bản quyền hoặc đánh cắp dữ liệu.
- Làm việc trên bản sao và ghi lại hash của tệp gốc khi cần tính toàn vẹn.
- Ưu tiên phân tích tĩnh; chỉ chạy mục tiêu trong sandbox khi đã đánh giá rủi ro.
- Không tải bí mật thương mại, token, thông tin khách hàng hoặc dữ liệu cá nhân vào model ngoài chính sách cho phép.
- Khi tái hiện tính năng, dùng clean-room implementation và không sao chép mã hoặc tài sản độc quyền.
- Ghi rõ bằng chứng, suy luận, giới hạn và phiên bản công cụ để người khác có thể kiểm tra.
Câu hỏi thường gặp về REA
REA có miễn phí không?
Mã nguồn REA được công bố theo giấy phép MIT. Tuy nhiên, một số provider hoặc coding agent có giấy phép, gói dịch vụ hay chi phí riêng; ví dụ Hopper và IDA có điều kiện sử dụng của nhà cung cấp.
Có bắt buộc cài Ghidra không?
Không. JavaScript/Electron và một số workflow tĩnh hoạt động chỉ với Node.js/npm. Ghidra, Hopper, IDA hoặc Kuna chỉ cần khi loại mục tiêu và phép phân tích yêu cầu engine native.
REA có tự sửa hoặc patch ứng dụng không?
REA chủ yếu cung cấp công cụ quan sát và phân tích. Agent có thể đề xuất hoặc viết mã trong dự án của bạn nếu được yêu cầu, nhưng bạn nên ghi rõ phạm vi, yêu cầu không sửa mục tiêu và duyệt mọi thay đổi có tác động.
REA có thay thế chuyên gia reverse engineering không?
Không hoàn toàn. REA giúp tự động hóa việc tìm kiếm, liên kết bằng chứng và giải thích, nhưng chuyên gia vẫn cần đánh giá pseudocode, compiler artifact, anti-analysis, điều kiện pháp lý và độ tin cậy của kết luận.
Kết luận
REA đưa reverse engineering đến gần workflow của lập trình viên hơn: câu hỏi, công cụ phân tích, bằng chứng và mã thử nghiệm nằm trong cùng một cuộc hội thoại với coding agent. Để bắt đầu an toàn, hãy cài REA bằng npx rea-agents@latest setup, chạy doctor, thử một ứng dụng JavaScript nhỏ và luôn yêu cầu agent tách biệt dữ kiện đã xác nhận với suy luận.
Nguồn tham khảo chính thức: hướng dẫn cài đặt REA, các bài thực hành, tài liệu installation và mã nguồn trên GitHub.