REA: repo cho agent reverse engineer mọi app

REA là MCP server cho coding agent soi app không có source: cách hoạt động, demo khôi phục mã mở khoá từ binary đã strip, rủi ro pháp lý và bảo mật.

Đã duyệt độc lập · cập nhật 13/10/2026 · 9 min

1. REA: repo tăng sao nhanh nhất GitHub

Rob mở đầu bằng một tin mới: có một repo open source vừa xuất hiện cho phép coding agent của bạn, dù đó là Claude Code, Cursor, Codex hay bất cứ thứ gì bạn đang dùng, nhìn vào bên trong một ứng dụng mà nó hoàn toàn không có source code. Agent tìm hiểu một feature hoạt động thế nào, đưa ra bằng chứng cho những gì nó tìm được, rồi build cho bạn một phiên bản của riêng bạn.

Người ta đang dùng nó cho game, cho phần mềm, và đang "bẻ khoá" những ứng dụng desktop đã đóng mã nguồn suốt 20 năm qua. Trên màn hình lướt qua vài đoạn clip game được làm lại hoặc chỉnh sửa, kiểu một bản Minecraft hay một bản Skyrim do người dùng tự dựng.

Công cụ đó tên là REA, viết tắt của Reverse Engineer Anything, và nó là một trong những repo tăng nhanh nhất GitHub lúc này: khoảng 7 hoặc 8 nghìn sao chỉ trong một ngày, và vẫn đang tăng từng phút. README của repo đính kèm huy hiệu "#1 Repository Of The Day" trên GitHub Trending.

README của repo REA trên GitHub với tiêu đề REA: Reverse Engineer Anything
README của REA trên GitHub: "One MCP for reverse engineering across binaries, applications, and runtime behavior", huy hiệu GitHub Trending "#1 Repository Of The Day" và lệnh cài npx rea-agents setup.

Rob tự giới thiệu: anh là Rob của Switch Dimension, có 20 năm làm software developer và product manager, và trên kênh này anh cùng người xem build những thứ thật với AI agent. Trong video này anh muốn làm hai việc. Thứ nhất, cho thấy REA thực sự làm được gì, vì phần lớn các bài đăng anh thấy về nó đang hiểu sai hoàn toàn. Thứ hai, giải thích vì sao anh nghĩ nó thay đổi một điều rất lớn với bất kỳ ai ship phần mềm.

Rob O'Shaughnessy nói trước micro trong phòng làm việc
Rob giới thiệu REA và hai phần của video: REA thực sự làm gì, và vì sao nó thay đổi mọi thứ.

Anh cũng sẽ cho REA chạy thật trên một đoạn source code do chính anh viết, rồi "vứt chìa khoá đi", để xem liệu có lấy lại được hay không. Câu hỏi đặt ra là: thứ này toàn hype, hay nó thật sự chạy được?

2. REA thật sự làm gì, và không làm gì

Lời giới thiệu trong README, theo Rob, về cơ bản là thế này: bạn thấy một feature trong một app mà bạn muốn có trong sản phẩm của mình. Bạn nhờ agent điều tra nó, và agent làm được việc đó mà không cần source code thật của app. Nó có thể nhìn vào bên trong và mổ xẻ ứng dụng.

Bên dưới, REA về cơ bản là một MCP server cộng với một CLI, cắm rất dễ vào Claude Code, Codex, Cursor hay bất cứ thứ gì bạn muốn. Nói gọn là bất cứ thứ gì "nói" được MCP, mà bây giờ thì rất nhiều công cụ đã làm được.

Và đây không chỉ là app Electron, loại app mà trước đây ta vốn đã xem được một phần source code. Rob nói tới native binary trên Mac, Windows và Linux, tức một phần rất lớn các ứng dụng desktop bạn dùng hằng ngày. Thêm vào đó là .NET, Android APK, firmware, website, và cả bytecode của smart contract.

Bảng What you can analyze trong README của REA
Bảng "What you can analyze" trong README: từng loại mục tiêu (native binary, ELF, EVM bytecode, JavaScript/Electron, website, .NET, Android APK, firmware...), thứ REA trả về và công cụ cần có. README ghi REA cần Node.js 22.x, 24.x hoặc 26+ cùng npm.

