
Первый взгляд на бинарный файл или пакет приложения: статический анализ без выполнения с доказательствами. CLI, MCP-сервер с 15 инструментами и локальный веб-интерфейс, только Node.
English · Deutsch · Español · Français · Português (Brasil) · Русский · 中文 · 日本語 · 한국어
Попробовать · Сценарии использования · Установка · Что он читает · CLI · Веб-интерфейс · Для ИИ-агентов · Движки · Ограничения · Сравнение с REA · Как это работает · Участие в разработке · FAQ
Быстрый локальный первый взгляд на программное обеспечение, подкреплённый доказательствами, для разработчиков и ИИ-агентов.
hexvero читает исполняемые файлы, приложения Electron, APK, архивы, базы данных и сетевые захваты без их запуска. Он сообщает, что содержит программное обеспечение, что оно предоставляет, откуда был прочитан каждый факт, насколько он достоверен и что установить не удалось. Один CLI, один MCP-сервер для агентов программирования, один локальный веб-интерфейс. Ничего не покидает вашу машину.

npx hexvero analyze ./MyApp.app/Contents/Resources/app.asar
Node.js 22.12 или новее — это всё, что нужно. Из пустого кэша npm первый результат занял одну команду и около девяти секунд на ноутбуке, включая загрузку. Реальный запуск на небольшом приложении Electron в examples/:
$ 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 и указывает, что из них следует в совокупности; значение, опирающееся на значение по умолчанию Electron для версии в package.json, помечается 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