
बाइनरी या ऐप बंडल पर पहली नज़र: साक्ष्य के साथ स्थिर, निष्पादन-रहित विश्लेषण। CLI, 15-टूल MCP सर्वर और स्थानीय वेब UI, केवल Node।
English · Deutsch · Español · Français · Português (Brasil) · Русский · 中文 · 日本語 · 한국어
आज़माएँ · उपयोग के मामले · इंस्टॉल करें · यह क्या पढ़ता है · CLI · वेब UI · AI एजेंट के लिए · इंजन · सीमाएँ · REA से तुलना · यह कैसे काम करता है · योगदान · सामान्य प्रश्न
डेवलपर्स और AI एजेंट के लिए, सॉफ़्टवेयर पर एक तेज़, स्थानीय, साक्ष्य-आधारित पहली नज़र।
hexvero एक्ज़ीक्यूटेबल्स, Electron ऐप्स, APKs, आर्काइव्स, डेटाबेस और नेटवर्क कैप्चर को उन्हें चलाए बिना पढ़ता है। यह आपको बताता है कि सॉफ़्टवेयर में क्या है, यह क्या उजागर करता है, प्रत्येक तथ्य कहाँ से पढ़ा गया, यह कितना निश्चित है, और यह क्या स्थापित नहीं कर सका। एक CLI, कोडिंग एजेंट के लिए एक MCP सर्वर, एक स्थानीय वेब 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 (?) होती है।