REA · REVERSE ENGINEER ANYTHING
Rea: Mở hộp đen.
Thấy điều
bên trong.
Phần mềm có nhiều chuyện để kể.
Rea giúp AI tìm được những dấu vết ấy.
Từ một ô tìm kiếm quen thuộc đến những dòng mã đã biên dịch. Cùng mở từng lớp, nối bằng chứng và hiểu một ứng dụng thực sự hoạt động thế nào.
Minh họa của ts4m · không phải giao diện Rea
“Ủa, cái này
làm kiểu gì ta?”
Rea là bộ công cụ reverse engineering dành cho AI agent, có thể dùng qua MCP hoặc dòng lệnh. Nó nối trợ lý của bạn với những công cụ kiểm tra ứng dụng, mã nhị phân và hành vi lúc chạy.
Bạn đưa ra câu hỏi. Rea cung cấp dấu vết từ mục tiêu phân tích. Agent dùng chúng để giải thích, hỏi tiếp hoặc viết một cách triển khai cho dự án của bạn. Điểm đáng quan tâm là đường đi từ câu trả lời quay về file, hàm hay quan sát đã tạo nên nó. [1]
MCP là giao thức để agent gọi công cụ bên ngoài. Reverse engineering là tìm hiểu cách một hệ thống hoạt động từ những gì đang có: file ứng dụng, binary, cấu trúc hoặc hành vi quan sát được.
Rea không biến mọi file thành mã nguồn gốc nguyên vẹn. Pseudocode, quan hệ module và bằng chứng là đầu vào để bạn tiếp tục hiểu, dựng lại và kiểm thử.
Một giao diện.
Ba lớp để hiểu.
Chạm vào từng lớp để theo dấu một chức năng tìm kiếm.
Bạn gõ “Cơm” và thấy “Cơm nhà”. Đó là một hành vi có thể quan sát. Chỉ nhìn giao diện, ta chưa biết ứng dụng lọc tại máy, gọi máy chủ hay dùng một chỉ mục riêng.
Trong mẫu của ts4m, app.js nghe sự kiện input, gọi filterNotes() từ search.js, rồi cập nhật danh sách. Hàm lọc đọc tiêu đề, chuyển về chữ thường và dùng includes().
Quan hệ import giúp tìm đúng file để đọc tiếp. Nó chưa tự chứng minh mọi hành vi. Với mẫu này, “com” chưa khớp “Cơm”: muốn bỏ dấu phải sửa thuật toán và thử lại bằng dữ liệu cụ thể.
Sơ đồ giải thích mẫu ghi chú do ts4m viết. Nút bấm đổi lớp minh họa; không chạy Rea và không gửi dữ liệu của bạn đi đâu.
Không chỉ
một loại phần mềm.
Đầu vào khác nhau cần công cụ khác nhau. Đây là những nhóm đáng biết trước khi cài cả một bộ phân tích.
JavaScript & Electron
Đọc thư mục ứng dụng đã giải nén hoặc ASAR, dựng quan hệ module, imports và ranh giới Electron. Phân tích tĩnh không cần Hopper hay Ghidra.
Thư mục / .asar Nguồn ↗Mã máy native
Khám phá strings, symbols, assembly, hàm, tham chiếu và pseudocode. Phân tích sâu dùng một provider như Hopper, Ghidra hoặc IDA phù hợp với mục tiêu.
Khả năng tùy provider Nguồn ↗Assembly .NET
Kiểm tra metadata, kiểu, thành viên và CIL mà không nạp/chạy assembly. NativeAOT, single-file hay IL2CPP cần xem giới hạn riêng; đuôi .dll chưa đủ để quyết định.
Không cần engine native Nguồn ↗Web & runtime
Các luồng quan sát website, trình duyệt hoặc tiến trình giúp bổ sung điều thực sự diễn ra lúc chạy. Chúng có điều kiện riêng và có thể khởi chạy hoặc tương tác với mục tiêu.
Cần đọc đúng guide Nguồn ↗Repo còn có hướng dẫn cho Android, firmware, WebAssembly, packet capture và nhiều loại artifact. Danh sách hỗ trợ, hệ điều hành và công cụ phụ thuộc thay đổi theo phiên bản; xem thư viện tài liệu chính thức ↗.
Cài một công cụ.
Mở nhiều góc nhìn.
Trong hướng dẫn này, “triển khai” là chạy Rea trên máy có file cần phân tích và kết nối với agent. Luồng MCP bên dưới dùng stdio cục bộ, không cần website hay mở cổng HTTP công khai.
Không gồm Node 23, 25 hay bản prerelease.
ps tương thích procps.Provider native có yêu cầu riêng.
Đầu tiên, kiểm tra máy.
Mở terminal, kiểm tra hai phiên bản. Nếu Node cũ hơn mức hỗ trợ, cập nhật trước khi chạy Rea. Trên Linux tối giản, bổ sung procps nếu thiếu; cả phân tích JavaScript tĩnh cũng dùng cơ chế giám sát tiến trình này. [2]
node --version
npm --versionMáy Debian / Ubuntu chưa có procps?
Chỉ chạy khi cần bổ sung gói hệ thống; các bản Linux khác dùng trình quản lý gói tương ứng.
sudo apt-get update
sudo apt-get install procpsĐọc một ô tìm kiếm.
Hiểu cả đường đi.
Một mẫu rất nhỏ, do ts4m viết riêng cho bài này. Không dependency, không cần binary thương mại, đủ để bắt đầu lần theo module.
1. Giải nén, rồi phân tích tĩnh.
Giữ thư mục rea-notes-demo sau khi giải nén. Mở terminal ở thư mục cha của nó, chạy lệnh dưới đây. Kết quả được lưu vào notes-evidence.json. Không cần mở giao diện mẫu để phân tích.
npx rea-agents@6.5.0 analyze-javascript-application ./rea-notes-demo --json > notes-evidence.json2. Đọc bản tóm tắt trước.
Với ứng dụng lớn, Evidence có thể rất dài. Tài liệu hướng dẫn lưu kết quả rồi tạo một view tóm tắt. Đoạn dưới dùng jq trong Bash/zsh; cài jq trước nếu máy chưa có. [3]
jq -c '{source: {kind: "inline", evidence: .}, view: {kind: "summary"}}' notes-evidence.json > notes-view.json
npx rea-agents@6.5.0 inspect-analysis-view notes-view.json3. Đưa agent một câu hỏi đủ cụ thể.
Khi MCP đã kết nối, dùng prompt này và chỉ rõ đường dẫn thật đến thư mục trên máy bạn.
Phân tích thư mục rea-notes-demo tôi vừa giải nén.
Hãy lần theo cách ô tìm kiếm lọc danh sách ghi chú.
Chỉ ra file, hàm và quan hệ import làm bằng chứng.
Phân biệt điều đọc được trực tiếp với điều đang suy luận.
Chưa chạy ứng dụng; hãy liệt kê phần cần kiểm thử trước.
Sau đó đề xuất cách thêm tìm kiếm không phân biệt dấu tiếng Việt.Đã chạy phân tích JavaScript tĩnh và lệnh inspect-analysis-view trên chính mẫu tải về, với Rea 6.5.0, Node 24.11.0 và Linux x64. Hai lệnh hoàn tất thành công; kết quả giữ quan hệ import của ứng dụng. Đây là kiểm thử một mẫu nhỏ, chưa phải benchmark. Chưa kiểm thử provider native, build Rea từ nguồn, Windows hoặc phiên agent qua MCP.
Hãy yêu cầu “chỉ ra bằng chứng ở đâu” trước khi yêu cầu “viết lại tính năng”. Một câu trả lời hay cần có chỗ để kiểm tra lại.
Chào,
mã máy.
Phân tích native cần một engine phù hợp. Với Ghidra, Rea dùng bản cài có sẵn trên máy; setup không tự cài Ghidra, Java hay Python.
Chuẩn bị Ghidra và JDK.
Tài liệu tại thời điểm đối chiếu nhận Ghidra 12.1.x và JDK 64-bit theo yêu cầu của bản cài; bridge được xác minh upstream với Ghidra 12.1.4 + JDK 21. Kiến trúc JDK và native decompiler phải phù hợp với máy. [2]
Sau khi tự cài hai công cụ, thay đường dẫn mẫu bên dưới bằng đường dẫn tuyệt đối. program là file native bạn muốn phân tích.
export GHIDRA_INSTALL_DIR="/absolute/path/to/ghidra_12.1.4_PUBLIC"
export JAVA_HOME="/absolute/path/to/jdk-21"
npx rea-agents@6.5.0 doctor --provider ghidra --json
npx rea-agents@6.5.0 analyze /absolute/path/to/program --provider ghidra --jsonLinux/macOS và Windows có khác biệt. Hỗ trợ Ghidra trên Windows x64 được tài liệu đánh dấu thử nghiệm P0, có giới hạn về định dạng và thao tác. Đây là hướng dẫn theo tài liệu; ts4m chưa kiểm thử native provider trong bài này.
Phân tích lần đầu chậm hoặc bị timeout?
Ghidra cần import và auto-analysis trước khi trả kết quả phân tích. Tài liệu nêu deadline khởi động mặc định 330.000 ms; có thể đặt REA_GHIDRA_STARTUP_TIMEOUT_MS phù hợp cho binary lớn. Agent cũng có deadline riêng, nên tăng thời gian của provider chưa chắc giải quyết timeout phía client. Đọc hướng dẫn khôi phục, tránh khởi chạy chồng nhiều phiên phân tích.
Tự dựng Rea
từ mã nguồn.
Chọn lối này khi muốn đọc, sửa hoặc đóng góp mã. Để dùng công cụ, bản npm phía trên thường ít bước hơn.
Ghim cả mã lẫn toolchain.
Lệnh này checkout đúng commit tham khảo. nvm install đọc .nvmrc trong repo; snapshot dùng Node 24.18.0 và npm 11.16.0, khác với mức runtime tối thiểu của gói npm.
npm ci cài dependency theo lockfile. check:fast kiểm tra nhanh, còn build:cached biên dịch runtime và đóng gói workflow. [7]
Trên Windows, source checkout không tự có native addon như gói npm phát hành; các workflow cần native controls đòi hỏi bước build riêng. Xem hướng dẫn Windows của repo trước khi chọn cách này.
git clone https://github.com/morluto/rea.git
cd rea
git checkout d69acc3455c33f90a2fc4381db43d38b6af50622
nvm install
nvm use
npm install --global npm@11.16.0
npm ci
npm run check:fast
npm run build:cached
node scripts/rea.mjs --helpCàng hiểu công cụ,
càng dùng đúng chỗ.
Local không có nghĩa mọi thứ đều offline.
Rea phân tích mục tiêu cục bộ. Khi dùng agent, kết quả công cụ đi vào ngữ cảnh của agent và chịu chính sách dữ liệu của nhà cung cấp model. Cân nhắc file và thông tin bạn đưa vào phiên làm việc. [1]
Quan sát khác với suy luận.
Module được tìm thấy, một nhánh được giải mã hay một lần chạy được ghi lại chỉ chứng minh phần tương ứng. Kết quả thiếu dữ liệu, code bị làm rối hoặc đường chạy chưa đi qua vẫn cần được ghi nhận.
Chọn tĩnh hay runtime có chủ đích.
Phân tích JavaScript và .NET tĩnh đọc file. Các luồng runtime có thể chạy hoặc tương tác với mục tiêu bằng quyền người dùng. Chọn tác vụ phù hợp và đọc điều kiện của đúng guide. [1]
MIT áp dụng cho phần mã Rea.
Các dependency giữ giấy phép riêng. Hopper, IDA và công cụ thương mại cần quyền sử dụng riêng; cài Rea không bao gồm bản quyền các công cụ đó. Dùng với phần mềm bạn sở hữu hoặc được phép phân tích. [8]
Trước khi
đóng terminal.
Doctor báo chưa healthy, có phải mọi thứ đều hỏng?
Không nhất thiết. Doctor không giới hạn phạm vi sẽ kiểm tra cả các engine tùy chọn, nên trạng thái tổng thể có thể chưa healthy dù tác vụ JavaScript của bạn chạy được. Kiểm tra đúng client hoặc provider cần dùng.
npx rea-agents@6.5.0 doctor --client codex --json
npx rea-agents@6.5.0 doctor --skill --jsonVí dụ trên kiểm tra client codex; thay bằng client ID tương ứng nếu dùng ứng dụng khác. Đối với JavaScript tĩnh, chạy trực tiếp mẫu là kiểm tra sát tác vụ hơn.
Cài rồi mà agent chưa thấy Rea?
Khởi động lại đúng agent, kiểm tra setup đã ghi vào đúng cấu hình và runtime Node mà ứng dụng dùng có đủ phiên bản hay không. Chỉ cài workflow/skill chưa đủ để có MCP server. Chạy doctor cho đúng client và làm theo lỗi cụ thể.
Cập nhật Rea như thế nào?
Nếu dùng npx, chạy setup mới rồi xem lại thay đổi và khởi động lại agent. Cấu hình MCP cũ không tự đổi phiên bản chỉ vì bạn đã đọc bài hướng dẫn mới.
npx rea-agents@latest setupNếu cài global bằng npm/Bun, tài liệu có rea update để cập nhật bản global sở hữu CLI, sau đó làm theo lệnh refresh setup được in ra. Source checkout cập nhật qua Git và quy trình build tương ứng.
Có cần đưa Rea lên VPS không?
Không cần cho cách bắt đầu trong bài. CLI và MCP stdio chạy trên máy có file cần kiểm tra. Nếu dùng máy Linux từ xa, agent, môi trường Node và đường dẫn file phải được cấu hình phù hợp trên máy đó; đây không phải một dashboard web cần trỏ tên miền.
Rea có viết lại được toàn bộ ứng dụng không?
Không nên xem đó là cam kết. Rea cung cấp công cụ và bằng chứng; agent có thể dùng chúng để xây dựng một phiên bản chức năng. Bạn vẫn phải xác định phạm vi, xử lý phần chưa rõ và kiểm thử kết quả. Mã decompile không đồng nghĩa mã nguồn nguyên bản.
Giữ một đường
về bằng chứng.
Bài tham khảo snapshot d69acc3 và gói npm 6.5.0 ngày 15.10.2026. Repo phát triển nhanh; nhánh main và bản phát hành có thể khác nhau. Kiểm tra release đang dùng trước khi áp dụng tính năng mới.
- Rea — tổng quan và phạm vi hỗ trợ
- Cài đặt, Node.js, setup, MCP và Ghidra
- CLI, Evidence và cách rút gọn kết quả
- Luồng phân tích ứng dụng JavaScript
- Phân tích .NET và các dạng triển khai
- Quan sát trình duyệt và điều kiện sử dụng
- Dựng từ mã nguồn và toolchain phát triển
- Giấy phép MIT của Rea
- Gói chính thức rea-agents 6.5.0 trên npm
Đừng dừng ở
“trông hay đấy”.
Thử hỏi thêm một câu: “Nó hoạt động thế nào?”