hexvero

io.github.maximilianfeix由 GitHub 帳號 maximilianfeix 發布v0.12.0更新於 Nov 1, 2026

Electron release diff for security review: what changed in IPC, contextBridge, windows and hosts.

已驗證STDIO僅桌面開發者工具安全與監控

概覽

AI 產生的概覽

靜態檢查本機軟體建置(多為 Electron 應用程式),讓助理比對兩個版本,查看 IPC、preload 橋接、視窗設定與網路主機有何變動。

可以做什麼
  • 開啟、列出與關閉本機檔案或目錄作為分析目標,回傳大小、雜湊與辨識出的格式
  • 依目標格式執行內建分析器,並分頁瀏覽符號、匯入、區段、IPC 通道、視窗、端點、發現項目等具名集合
  • 擷取帶標籤的字串,並讀取目標的有界十六進位區段
  • 將完整分析匯出為 JSON,或把打包模組與 source map 中的原始檔案還原到新目錄
  • 在兩個建置之間比對某個集合、透過 source map 將產生位置對應回原始位置,並對兩個建置套用發佈政策
  • 偵測選用的外部引擎,並執行反組譯、反編譯、交叉參照、呼叫圖等有界操作
適用情境
適合在審查 Electron 或其他封裝版本兩次建置之間有何變動時使用,也適合在不執行軟體的前提下稽核單一建置的風險模式。同樣適用於 CI 式發佈閘門,以及需要標明檔案與行號、並說明哪些結論無法確定的調查。
執行需求
透過 npx 以 stdio 在本機執行,需要 Node.js 22.12 或更新版本。未宣告驗證、環境變數或標頭。目標須使用絕對路徑;輸入可為 app.asar、macOS 的 .app、Windows 或 Linux 安裝目錄,或發佈的 zip,安裝檔需先解開。若已安裝 radare2/rizin、Ghidra 等外部引擎會被偵測到。
安裝前請注意
匯出與還原會在 hexvero 程序可寫入的任何位置寫入檔案,路徑需謹慎選擇。結論反映程式碼內容,而非執行時行為或可利用性,檢查通過並不等於安全結論。解析惡意檔案仍會處理攻擊者控制的位元組。透過雲端託管的助理使用時,所請求的結果會傳送給該助理的模型供應商。僅可用於你有權檢查的軟體。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 hexvero,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[hexvero logo: an amber H on charcoal]

hexvero

Know what changed inside your Electron release.

Diff two builds of an Electron app and see the IPC channels, preload bridge, window settings and network hosts that changed, with file and line on both sides.

[CI] [npm] [Node] [License]

Website · Try it · CI · AI agents · Comparison · Limits · Docs

English · Deutsch · Español · Français · Português (Brasil) · Русский · 中文 · 日本語 · 한국어


[30 seconds of real output: npx hexvero demo lists what changed between two builds of an example Electron app, including a new preload member with its preload and handler lines and an IPC channel reported as unknown; hexvero check fails the release policy with exit 3; then the local web UI opens the new member and the changed window with the source lines of both builds]

30 seconds of real output: a terminal recording and a browser recording, joined with a fade · mp4 · terminal: release-review-terminal.tape, UI: record-release-review.mjs

Try it in 10 seconds

bash
npx hexvero demo

Needs Node.js 22.12 or newer. It copies two builds of a small example app (NotesDesk 1.4.0 and 1.5.0) into ./hexvero-demo and shows what changed. Excerpt, … marks cuts:

text
What changed between notesdesk-1.4.0.asar and notesdesk-1.5.0.asar  Two builds of a small example Electron app, read statically. Nothing was executed.
  interfaces (2)    + preload.js::notesdesk::checkUpdate  @ b: preload.js:9, handler main.js:30 · link direct    - preload.js::notesdesk::openInShell  @ a: preload.js:9, handler main.js:30 · link direct  …  ipcChannels (2)    + update:check  @ b: receiver main.js:30, sender preload.js:9    ? shell:open  @ a: receiver main.js:30, sender preload.js:9        the other side has values there that could not be resolved  windows (1)    ~ main.js::win  @ b: main.js:8        nodeIntegration: true → false, nodeIntegrationInEffect: "on" → "off", sandbox: false → true  …  endpoints (1)    + main.js::fetch::https://updates.notesdesk.example/latest.json  @ b: main.js:30 · literal

? means hexvero could not tell, so shell:open is reported as unknown, not as removed. Then turn it into a gate:

text
$ npx hexvero check hexvero-demo/notesdesk-1.4.0.asar hexvero-demo/notesdesk-1.5.0.asar --policy hexvero-demo/policy.jsonhexvero check fail: the policy is violated  ✗ new-interface-member  notesdesk.checkUpdate  new · fail  ✗ new-external-host  updates.notesdesk.example  new · fail  …$ echo $?3

npx hexvero ui --demo --open shows the same comparison in a local web UI with the source lines of both builds side by side. The full tour: walkthrough.

