megamen32/Codex-Chrome-Extension
GitHub: megamen32/Codex-Chrome-Extension
该项目逆向分析了 OpenAI Codex Chrome 扩展,完整还原了 AI Agent 控制浏览器的架构、通信协议及内部工程实现细节。
Stars: 0 | Forks: 0
# 🔍 Codex Chrome 扩展 — 逆向工程
**📖 [英文版本](README.en.md)**
## 这是什么
这是 OpenAI 开发的一款 Chrome 扩展,允许 AI agent (Codex / ChatGPT) 控制您的浏览器:进行点击、输入、滚动、跳转链接、截图以及执行 JavaScript。该扩展在欧洲不可用,但可以手动安装。
## 架构
```
┌─────────────────────────┐
│ OpenAI API │ ← LLM, скриншоты, принятие решений
│ (Codex / ChatGPT) │
└───────────┬─────────────┘
│ JSON-RPC 2.0
▼
┌─────────────────────────┐
│ Native Host App │ ← com.openai.codexextension
│ (десктоп-приложение) │ chrome.runtime.connectNative()
│ │
│ Основной "мозг": │ — Обрабатывает 70+ команд
│ — Навигация │ — Делает скриншоты
│ — DOM-анализ │ — Управляет viewport
│ — Клик/ввод/скролл │ — Выполняет CDP-команды
└───────────┬─────────────┘
│ Native Messaging
▼
┌───────────────────────────────────────────────────┐
│ Chrome Extension — Background Service Worker │
│ (background.js, ~229 KB минифицировано) │
│ │
│ Роли: │
│ — Управление сессиями и вкладками │
│ — Подключение chrome.debugger (CDP 1.3) │
│ — Трансляция CDP-событий в native host │
│ — Синхронизация курсора → content script │
│ — Favicon badge manager (active/deliverable/etc) │
│ — Heartbeat (каждые 30с, emergency shutdown) │
│ — Отложенные обновления расширения │
│ — Tab lease система (active/handoff/deliverable) │
│ — Weighted Semaphore (приоритетная очередь задач) │
└───────────┬───────────────────────────────────────┘
│ chrome.tabs.sendMessage
▼
┌───────────────────────────────────────────────────┐
│ Content Script (codex.js, ~25 KB минифицировано) │
│ │
│ Роли: │
│ — Анимированный курсор агента (Spring Physics) │
│ — Favicon badge (SVG overlay на фавиконку) │
│ — Shadow DOM (closed, z-index: 2147483646) │
│ — MutationObserver (защита от удаления оверлея) │
│ — WXT Content Script Lifecycle Manager │
└───────────────────────────────────────────────────┘
```
## 📂 仓库结构
```
Codex-Chrome-Extension/
├── extension/ # Оригинальные файлы расширения (как есть)
│ ├── manifest.json # Manifest V3
│ ├── background.js # Service Worker (~229 KB, минифицирован)
│ ├── popup.html # Popup страница
│ ├── content-scripts/
│ │ └── codex.js # Content Script (~25 KB, минифицирован)
│ ├── chunks/
│ │ └── popup-CTe__03-.js # Popup JS (React 19 + Tailwind 4)
│ ├── assets/
│ │ └── popup-DzS88qVA.css # Popup CSS
│ ├── images/
│ │ ├── icon16/32/48/128.png # Иконки расширения
│ │ └── cursor-chat.png # Курсор агента
│ └── _metadata/
│ └── verified_contents.json # SHA-256 treehash подписи
│
└── deobfuscated/
└── codex-readable.js # Content Script (~850 строк, полностью читаемый)
```
## 🧠 70 多条浏览器控制命令
通过 background.js 中的 Zod schema,我们还原了完整的命令集。大多数命令在 native host 中处理,而不是在扩展中。
### 导航与标签页
| 命令 | 描述 |
|---------|----------|
| `tab_navigate` | 跳转至 URL (`wait_until: load\|networkidle\|commit`) |
| `tab_wait_for_load` | 等待页面加载 |
| `tab_wait` | 等待 N 毫秒 |
| `tab_close` | 关闭标签页 |
| `tab_get_info` | 标签页的 URL、标题、ID |
| `tab_set_title` | 设置标题 |
### 输入
| 命令 | 描述 |
|---------|----------|
| `tab_click` | 点击坐标 (x, y, button, modifiers) |
| `tab_drag` | 沿点路径 `[{x,y}]` 拖拽 |
| `tab_hover` | 悬停光标 |
| `tab_press_key` | 按下按键 (keys 数组, modifiers) |
| `tab_type` | 输入文本 |
### DOM 操作 (Playwright 风格)
| 命令 | 描述 |
|---------|----------|
| `tab_wait_for_selector` | 等待元素 (attached/visible/hidden) |
| `tab_get_element_count` | 根据 selector 获取元素数量 |
| `tab_select_option` | 在 `
标签:AI代理, OpenAI, 云资产清单, 内存规避, 数据可视化, 浏览器自动化, 自定义脚本, 逆向工程