xsslize/idarem
GitHub: xsslize/idarem
一款 IDA Pro 插件,通过 HTTP 将反汇编、伪代码等数据库内容暴露给浏览器端的 React 客户端,支持双向实时同步,让分析人员无需远程桌面即可从任何设备远程查看和操作 IDA 分析结果。
Stars: 0 | Forks: 0
# idarem




## 截图
| 反汇编 | 伪代码 |
| --- | --- |
|  |  |
## 为什么需要它
IDA 运行在工作站上。当你离开工作站时,通常如果不使用 RDP/VNC(笨重且卡顿)或者将数据库拷来拷去,就无法查看任何内容。`idarem` 在实时的 IDA 会话内部暴露了一个轻量级的 HTTP API,这样轻量级的 Web 客户端就可以通过隧道从任何设备浏览分析结果。
```
[ Workstation: IDA + Plugin ] ──HTTP──▶ [ Tunnel ] ──▶ [ Laptop: Browser ]
Flask server in a thread (Cloudflare / React client
+ ida_kernwin.execute_sync ngrok / Tailscale)
```
## 工作原理
- **`plugin/idarem.py`** — 一个 IDA 插件,在 daemon 线程中启动 Flask 服务器并响应 REST 查询。
- IDA API **非线程安全**,因此每个数据库调用都通过 `ida_kernwin.execute_sync(..., MFF_READ)` 被 marshaling 到 IDA 的主线程上,并将结果交还给 HTTP worker。这是该插件的核心。
- Endpoints:`/api/info`, `/api/functions`, `/api/disasm/`, `/api/graph/`, `/api/pseudocode/`, `/api/xrefs/`, `/api/hex`, `/api/strings`, `/api/names`, `/api/imports`, `/api/exports`, `/api/segments`, `/api/local-types`, `/api/events` (SSE)。
- **实时跟随** — 一个 `UI_Hooks` 监视器通过 Server-Sent Events 推送 IDA 当前的屏幕地址和活动窗口;在客户端切换 **Follow IDA**,网页就会跳转到你所在的函数,并随着你在 IDA 中的移动,切换到匹配的标签页(反汇编 ↔ 伪代码 ↔ strings ↔ hex …)。
- **驱动 IDA(Web → IDA)** — 切换 **Drive**,你的点击将跳转 IDA 的视图(`jumpto`),并且你可以从浏览器中重命名所选函数并在指定地址添加注释,直接写入数据库。`POST /api/goto`, `/api/rename`, `/api/comment`;重命名/注释受 `ALLOW_WRITE` 控制(将其设置为 `False` 即为只读)。
- **`web/`** — 一个 React + TypeScript (Vite) 客户端:带筛选功能的函数列表、反汇编 / graph / 伪代码标签页、hex 视图,以及常用的数据窗口(strings, names, imports, exports, segments, local types)。
- **响应式** — 适用于手机、平板电脑和桌面设备:函数列表在小屏幕上折叠成滑出式抽屉,graph 可通过触摸平移和缩放,长列表实现了虚拟化,因此即使是庞大的二进制文件也能保持轻量。
## 安装说明
### 快速安装(Windows,推荐)
构建 Web 客户端并注册插件,以便 IDA 在每次启动时加载它。
首先在 IDA 的 Python 环境中安装 Flask(只需一次):`python -m pip install flask`。然后运行
安装程序 — **双击 `scripts\install.bat`**,或者在终端中运行:
```
powershell -ExecutionPolicy Bypass -File scripts\install.ps1
```
(`.bat` 文件和 `-ExecutionPolicy Bypass` 标志都避开了 Windows 默认对运行 `.ps1` 文件的
阻止 — 此绕过操作仅限于该单个进程,不会
改变任何系统级设置。通过双击或直接运行 `.ps1` 将会被阻止。)
它会构建 `web/dist`,然后将一个微小的 **loader** 放入
`%APPDATA%\Hex-Rays\IDA Pro\plugins\`
直接从此 repo 中运行插件。
- 你可以就地编辑和运行 `npm run build` — 无需拷贝任何文件,因为 loader 始终指回 repo(它会自动检测旁边的 `web/dist`)。
- `Ctrl-Alt-R` 切换服务器;打开 `http://localhost:8765`。
loader 会被放入 IDA 的用户级 plugins 文件夹(`$IDAUSR`,或者
`%APPDATA%\Hex-Rays\IDA Pro\plugins`),无论 IDA 本身安装在
哪里 — 任何文件夹或驱动器 — 该位置都是一样的。只有在移动此 repo 时才需要重新运行 `install.ps1`;
`scripts\uninstall.ps1` 用于移除该 loader。
### 手动安装(任何操作系统)
1. 在 IDA 的 Python 环境中运行 `python -m pip install flask`。
2. 构建 UI:`cd web && npm install && npm run build`。
3. 在 IDA 中加载 `plugin/idarem.py` — 从 repo 中运行它(*File → Script file*),它会自动检测 `web/dist`;或者将其拷贝到 `plugins/` 文件夹中,并将 `WEB_ROOT`(或 `IDAREM_WEB_ROOT` 环境变量)设置为 `web/dist` 路径。
4. `Ctrl-Alt-R`(或 **Edit → Plugins → idarem**)在 `http://localhost:8765` 上启动服务器。
打开该地址,你会进入一个**连接页面** — 输入主机/IP、端口
和 token,然后点击 **Connect**。当页面由插件提供服务时,主机字段
会预填当前地址,因此无论是在本地还是通过隧道,你通常只需要填入 token。
## 远程访问
无需转发原始端口即可从任何地方访问服务器(不要在没有 TLS 的情况下将 IDA 完全暴露 — 绝对不要这样做)。根据你的连接需求选择合适的方式:
| 你想要… | 使用 | 方式 |
| --- | --- | --- |
| 从任何地方访问你自己的设备 | **[Tailscale](https://tailscale.com/)** | 在两台机器上安装;打开 `http://:8765`。无需发布任何内容;不仅限于 LAN,也支持通过互联网访问。 |
| 已经运行了其他 VPN 的手机 | **[Tailscale Funnel](docs/tailscale.md)** | 公共 HTTPS URL,手机上无需客户端。**完整分步指南:[docs/tailscale.md](docs/tailscale.md).** |
| 你自己域名上的公共 URL | **[Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/)** (named) | `cloudflared tunnel --url http://localhost:8765`,或者使用命名隧道映射 `ida.yourdomain.com` → `localhost:8765`。支持 HTTPS,无需端口转发。 |
| 用于测试的临时公共 URL | **[ngrok](https://ngrok.com/)** | `ngrok http 8765` → 打开它输出的 `https://…` URL。 |
由于 UI 和 API 位于同一个 origin,打开隧道/公共 URL 即可提供服务
客户端并使用该 URL 预填连接页面 — 只需填入 token。
**只要服务器可从 localhost 以外访问,就请设置 `AUTH_TOKEN`。** 客户端
会将其作为 `Authorization: Bearer ` 发送;如果为空,插件在启动时会发出警告。响应包含
`Access-Control-Allow-Origin: *`,因此如果没有 token,任何
能访问该 URL 的人 — 包括你浏览器中打开的网站 — 都可以读取
数据库。token 是你的防护门;隧道可将端口从公共互联网上隐藏。
## 技术
IDAPython 3 (IDA 9.x) · Flask · Server-Sent Events · React · TypeScript · Vite
## 许可证
MIT — 见 [LICENSE](LICENSE)。
标签:Flask, IDA插件, React, Syscalls, Web可视化, 云资产清单, 前端客户端, 后端API, 自动化攻击, 远程访问, 逆向工具, 逆向工程