Đến đây là chỗ mọi người bắt đầu nhầm. REA không trao lại cho bạn source code gốc. Không gì làm được việc đó. Khi một app đã được compile, code gốc đã mất. Thứ bạn nhận về sau cuộc điều tra là pseudocode, assembly, module map, call path và hoạt động mạng, kèm theo bằng chứng giải thích vì sao agent nghĩ ứng dụng được xây theo cách đó.

Phần bằng chứng mà REA trả về, theo Rob, rất đáng chú ý. Mỗi phát hiện đều đi kèm nguồn gốc của nó, mức độ tự tin của model, và những gì nó không tự tìm ra được. Đây là loại việc trước kia bạn phải tốn rất nhiều tiền và rất nhiều thời gian mới làm được.

App đã compilenative binary, .NET, APK,firmware, website,smart contract bytecode REA trả vềpseudocode, assembly,module map, call path,hoạt động mạng + bằng chứng Không cósource code gốc:đã mất từ lúc compile mỗi phát hiện: lấy từ đâu, model tự tin tới đâu, còn gì chưa biết
Hình 2.1REA đi từ app đã compile tới pseudocode và bằng chứng, chứ không lấy lại được source code gốc.

3. Cách hoạt động: lớp vỏ quanh Ghidra, Hopper và IDA Pro

Kiến trúc của REA, theo Rob, thật ra rất đơn giản. Bản thân REA không phải là một decompiler. Nó không có gì mang tính cách mạng hay đặc biệt. Về cơ bản nó bọc quanh những công cụ nghiêm túc mà dân reverse engineering vẫn dùng: Ghidra, miễn phí và do NSA phát hành; Hopper trên Mac; và IDA Pro, chuẩn công nghiệp đắt tiền.

Ba công cụ Ghidra, Hopper và IDA Pro với nhãn giá
"Not a decompiler itself": REA dựa vào ba công cụ có sẵn, Ghidra (miễn phí, của NSA), Hopper (trên Mac, có trả phí) và IDA Pro (chuẩn công nghiệp, đắt nhất).

Như vậy, tất cả việc reverse engineering này vốn đã làm được từ trước, nếu có đủ thời gian và đủ tiền. Điểm khác bây giờ là ma sát đã bị gỡ bỏ. Những công cụ kia đều cực kỳ mạnh nhưng cũng nổi tiếng là khó học. Điều REA làm là đưa cho agent của bạn hàng chục tool kiểu "plain intent" (trên màn hình ghi "plain-intent tools") đặt lên trên chúng. Ví dụ như: mở binary này, tìm các chuỗi ký tự (strings), lần theo những hàm gọi tới một function (function callers), để agent tự tìm đường đi qua chương trình và hiểu được code.

Phần How REA works trong README với sơ đồ REA investigation flow
Mục "How REA works" trong README: agent gọi REA qua MCP để soi mục tiêu và lần theo code liên quan; REA trả về phát hiện kèm bằng chứng. Sơ đồ "REA investigation flow" gồm bốn bước: Ask, Inspect & trace (REA CLI/MCP, dùng các analysis tool chạy local), Read the evidence, Use what you learn, với vòng follow-up question quay lại.

Phần setup cực kỳ đơn giản, chỉ một lệnh. Trên README là:

npx rea-agents setup

(README cũng có dạng npx rea-agents@latest setup, và khuyên xem lại các thay đổi rồi khởi động lại agent.) Lệnh này cho bạn xem trước kế hoạch những gì nó sắp thay đổi. Nó backup config của bạn, thêm MCP server, và thêm một skill dạy agent cách tiến hành điều tra. Sau đó nó hỏi lại trước khi đụng vào bất kỳ thứ gì quan trọng.

4. Một lời cảnh báo, rồi dựng bài test: app Vault

Video có một đoạn quảng cáo cho TestSprite.

Quay lại REA, Rob nói như mọi lần, anh hoàn toàn giơ tay nhận trước: hãy hết sức cẩn thận với thứ này, vì nó thực sự rất mạnh. Bạn sẽ dùng nó để soi đủ loại binary và công cụ mà bạn hoàn toàn không biết bên trong có gì. Trong đó có thể có những chỉ dẫn độc hại được giấu sẵn, nhắm vào AI của bạn. Hãy chạy những thứ này trong sandbox, và cẩn thận tối đa.

