Eleven
一個以 agent 為核心的 macOS 逆向工程應用程式。
[English](README.md) · [简体中文](README_zh.md) · **繁體中文** · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md)
Eleven 是一個圍繞 agent 打造的反向工程應用程式。放入一個應用程式、一個二進位檔、一個著色器或一個模型,然後問它是做什麼的。任何支援 [Agent Client Protocol](https://agentclientprotocol.com) 的 agent 都能閱讀程式碼、追蹤參照、重新命名函式、留下筆記並提出修補建議,而你在同一個視窗中觀看並核准。
分析透過 [REA](https://github.com/morluto/rea) 在 [Ghidra](https://ghidra-sre.org) 上執行。介面以 React 撰寫,由 [GPUIX](https://www.npmjs.com/package/@gpuix/react) 在 GPUI 上原生呈現。
## 功能
- **自備 agent。** Aster、Claude、Codex、Gemini、Cursor、Copilot、OpenCode 以及任何其他 ACP agent。可以在同一個專案上執行多個,各自擁有獨立的對話。
- **Agent 能操控視窗。** Eleven 提供自己的 MCP 工具,讓 agent 可以開啟函式、切換檢視、重新命名、新增筆記並提出修補建議。
- **主控權始終在你手上。** 你或 agent 的每一次變更都會連同作者記錄下來,並且可以復原。來自 agent 的位元組修補會以建議的形式出現,由你接受或拒絕。
- **Mach-O、ELF 和 PE。** 函式、虛擬碼、組譯碼、控制流程圖、交互參照、字串、區段和十六進位。
- **專案。** 一個專案就是一個應用程式或二進位檔。它的對話、重新命名、書籤、筆記和修補在重新開啟後依然保留。
- **修補。** 編輯某個位址上的位元組並寫出修補後的副本。原始檔絕不會被更動。
- **差異比對。** 依函式比較兩個組建,看看虛擬碼中出現了什麼變化。
- **偵錯。** 在 LLDB 下執行程式,在你正在查看的函式上中斷,逐步執行並讀取區域變數。
- **著色器、模型和 GPU 剖析。** Metal 著色器和 ML 模型檔案在工作台中開啟,並與載入它們的程式碼連結。使用 Instruments 進行剖析。
- **Playbook。** 內建技能(例如初次檢視、命名函式、追蹤功能和網路地圖)可與任何 agent 搭配使用。
- **匯出。** 虛擬碼、組譯碼和 Objective-C 類別清單。
## 安裝
Eleven 可在搭載 Apple Silicon 的 macOS 14 或更新版本上執行。
```sh
curl -fsSL https://raw.githubusercontent.com/Zfinix/eleven/main/install.sh | sh
```
這會將 `Eleven.app` 安裝到 `/Applications`。組建尚未公證,因此安裝程式會替你清除下載隔離標記。
Eleven 還需要:
- **Ghidra 12.x。** 從 [ghidra-sre.org](https://ghidra-sre.org) 下載並解壓縮到 `~/.local/share` 或 `~/Applications`,或設定 `GHIDRA_INSTALL_DIR`。
- **一個 JDK,21 或更新版本。** `brew install openjdk@21` 即可。Eleven 會自己找到它。
- **一個 agent。** 首次執行時挑選一個。需要時 Eleven 會為你安裝 ACP 配接器。
## 從原始碼建置
你需要 [Bun](https://bun.sh)、Node 20 或更新版本、Ghidra 和一個 JDK(如上),以及在本儲存庫旁有一份 REA 6.x 的簽出(`../rea`),或讓 `ELEVEN_REA` 指向它。
```sh
git clone https://github.com/Zfinix/eleven
git clone https://github.com/Zfinix/rea
cd eleven/app
bun install
bun run dev
```
| 指令 | 作用 |
| --- | --- |
| `bun run dev [file]` | 以熱重載方式執行應用程式,可選擇開啟一個檔案 |
| `bunx tsc --noEmit --noUnusedLocals` | 對應用程式、測試和指令碼做型別檢查 |
| `./script/test` | 一次一個檔案地執行測試套件 |
| `./script/bundle-macos` | 建置 `build/Eleven.app` |
| `./script/package` | 建置、簽署並封裝發行版 |
## 環境變數
以下全部都是選用的。Eleven 會自己找到常見的安裝位置。
| 變數 | 用途 |
| --- | --- |
| `GHIDRA_INSTALL_DIR` | 要使用的 Ghidra 安裝位置 |
| `JAVA_HOME` | 用來執行 Ghidra 的 JDK |
| `ELEVEN_REA` | 使用 REA 而不是內建的那一份 |
| `ELEVEN_LLDB_DAP` | 供偵錯工具使用的 `lldb-dap` |
| `ELEVEN_SUPPORT` | Eleven 存放專案和設定的位置 |
| `ELEVEN_SIGN_IDENTITY` | 供 `./script/package` 使用的程式碼簽署身分 |
## 說明文件
- [MCP 工具](docs/mcp-tools.md):Eleven 中代理可用的每一個工具、各自的輸入與回傳,以及權限與隱私。
- [技能](docs/skills.md):內建的作戰手冊,以及如何撰寫自己的。
## 儲存庫結構
- `app/` 是應用程式本身:使用 React 和 TypeScript,基於 GPUIX。
- `crates/` 是早期的 Rust 原型,保留作為參考。應用程式並不使用它。
- `launch/` 是發布影片,以 Remotion 製作。
- `install.sh` 是安裝程式。
關於程式碼的組織方式以及它遵循的規則,請見 [AGENTS.md](AGENTS.md)。
## 授權條款
Eleven 以 [Apache License 2.0](LICENSE) 發布。隨附的第三方程式碼列於 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。Agent 標誌屬於其各自所有者,僅用於識別這些 agent。