Why

  • A release review asks what the update changed: which channels a page can now reach, which preload members appeared, which window got more permissive, which servers the code now calls.
  • A diff of the shipped bundle does not answer that. It is minified JavaScript inside an app.asar; running the app to find out is not always allowed, and a checklist scanner looks at one build, not the change.
  • hexvero answers it from the files: each change with the file and line it was read from in both builds, what it could not establish, and a policy that fails CI on a new member, host or more permissive window. Nothing is executed.

What it reads

IPC and bridge mapwindow → contextBridge member → IPC channel → ipcMain handler, with how each link was read
Window settingswebPreferences per window, and whether nodeIntegration and sandbox are in effect
Runtime and fusesElectron, Chromium and Node versions, fuses and the ASAR integrity record, read from packaged binaries
Hosts and storagenetwork endpoints and localStorage/sessionStorage keys, literal or inferred
CI gate and SARIFhexvero check: exit 0 pass, 3 violated, 4 not decidable; baseline, suppressions, SARIF 2.1.0
MCP for agents16 tools with small paged answers, so a coding agent can run the same review
Local web UIthe comparison with both builds' source lines side by side, plus an offline HTML report

Inputs: an app.asar, a macOS .app, a Windows or Linux install directory, or the release .zip you publish. Installers (.dmg, setup .exe, AppImage) need unpacking first. Per-platform paths: docs/cli.md.

On your own app

bash
npx hexvero compare old/YourApp.app new/YourApp.app --report report.html   # one offline HTML pagenpx hexvero init old/YourApp.app                                            # starting policy, current hosts allowednpx hexvero check old/YourApp.app new/YourApp.app --policy .hexvero/policy.json

To accept what is there today, add --baseline .hexvero/baseline.json --update-baseline once; later runs fail only on new findings.

One build instead of two, with the single-build checks known from Electronegativity (CSP, shell.openExternal, permission handlers, window settings, certificate and command-line switches):

bash
npx hexvero audit YourApp.app --format sarif > audit.sarif   # exit 3 when a rule is violated

Use it in CI

Pinned to a version so a release cannot change your results unannounced:

yaml
jobs:  hexvero:    runs-on: ubuntu-latest    permissions:      contents: read    steps:      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7        with:          persist-credentials: false      - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7        with:          node-version: 24      # Build your app and fetch the previous release here, e.g. into previous/ and dist/.      - run: npx --yes [email protected] check previous/app.asar dist/app.asar --policy .hexvero/policy.json

Baseline, Markdown job summary and a least-privilege SARIF upload for code scanning: docs/ci.md.

For AI agents

In Claude Code, server and skill come as one plugin:

text
/plugin marketplace add maximilianfeix/hexvero/plugin install hexvero@hexvero

Elsewhere, npx hexvero setup --apply registers the MCP server with the coding agents it finds (dry run without --apply), or run npx -y [email protected] mcp over stdio. Text inside the target is treated as data, never as instructions. Clients, tools and what an agent receives: docs/mcp.md.

How it compares

hexveroElectronegativityREAdiff of two bundles
Built forwhat changed between two buildsknown risky patterns in one buildbroad reverse engineering, static and dynamicany text change
Compares two builds of one appyes, list by listno (one build; checks between Electron versions)yes (compare_application_versions)yes, minified bytes
Bridge member → IPC channel, blind holdout265 of 78not measured6 of 66no
Release policy with CI exit codesyes (0/3/4, SARIF)SARIF outputnot comparedno
CSP, shell.openExternal, permission handlersyes, hexvero audit (0.12)yesnot comparedno
Statusactive, MITarchived 2026-10-24, last release 2023activen/a

Electronegativity was archived on 2026-10-24. hexvero audit <build> runs part of its single-build checks with the same exit codes and SARIF as check; which checks are covered and which are not is listed in the migration page. REA does much that hexvero does not (dynamic analysis, devices, decompilers); use it for that. Sources, dates and every caveat: docs/comparison.md.

Accuracy and limits

On the newest blind set, written by someone without access to hexvero, it found 52 of 64 IPC channels with none false, and it misses and misreports rows in other lists (all numbers). On real releases it is checked against the source (GitHub Desktop 3.6.7 → 3.6.10, Electron Fiddle 0.38 → 0.39), misses included. It reads files and never runs them, so a finding is what the code contains, not what it does at run time or whether it is exploitable; a passing check is not a security verdict. Parsing a hostile file still processes attacker-controlled bytes, within size, depth and time limits. The full list: docs/accuracy.md.

Docs

Walkthrough · CLI · CI · MCP · Policy schema · Electron rules and sources · Accuracy · Benchmarks · Other formats (native binaries, APK, WebAssembly and more) · Changelog

FAQ: does it run or upload my files?

No. Targets are parsed as bytes; nothing is executed. The UI binds to 127.0.0.1 with a per-session token. There is no telemetry and no network call in the code base. Through a cloud-hosted agent, the results that agent requests go to its model provider like any other tool output. Use hexvero only on software you may examine (DISCLAIMER.md).

Contributing