Rồi tới phần dùng thật. Rob muốn một bài test công bằng, không phải kiểu "tin tôi đi, nó chạy mà" (trust me bro). Anh không thể chạy REA lên một app độc quyền có sẵn ngoài kia, nếu không thì sẽ bị kiện, nên anh tự build một app riêng để mọi người thấy nó hoạt động ra sao.

Màn hình giới thiệu app Vault, SwiftUI trên macOS, mã ZOOM-1234 bị từ chối
App thử nghiệm của Rob tên Vault, viết bằng SwiftUI cho macOS: nhập mã ZOOM-1234 thì nhận "Access denied".

App tên là Vault. Bạn gõ một mã mở khoá, và nó hoặc cho bạn vào, hoặc không. Ở đâu đó bên trong có một quy tắc xác định thế nào là một mã hợp lệ. Và một thông điệp ẩn chỉ hiện ra khi bạn nhập đúng. Vì đây là app của chính anh, không có license key nào phải bận tâm. Anh cũng có sẵn đáp án hoàn hảo, chính là source code, thứ mà anh sẽ cất đi ngay bây giờ.

Rob còn build app theo đúng cách một app thật được ship: bản đã tối ưu, mọi tên function đều bị xoá (stripped). Vì vậy hàm checkUnlockCode giờ chỉ còn là "một function nằm ở địa chỉ này", một tình huống thực tế hơn nhiều.

Tiếp theo là agent. Rob đã cài REA vào agent của mình, với Ghidra chạy bên cạnh, bản miễn phí của NSA. Trên màn hình là Cursor Agent, và câu lệnh anh đưa cho nó như sau (đường dẫn tới app trên máy anh được rút gọn ở đây):

This is my own app and I've lost the source. Use REA to explain how the unlock check in .../vault-target/Vault.app works. Give me the exact rules with the evidence for each one, the success message, and a function that generates valid codes.

5. Agent mò ra mã mở khoá từ binary đã bị xoá tên

Agent mở binary và nhận về hơn 242 function. Function nào cũng chỉ mang tên "FUN" cộng với một địa chỉ. Sau đó nó bắt đầu decompile, tức chuyển machine code ngược lại thành thứ gì đó hơi giống ngôn ngữ C. Chỉ sau một số ít lần gọi tool, nó đã tìm ra đúng function quan trọng.

Lưới 242 function vô danh, một ô được đánh dấu là FUN_1000010e0, phần kiểm tra mã
242 function, tất cả đều vô danh; một ô được làm nổi bật với nhãn FUN_1000010e0, "the unlock check".

Trong terminal, ta thấy agent gọi liên tiếp các tool của REA: read_bytes, xrefs, resolve_containing_procedure, procedure_pseudo_code, procedure_callers, rồi khám phá thêm procedure_callees và read_function_instructions. Bộ đếm thinking lúc đó đã lên khoảng 61,68 nghìn token.

Vậy câu hỏi lớn: nó có thật sự chạy được không? Agent viết cho Rob một trình sinh mã nhỏ và đưa ra một mã: AGNT-1001. Và anh vào được. Trên màn hình, quy tắc đầu tiên của một mã hợp lệ được hiện ra: "4 letters, a dash, 4 digits", tức bốn chữ cái, một gạch nối, bốn chữ số, theo dạng ABCD-1234 (màn hình ghi tổng cộng 4 quy tắc).

Rob đặt source gốc cạnh thứ REA lấy ra từ binary đã strip để đối chiếu. Hàm letterScore trong source cộng dồn giá trị từng chữ cái trừ 64; phía REA là một dòng trừ 0x40 (chính là 64). Câu guard number % 91 == 0 trong source tương ứng với một phép so sánh nhân với hằng số lớn ở phía REA. Còn khoá 0x5A dùng để XOR giải mã thông điệp ẩn hiện ra nguyên vẹn thành ^ 0x5a trong pseudocode.

