03 / AI REPO RADAR
morluto/rea
373.627 sao+68.203 / 7 ngàyLicense: MITPush gần nhất: Lên radar:
Một MCP server kèm CLI để agent phân tích ngược ứng dụng: binary gốc, Electron/JavaScript, .NET, APK và website, trả về kết luận kèm bằng chứng và giới hạn.
REA là gì và nhắm tới ai
REA, viết tắt của Reverse Engineer Anything, là một MCP server kèm giao diện dòng lệnh dành cho việc phân tích ngược phần mềm. README mô tả nó là một MCP duy nhất cho phân tích ngược trên binary, ứng dụng và hành vi lúc chạy. Lời hứa chính nằm ở dòng nói rằng khi bạn thấy một tính năng mình thích, bạn có thể hiểu nó hoạt động ra sao, xuống tới mức binary.
Kịch bản được README đưa ra rất cụ thể: bạn thấy một tính năng trong một ứng dụng và muốn có nó trong sản phẩm của mình. Bạn nhờ agent điều tra tính năng đó bằng REA. Agent có thể kiểm tra ứng dụng mà không cần mã nguồn, giải thích tính năng hoạt động thế nào, đưa ra bằng chứng, rồi xây một phiên bản cho dự án của bạn.
REA nối agent của bạn với các công cụ kiểm tra binary gốc, ứng dụng JavaScript và Electron, assembly .NET và website. Bạn cũng có thể dùng cùng các công cụ này từ terminal. README khẳng định việc phân tích chạy cục bộ và kết quả luôn kèm bằng chứng cùng các giới hạn đứng sau mỗi kết luận. Đây là mô tả của tác giả; điều quan trọng với người dùng là công cụ được thiết kế để trình bày cả phần chưa chắc chắn.
Cách hoạt động
Cơ chế được README tóm tắt ngắn gọn. Agent của bạn gọi REA qua MCP để kiểm tra mục tiêu và lần theo đoạn mã liên quan. REA trả về các phát hiện cùng bằng chứng. Agent dùng chúng để hỏi tiếp, giải thích hành vi, hoặc viết và kiểm thử một bản cài đặt. Các lệnh trong CLI đi qua cùng những quy trình làm việc này.
Phần cài đặt đăng ký REA với agent và cài kèm các chỉ dẫn quy trình tương ứng. Với phân tích binary gốc, REA dùng được bản cài sẵn của Hopper, Ghidra hoặc IDA; quá trình cài đặt có thể tùy chọn cài Hopper nếu bạn đồng ý. Phân tích JavaScript tĩnh thì không cần bộ máy phân tích gốc nào. Điều này cho thấy REA đóng vai trò lớp điều phối, còn phần giải mã sâu dựa vào các công cụ chuyên dụng sẵn có.
README còn lưu ý về lược đồ đầu vào của MCP: mặc định REA dùng lược đồ gọn để giảm tải ngữ cảnh. Khi cần đầy đủ hướng dẫn trường và chi tiết kiểm tra lồng nhau, bạn đặt biến môi trường REA_MCP_INPUT_SCHEMA_PROFILE bằng full trong phần đăng ký MCP. Cả hai chế độ đều giữ đủ bộ công cụ và việc kiểm tra chuẩn phía máy chủ.
Những gì REA có thể phân tích
Bảng đối tượng trong README rất rộng. Với binary gốc, REA trả về pseudocode, assembly, chuỗi, ký hiệu, lời gọi và tham chiếu, dựa trên Hopper, Ghidra hoặc IDA. Với JavaScript và Electron, nó trả về module, import, source map, route, IPC và quan hệ với add-on gốc. Với website, nó trả về cấu trúc trang, script, quan sát mạng và ảnh chụp màn hình theo yêu cầu, và cần một trình duyệt họ Chrome. Với assembly .NET, nó trả về metadata, lệnh CIL, phụ thuộc gốc đã khai báo và so sánh giữa các bản dựng, hoàn toàn tĩnh.
Danh sách còn dài hơn thế. Có APK Android với manifest, lớp, phương thức đã giải mã và tham chiếu, cần JADX chạy không giao diện và một JDK đầy đủ. Có chữ ký APK, thiết bị Android qua adb, tài nguyên Android qua Apktool, ứng dụng Flutter, firmware qua Binwalk hoặc Unblob, gói tin đã ghi qua TShark, và tín hiệu logic đã ghi qua sigrok-cli. Có cả những định dạng ít gặp như metadata IL2CPP của Unity, kho PCK của Godot, bytecode Erlang BEAM, bytecode EVM, WASM, cơ sở dữ liệu SQLite, tệp PyInstaller, metadata của mô hình GGUF và safetensors, mục tiêu GPU CUDA và HIP, cũng như binary Go và Rust.
Mỗi đối tượng có yêu cầu riêng và README ghi rõ chúng trong cột yêu cầu. Nhiều mục là phân tích tĩnh thuần túy, không chạy ứng dụng. README nói rõ phân tích JavaScript và .NET tĩnh chỉ đọc các tệp được cung cấp. Ngược lại, việc ghi nhận lúc chạy sẽ chạy hoặc tương tác với mục tiêu đã chọn bằng quyền của người dùng, và mỗi hướng dẫn runtime mô tả tác động của nó. Đây là khác biệt an toàn cần nắm trước khi cho agent chạy một chương trình lạ.
Cài đặt và dùng thử
Theo README, REA cần Node.js phiên bản 22, 24 hoặc 26 với số bản tối thiểu được nêu cụ thể, cùng npm. Bạn chạy lệnh thiết lập qua npx với tên gói rea-agents, chọn agent, xem lại các thay đổi đề xuất và đồng ý. Quá trình này thêm máy chủ MCP của REA cùng các chỉ dẫn quy trình tương ứng, có sao lưu cấu hình hiện có, rồi bạn khởi động lại agent. README liệt kê Claude Code, Codex, Cursor, Gemini CLI, Grok Build và các agent khác trong số được hỗ trợ.
README có một cảnh báo đáng đọc: hãy lấy REA từ kho morluto/rea, từ trang web chính thức hoặc từ gói npm rea-agents, và theo các liên kết cài đặt và phát hành từ những nguồn chính thức đó. Một kho có tên giống hoặc một README sao chép không chứng minh bản tải về là chính thức. Với một công cụ có quyền phân tích và chạy mục tiêu trên máy, lời nhắc này nên được xem nghiêm túc.
Trên Linux, README nêu thêm một điều kiện: Ghidra, JADX, các lần khởi chạy công cụ firmware và phân tích tĩnh JavaScript hoặc Electron cần một lệnh ps tương thích procps nằm trong PATH của REA để kiểm tra quyền sở hữu tiến trình. Các bước khắc phục nằm trong tài liệu cài đặt.
Sau khi đăng ký, bạn hỏi agent bằng ngôn ngữ tự nhiên, thay tên ứng dụng mục tiêu và tính năng muốn hiểu. Từ terminal, README cho ví dụ kiểm tra một thư mục ứng dụng JavaScript hoặc Electron đã giải nén hoặc một tệp ASAR, với kết quả gồm module, import, ranh giới Electron và bằng chứng. Với phân tích binary gốc từ CLI, bạn cần cấu hình một nhà cung cấp trước; lệnh cụ thể nằm trong hướng dẫn CLI và Evidence, không có trong phần nguồn mà bài này dựa vào.
Cập nhật và bảo trì
README nhấn mạnh REA thay đổi nhanh và các bản phát hành mới thường kèm nhiều sửa lỗi, vì vậy bạn nên giữ bản cài luôn mới. Với CLI cài bằng npm toàn cục hoặc bằng bun toàn cục, có một lệnh cập nhật và cờ rea --update là bí danh cho quy trình đã được xác minh này, chấp nhận cùng các cờ đầu ra toàn cục.
Một vài chi tiết kỹ thuật được nêu: các lệnh cập nhật giữ lại tối đa 4 MiB đầu ra tiêu chuẩn và lỗi gộp lại, siêu dữ liệu quá lớn bị từ chối sau khi lệnh kết thúc, và đầu ra tiến trình tôn trọng áp lực ghi của terminal. Cập nhật toàn cục bằng Bun cần Bun phiên bản 1.2.17 trở lên; với bản cũ hơn bạn phải nâng cấp Bun thủ công trước.
Sau khi cập nhật, bạn chạy lại lệnh thiết lập mà bản cập nhật in ra để làm mới đăng ký agent và skill. Nếu dùng npx, bạn cập nhật phần thiết lập agent bằng bản mới nhất của gói. Khi gặp lỗi, README khuyên cập nhật trước vì lỗi có thể đã được sửa; nếu vẫn còn, hãy mở issue kèm phiên bản REA, loại mục tiêu, các bước tái hiện và đầu ra lỗi.
Các ví dụ minh họa trong README
README đưa ba ca nghiên cứu để minh họa. Ca thứ nhất là trò chơi DX-Ball: lần theo một lời gọi âm thanh vào hàm đổi vị trí thành độ lệch trái phải, xem các lệnh, rồi biến pseudocode chưa đầy đủ thành mã C. README cho biết bản dựng lại vượt qua 3.205 trường hợp trên bản x86 gốc và tái tạo đúng toàn bộ 63 byte của hàm đã biên dịch. Đây là số liệu do tác giả tự công bố.
Ca thứ hai là Notion: tìm API clipboard ở phía renderer, theo nó qua preload và IPC vào tiến trình chính, rồi kiểm tra định dạng clipboard phong phú. Ca thứ ba là TH04, một trò chơi PC-98 cũ: kiểm tra các lệnh 16 bit của bản gốc, khôi phục phép tính góc cố định và góc nhắm, rồi so sánh mã C++ dựng lại với đầu ra của trình biên dịch thời đó.
Các ví dụ này cho thấy hướng sử dụng mà README muốn nhấn mạnh: chứng minh được kết quả bằng so sánh với bản gốc. Tuy vậy README không đưa ra thống kê tổng thể về tỉ lệ thành công trên nhiều mục tiêu, nên ba ca này nên được hiểu là ví dụ chọn lọc chứ không phải thước đo độ tin cậy chung. README cũng mời người dùng chia sẻ ca của mình qua issue hoặc pull request.
Dùng trong quy trình làm việc với AI agent
Trong một quy trình có agent, REA đóng vai nguồn dữ kiện. Thay vì để model đoán cách một ứng dụng hoạt động, agent gọi công cụ, nhận về modul, lời gọi, chuỗi hoặc quan sát mạng cùng bằng chứng, rồi mới lập luận. README nói thêm rằng agent dùng các phát hiện để viết và kiểm thử một bản cài đặt, nên vòng lặp điều tra rồi dựng lại rồi so sánh nằm gọn trong một phiên làm việc.
README trả lời một số câu hỏi thường gặp. Mọi agent hỗ trợ MCP cục bộ đều dùng được REA; phần thiết lập cấu hình sẵn cho các agent được hỗ trợ, còn client khác đăng ký MCP thủ công. Phân tích binary sâu cần một trong ba công cụ Hopper, Ghidra hoặc IDA, còn JavaScript và .NET tĩnh thì không. Về dữ liệu, README nói REA phân tích mục tiêu cục bộ, nhưng agent của bạn nhận kết quả công cụ và nhà cung cấp model của nó có chính sách dữ liệu riêng.
README cũng nói REA trả về pseudocode và assembly cho phân tích gốc, và khôi phục module cùng quan hệ giữa chúng cho JavaScript hoặc Electron. Tức là đầu ra là dữ kiện để agent dựng lại, chứ không phải mã nguồn gốc nguyên vẹn. Các tài liệu đi kèm, gồm tài liệu hợp đồng MCP và danh mục công cụ, giúp bạn biết chính xác công cụ nào trả gì.
Giới hạn và trách nhiệm sử dụng
Phạm vi rộng đi cùng nhiều điều kiện. Mỗi loại mục tiêu cần công cụ ngoài riêng và có khi chỉ kiểm chứng trên một hệ điều hành. Ví dụ phân tích ELF ngoại tuyến cần pwntools do bạn cung cấp trên Linux x64, WASM cần WABT do bạn cung cấp, gói tin cần TShark trên Linux. Vì vậy kỳ vọng thực tế là bạn sẽ phải chuẩn bị môi trường tùy theo loại mục tiêu, không phải mọi tính năng đều chạy ngay sau lệnh thiết lập.
README có phần miễn trừ và giấy phép rõ ràng. REA dành cho nghiên cứu hợp pháp, giáo dục, khả năng tương tác, bảo tồn phần mềm và phân tích phần mềm bạn sở hữu hoặc được phép kiểm tra. Mã do REA tạo ra theo giấy phép MIT, còn tài liệu của bên thứ ba giữ giấy phép riêng. Với các công cụ thương mại như IDA Pro, Hopper và JEB, README yêu cầu bạn phải có được chúng hợp pháp và được phép dùng; REA không cấp giấy phép, khóa hay quyền kích hoạt nào, và bản dùng thử vẫn chịu điều khoản của nhà cung cấp.
Vì khả năng phân tích ứng dụng không có mã nguồn có thể bị lạm dụng, người dùng cần tự đánh giá khía cạnh pháp lý và điều khoản sử dụng của phần mềm mục tiêu trước khi nhờ agent tạo ra một bản tái hiện. README không đưa ra thông tin về hiệu năng trên binary rất lớn ngoài gợi ý tăng thời gian chờ khởi động của Ghidra hoặc Hopper bằng biến môi trường, nên với mục tiêu lớn bạn cần thử nghiệm.
Khi nào nên và không nên dùng
REA phù hợp khi bạn thực sự cần hiểu hành vi của phần mềm không có mã nguồn mà bạn có quyền phân tích: nghiên cứu tính tương thích, khôi phục một thuật toán từ trò chơi cũ, xem một ứng dụng Electron nối clipboard hay IPC thế nào, hoặc kiểm tra thành phần của một gói. Việc có bằng chứng và giới hạn đi kèm giúp agent không kết luận quá tay.
Nó ít phù hợp nếu bạn chỉ cần đọc mã nguồn mở có sẵn, nếu môi trường của bạn không thể cài các công cụ ngoài như Ghidra hay Hopper, hoặc nếu mục tiêu bị ràng buộc bởi giấy phép cấm phân tích ngược. Ngoài ra, bạn nên cân nhắc việc đưa kết quả phân tích cho một model từ xa, vì README lưu ý rằng nhà cung cấp model có chính sách dữ liệu riêng.
Về số liệu từ metadata: kho có 373.627 sao, tăng 68.203 trong 7 ngày gần đây, dùng giấy phép MIT. README cũng tự nhắc cột mốc 300.000 sao và cảm ơn cộng đồng. Đây là con số do tác giả ghi trong README, và chúng tôi chỉ dẫn lại để tham khảo chứ không xem nó là bằng chứng về chất lượng. Hãy thử công cụ trên một mục tiêu nhỏ mà bạn có quyền phân tích trước khi đưa vào quy trình thường xuyên.
Bài do AI viết tự động từ README và dữ liệu GitHub API của repo, có kiểm tra tự động nhưng không có người duyệt từng câu. Báo sai sót qua email.