bash
npm install && npm run check      # typecheck, lint, format, unit tests, shape rulesnpm run e2e                       # the user flows on real inputs

Rules in CONTRIBUTING.md; good first issue is sized for an afternoon. Found a wrong or missing fact? Open a bug report with hexvero doctor output and, if you can, the file.

If hexvero showed you something you would have missed in a release, a ⭐ helps the next Electron team find it.

License

MIT

來源:README.md,提交 12626b3

工具

16

hexvero_open

Open target

Register a local file or directory for analysis. Returns its id, size, hash and detected format. Ids are stable per content.

輸入參數path必填

hexvero_list

List targets

List targets opened in this session.

無需輸入參數。

hexvero_close

Close target

Release a target and its retained analysis.

輸入參數targetId必填

hexvero_analyze

Analyze target

Run the built-in analyzer for the target's format (ELF/PE/Mach-O, Go, .NET, WASM, EVM, SQLite, plist, APK, ZIP, Electron ASAR, JavaScript apps, source maps, HAR). Returns a summary, findings with confidence, limitations, a compact overview and the collections available for paging. Large JavaScript apps are read in batches: when `complete` is false, `coverage` says how many files are unread and every list covers the scanned part only; call again with scan to read more.

輸入參數scanbatchfreshdetailincludetargetId必填

hexvero_collection

Page a collection

Page through one named list from the analysis, e.g. symbols, imports, exports, sections, libraries, types, methods, pinvokes, selectors, instructions, tables, columns, requests, endpoints, permissions, components, modules, edges, ipcChannels, findings. Use hexvero_analyze to see which exist.

輸入參數textlimitoffsetmaxBytestargetId必填collection必填

hexvero_strings

Strings

Printable ASCII (and optional UTF-16LE) strings with offsets and tags (url, path, email, ip, format, secret-ish, base64-ish).

輸入參數tagtextlimitutf16offsetmaxBytestargetId必填minLength

hexvero_bytes

Read bytes

Read a bounded window (max 64 KiB) of the target as hex plus an ASCII gutter.

輸入參數length必填offset必填targetId必填

hexvero_export

Export analysis

Write the complete analysis as JSON to a file and return its path and size. Use this instead of paging when you need everything.

輸入參數path必填targetId必填overwrite

hexvero_recover

Recover sources

Write recoverable sources into a new directory: the modules of a webpack/Rspack/browserify/esbuild bundle (one file each plus hexvero-bundle.json with requires/exports), or the original files embedded in a source map (sourcesContent). No engine needed; nothing is executed.

輸入參數targetId必填outputDir必填

hexvero_unknowns

Unknowns ledger

Record a material question the investigation could not answer (with what was already checked), list open or resolved unknowns, or resolve one. Unknowns are exported with the analysis so reports never silently drop them.

輸入參數idlimitaction必填offsetstatuscheckedquestiontargetIdresolution

hexvero_compare

Compare collections

Diff one collection between two targets: added, removed, changed (with the fields that differ) and unchanged items, matched by key (auto-detected: name, channel, id, path, url, type+name … or pass key, a+b for composites). States completeness; unknown items are neither added nor removed. Each list pages on its own (list + offset). Without collection: counts per shared collection, to pick one.

輸入參數keylistlimitignoreoffsetstricttargetA必填targetB必填collection

hexvero_check

Check release policy

Apply a release policy (inline JSON or file) to two builds, as `hexvero check`: status pass, fail or incomplete, and findings paged by offset. Reads a baseline, never writes one.

輸入參數limitformatoffsetpolicytargetA必填targetB必填policyPathbaselinePath

hexvero_sourcemap

Resolve source map position

Map a generated line/column of a source map target back to its original source, line, column and name.

輸入參數line必填column必填targetId必填

hexvero_providers

Providers

Detect optional external engines (radare2/rizin, Ghidra) and the operations each supports.

無需輸入參數。

hexvero_provider_run

Run provider operation

Run one engine operation on a target: functions, disassemble, decompile, strings, imports, xrefs (references to an address), callers, callees, callgraph or search (names + strings). Output is bounded and cached.

輸入參數textaddressprovider必填targetId必填operation必填timeoutMs

hexvero_call_graph

Call graph

Bounded call-graph neighborhood around a function (callers, callees or both, by depth and node count), or the shortest call path from root to goal. One engine run per target, cached; levels state what was cut.

輸入參數goalroot必填maxDepthmaxNodesprovider必填targetId必填directiontimeoutMs

版本歷史

11
  1. v0.12.0最新Oct 25, 2026
  2. v0.11.1Oct 18, 2026
  3. v0.10.1Oct 18, 2026
  4. v0.9.8Oct 18, 2026
  5. v0.9.6Oct 17, 2026
  6. v0.9.1Oct 17, 2026
  7. v0.9.0Oct 17, 2026
  8. v0.8.0Oct 16, 2026
  9. v0.7.5Oct 15, 2026
  10. v0.6.2Oct 15, 2026
  11. v0.4.0Oct 14, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分