So sánh source Vault.swift bên trái và pseudocode REA từ binary đã strip bên phải
Bên trái "My source · Vault.swift", bên phải "REA · from the stripped binary": ba cặp dòng tương ứng (trừ 64 và 0x40, kiểm tra chia hết cho 91, XOR với khoá 0x5A).

Điều lớn mà nhiều người đang bỏ qua, theo Rob: REA không moi source code ra. Về cơ bản, agent tự sinh ra lời giải, hoặc nói đúng hơn là mổ xẻ và reverse engineer chương trình. Nó không copy code. Nó hiểu logic rồi viết ra một thứ hoàn toàn mới, một trình sinh mã, thứ mà chính app của Rob thậm chí không có.

6. Closed source không còn là con hào

Rob cho rằng đây là điều lớn với ngành phát triển phần mềm. Nhiều năm qua, phần mềm luôn được hưởng một kiểu bảo vệ ngầm, không ai nói ra. Đúng là bạn luôn có thể reverse engineer một app. Không phải trước đây không làm được, nhưng nó chậm, đòi hỏi chuyên môn và rất đắt, nên gần như chẳng ai bận tâm làm. Chính ma sát của việc reverse engineering là lớp bảo vệ, và REA về cơ bản xoá sạch ma sát đó.

Rob đã thấy nhiều người đăng bài rằng máy bay sắp rơi khỏi bầu trời vì có thể bị reverse engineer và hack. Anh thật sự không nghĩ vậy. Vẫn còn rất nhiều rào cản và nhiều lớp phải vượt qua trước khi có thể xâm nhập phần lớn các hệ thống.

Nhưng trong thế giới mới này, nếu bạn ship một app desktop, một browser extension, một game, một app mobile, hay một bundle JavaScript lớn chạy phía client, bạn nên mặc định rằng agent của bất kỳ ai cũng có thể vẽ ra cách nó hoạt động. Anh đùa rằng trong vài tháng tới chúng ta sẽ thấy vài bản mod GTA 6 thú vị.

Dù vậy, Rob không nghĩ đây là thảm hoạ như rất nhiều bài đăng anh thấy. Anh coi nó là một đợt điều chỉnh. Code chưa bao giờ thật sự là con hào (moat) ngay từ đầu, ít nhất với phần lớn chúng ta. Con hào thật của bạn nằm ở dữ liệu, người dùng, bảo mật phía cloud, tốc độ ship, gu (taste) của bạn, và những thứ chạy trên server, nơi về cơ bản không ai khác soi vào được.

Sơ đồ Your real moat quanh một lâu đài: Data, Distribution, Speed, Taste, Trust, Backend
"Your real moat" quanh sản phẩm của bạn: Data (dữ liệu), Distribution (người dùng), Speed (tốc độ ship), Taste (gu), Trust (thương hiệu) và Backend (chạy trên server của bạn).

Mặt tốt về bảo mật là chiều ngược lại: bạn có thể chĩa REA vào các app trên chính máy mình và hỏi: thứ này thực sự đang làm gì? Nó đang gửi gì về nhà? Đã có nhiều trường hợp máy in 3D, thậm chí cả máy pha cà phê, bị xâm nhập và gửi hàng loạt dữ liệu ra khỏi mạng của bạn về một nơi nào đó mà bạn không hề biết.

7. Cái giá phải trả: pháp lý, bảo mật, tốc độ thay đổi

Rob gom những điểm quan trọng thành ba thứ.

Một, pháp lý. Anh không phải luật sư và đây không phải tư vấn pháp lý, nhưng reverse engineering nhằm mục đích tương thích (interoperability) nhìn chung được bảo vệ, tức là thứ bạn đại khái được phép làm. Tuy vậy, rất nhiều app có điều khoản dịch vụ cấm hẳn việc này. Còn phá DRM hay mã hoá là một vấn đề pháp lý hoàn toàn khác. Vùng an toàn là app của chính bạn, binary open source, các thử thách bảo mật, và những thứ bạn được uỷ quyền để test. Chính phần disclaimer của REA cũng ghi rằng bạn phải tự chịu trách nhiệm.

