
バイナリまたはアプリバンドルの第一印象: エビデンスに基づく静的・非実行解析。CLI、15ツールのMCPサーバー、ローカルWeb UI、Nodeのみ。
English · Deutsch · Español · Français · Português (Brasil) · Русский · 中文 · 日本語 · 한국어
試してみる · ユースケース · インストール · 読み取るもの · CLI · Web UI · AI エージェント向け · エンジン · 制限 · REA との比較 · 仕組み · コントリビューション · FAQ
開発者と AI エージェントのための、高速でローカル、根拠に基づいたソフトウェアの第一印象。
hexvero は実行ファイル、Electron アプリ、APK、アーカイブ、データベース、ネットワークキャプチャを実行せずに読み取ります。ソフトウェアが何を含み、何を公開し、各事実がどこから読み取られたか、どれほど確かか、そして何を確定できなかったかを伝えます。1 つの CLI、コーディングエージェント向けの 1 つの MCP サーバー、1 つのローカル Web UI。何もあなたのマシンから出ません。

npx hexvero analyze ./MyApp.app/Contents/Resources/app.asar
Node.js 22.12 以降が必要なだけです。空の npm キャッシュから最初の結果を得るまで、ノートPCでコマンド1つと約9秒、ダウンロードも含めて完了しました。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. 2つのバージョンを比較する。 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 は、検出されたコーディングエージェント(Claude Code、Codex、Cursor、VS Code、その他14種類)にMCPサーバーを登録し、npx hexvero setup --skill --apply は調査ループを教えるスキルをインストールします。その後エージェントはターゲットを開き、提案された次の呼び出しとともに小さな最初の回答を読み、必要なリストだけをページングし、各主張に対して file:line を引用します。ターゲット内のテキストはデータとして扱われ、決して命令として扱われません。これを確認するために、テストではそのようなテキストをターゲットに仕込んでいます。詳細はAIエージェント向けを参照してください。