二进制或应用包的第一印象:静态、免执行分析并附证据。CLI、15 工具 MCP 服务器和本地 Web UI,仅需 Node。
English · Deutsch · Español · Français · Português (Brasil) · Русский · 中文 · 日本語 · 한국어
试用 · 使用场景 · 安装 · 它能读取什么 · CLI · Web UI · 面向 AI 智能体 · 引擎 · 限制 · 与 REA 对比 · 工作原理 · 贡献 · 常见问题
面向开发者和 AI 智能体的快速、本地、有证据支撑的软件首次审视。
hexvero 读取可执行文件、Electron 应用、APK、归档文件、数据库和网络抓包,而无需运行它们。它会告诉你软件包含什么、暴露了什么、每条事实是从哪里读取的、有多确定,以及它无法确定什么。一个 CLI、一个面向编码智能体的 MCP 服务器、一个本地 Web UI。任何数据都不会离开你的机器。

npx hexvero analyze ./MyApp.app/Contents/Resources/app.asar
Node.js 22.12 或更高版本即可满足需求。在空的 npm 缓存下,首次结果只需一条命令,在笔记本电脑上大约九秒钟,包括下载时间。在 examples/ 中的小型 Electron 应用上进行实际运行:
$ hexvero analyze examples/notesdesk-1.4.0.asar
Summary
Electron ASAR: 4 JavaScript modules, 6 IPC channels
Findings
○ nodeIntegration: true in a BrowserWindow @ main.js:14
contextIsolation is on for the same window, so page scripts do not get require(). Node integration keeps the renderer out of the Chromium sandbox.
○ sandbox: false in a BrowserWindow @ main.js:15
The renderer process runs without the Chromium sandbox.
● 6 IPC channels @ main.js:25
app:quit, notes:list, notes:save, settings:get, settings:set, shell:open (collections ipcChannels, ipc)
● 6 members exposed to pages as window.notesdesk @ preload.js:4
getSetting, setSetting, listNotes, saveNote, quit, openInShell (collection contextBridge)
○ 2 network endpoints read from the code @ renderer/app.bundle.js:11
${…}/notes/sync, https://telemetry.notesdesk.example/collect (collection endpoints)
● 1 storage key read from the code @ renderer/app.bundle.js:10
notesdesk.token (collection storage)
… (preload script, list of collections)
Next
Which IPC channels can a page reach, and who handles them?
hexvero collection examples/notesdesk-1.4.0.asar ipcChannels
What does the preload script expose to web content?
hexvero collection examples/notesdesk-1.4.0.asar contextBridge
… (two more)
实心点表示从文件中读取到的事实,空心点表示从模式推断出的结论;@ main.js:14 表示读取位置。设置按原样报告,绝不按假定的 Electron 默认值报告。${…} 标记地址中在运行时计算的部分。windows 集合将每个窗口的 nodeIntegration、contextIsolation 和 sandbox 并排列出,取值为 true、false、computed 或 not written,并说明它们共同导致的后果;若某个值依赖于 package.json 中该版本的 Electron 默认值,则标记为 default on / default off。相关规则及其来源见 docs/electron-findings.md。只有当所有 IPC 形式的调用都能被追踪到时,IPC 发现才是一个实心点;否则,限制部分会列出无法追踪的调用及其文件和行号。
1. 理解一个不熟悉的应用程序。 你下载了一个二进制文件、一个 Electron 应用或一个 APK。hexvero 会说明它是什么、暴露了什么以及证据在哪里,并建议接下来该看什么。对于原生程序,它会列出值得关注的加固措施和导入项:
$ cc -O2 -o demo examples/native/demo-v2.c && hexvero analyze demo
Findings
● Imports functions that start other programs or a shell: system
Read from the import table. Whether and with what input they are called is not established by static reading; a call graph (hexvero calls) shows who calls them. (collection imports)
● Hardening: PIE yes, stack canary no, ARC no, code signature yes, stripped yes
$ hexvero calls demo radare2 main --goal system # with radare2, rizin or Ghidra installed
radare2 path main → sym.imp.system · found
main
└ sym._run_tool
└ sym.imp.system
2. 比较两个版本。 两个构建之间发生了什么变化,逐列表呈现,并以条目作为证据。仅发生位置移动的代码不会被报告为已更改。
$ hexvero compare examples/notesdesk-1.4.0.asar examples/notesdesk-1.5.0.asar webPreferences
webPreferences: 0 added, 0 removed, 2 changed, 2 unchanged · matched by file+windowName+key
~ main.js::win::nodeIntegration value: true → false
~ main.js::win::sandbox value: false → true
$ hexvero compare examples/notesdesk-1.4.0.asar examples/notesdesk-1.5.0.asar windows
windows: 0 added, 0 removed, 1 changed, 0 unchanged · matched by file+windowName
~ main.js::win nodeIntegration: true → false, nodeIntegrationInEffect: "on" → "off", sandbox: false → true, sandboxInEffect: "off" → "on"
$ hexvero compare examples/notesdesk-1.4.0.asar examples/notesdesk-1.5.0.asar contextBridge
contextBridge: 1 added, 1 removed, 0 changed, 5 unchanged · matched by api+member
+ notesdesk::checkUpdate
- notesdesk::openInShell
默认情况下不会忽略任何内容;仅在原生二进制文件中移动的代码会被计为 relocated。窗口通过其被赋值给的变量(win)进行匹配,因此添加一个窗口不会导致其他窗口错误配对。仅在一侧找到的项,只有在另一侧读取了该项所在文件时才会被标记为 added 或 removed;否则为 unknown(?)。
3. 让 AI 代理进行调查。 npx hexvero setup --apply 会将 MCP 服务器注册到它找到的编码代理(Claude Code、Codex、Cursor、VS Code 以及另外 14 个),而 npx hexvero setup --skill --apply 会安装一个技能,教授调查循环。然后代理打开一个目标,读取一个带有建议后续调用的小型初步答案,仅分页获取所需的列表,并为每个声明引用 file:line。目标内部的文本被视为数据,绝不视为指令;一个测试会在目标中植入此类文本以进行检查。参见 For AI agents。
confirmed 或 inferred,并携带解析器记录的文件和行号。limitations 说明哪些内容被跳过、截断或无法读取。部分结果会明确说明它是部分的,精确到列表的每一页。--continue 和 --all 读取其余部分,且不会重复读取任何内容。需要 Node.js 22.12 或更新版本。读取 SQLite 数据库需要 Node.js 22.13 或 24 及更新版本;在 22.12 上其他一切正常,SQLite 文件会被拒绝并给出相应提示。
npm install -g hexvero # the hexvero command
hexvero doctor # checks Node, node:sqlite and optional engines
或者无需安装直接运行:npx hexvero <command>。
此表中的所有内容仅靠 Node 即可工作。引擎在此基础上增加反汇编和反编译功能。