Phần Disclaimer và License MIT trong README của REA, phía trên là biểu đồ số sao tăng vọt vào tháng 10
Cuối README: biểu đồ star history dựng đứng vào tháng 10, phần Disclaimer với câu được tô sáng "You are responsible for obtaining any required authorization", và license MIT. Disclaimer cũng nói dự án không phát hành hay bảo trợ bất kỳ đồng tiền mã hoá hay token nào mang tên REA.

Hai, đây không phải sandbox. Nếu bạn cho một mục tiêu chạy qua phần runtime capture của REA, nó chạy với chính quyền của bạn. Vì vậy đừng chĩa nó vào một binary ngẫu nhiên tải về từ diễn đàn nào đó, và hãy giữ bật các approval prompt của agent để bạn biết nó đang làm gì. Ai mà biết bên trong có thể có kiểu prompt injection nào.

Ba, tốc độ. Repo này có vẻ đang thay đổi cực nhanh: rất nhiều breaking change, năng lượng tuyệt vời, nhưng hãy chuẩn bị tinh thần là nó thay đổi liên tục. Vì vậy hãy nhớ cập nhật nó thường xuyên.

Trang Releases của repo morluto/rea, bản rea-agents v6.1.0 với mục Breaking changes
Trang Releases của repo: bản rea-agents v6.1.0 ngày 2026-10-09, đã có mục "Breaking changes" cho phần Hopper, và danh sách release trước đó chạy từ v3.0.0 tới v6.0.0.

8. Rob sẽ dùng REA vào việc gì

Với tư cách một software engineer, Rob kể những việc anh thấy REA thật sự hữu ích. Một là học cách các ứng dụng desktop xuất sắc xử lý những thứ như đồng bộ offline (offline sync), clipboard và tìm kiếm, rồi tự build phiên bản của mình. Hai là audit các app Electron trên máy anh, thứ mà giờ anh có rất nhiều. Ba là khôi phục logic từ chính các bản build cũ của mình, khi source có lẽ đã thất lạc. Trên màn hình còn có ô thứ tư: luyện CTF, "một cách tuyệt vời để học".

Bốn ô What I'd use it for: Learn from great features, Audit your own machine, Recover lost logic, CTF practice
"What I'd use it for": học từ những feature hay (offline sync, clipboard, tìm kiếm), audit máy của chính mình (các app Electron đang làm gì), khôi phục logic bị mất (bản build cũ, source thất lạc) và luyện CTF.

Điều Rob sẽ không làm là chĩa REA vào một đối thủ rồi clone sản phẩm của họ. Đó là việc rủi ro về pháp lý và cũng lệch khỏi mục đích. Điều bạn muốn là hiểu ý tưởng rồi build một thứ tốt hơn, vì dù sao bạn cũng không bao giờ theo kịp marketing của công ty đó. Và giờ đây mọi thứ nằm ở distribution.

Anh hỏi người xem: nếu được chĩa REA vào một feature trong một app, bạn sẽ chọn cái gì? Hãy kể trong phần bình luận. Rob nhắc ngắn rằng khoá học và cộng đồng Switch Dimension của anh đang đóng và mở danh sách chờ, mời người xem subscribe vì anh chỉ nói về những công cụ agent thật sự đáng dùng và bỏ qua những thứ không đáng, rồi gợi ý xem tiếp một video của anh về skills.

Nguồn và liên kết 8 nguồn

  1. Tên gốc: The Fastest-Rising Repo on GitHub Is a Little Scary REA
  2. Sự kiện: YouTube
  3. Video gốc: https://www.youtube.com/watch?v=OMobTlfjb8s youtube.com
  4. Kênh YouTube Rob Shocks (Rob O'Shaughnessy): youtube.com/channel/UCsVgseBnKuyIGaH54XVoK3Q youtube.com
  5. REA, repo trên GitHub (README có lệnh setup, sơ đồ investigation flow, bảng "What you can analyze" và disclaimer): github.com/morluto/rea github.com
  6. Trang REA với guide và showcase: rea.tools rea.tools
  7. Ghidra, framework reverse engineering miễn phí của NSA: github.com/NationalSecurityAgency/ghidra github.com
  8. DX-Ball reconstruction, một ví dụ dựng lại game DX-Ball 1.07 bằng REA (được nêu trong phần mô tả video): github.com/N0zoM1z0/dx-ball github.com