@jshookmcp/jshook 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -5
- package/README.zh.md +18 -3
- package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
- package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
- package/dist/packages/extension-sdk/src/plugin.js +119 -33
- package/dist/packages/extension-sdk/src/workflow.d.ts +156 -0
- package/dist/packages/extension-sdk/src/workflow.js +236 -0
- package/dist/src/config/search-defaults.js +161 -0
- package/dist/src/constants.d.ts +3 -0
- package/dist/src/constants.js +4 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +13 -17
- package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
- package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
- package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
- package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
- package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
- package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
- package/dist/src/modules/analyzer/PatternDetector.js +3 -3
- package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
- package/dist/src/modules/browser/BrowserDiscovery.js +2 -2
- package/dist/src/modules/browser/BrowserModeManager.js +11 -10
- package/dist/src/modules/browser/TabRegistry.js +2 -2
- package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
- package/dist/src/modules/browser/UnifiedBrowserManager.js +18 -3
- package/dist/src/modules/captcha/AICaptchaDetector.d.ts +1 -10
- package/dist/src/modules/captcha/AICaptchaDetector.js +7 -201
- package/dist/src/modules/collector/CodeCollector.js +4 -5
- package/dist/src/modules/collector/DOMInspector.js +48 -58
- package/dist/src/modules/collector/PageController.d.ts +17 -4
- package/dist/src/modules/collector/PageController.js +2 -5
- package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
- package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
- package/dist/src/modules/crypto/CryptoDetector.js +2 -42
- package/dist/src/modules/crypto/CryptoRules.js +1 -1
- package/dist/src/modules/debugger/BlackboxManager.js +1 -1
- package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
- package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +4 -2
- package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
- package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
- package/dist/src/modules/deobfuscator/Deobfuscator.js +4 -39
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +1 -2
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +3 -55
- package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
- package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
- package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
- package/dist/src/modules/deobfuscator/webcrack.js +15 -2
- package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
- package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
- package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
- package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
- package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
- package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
- package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
- package/dist/src/modules/external/ExternalToolRunner.js +25 -22
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.compose.js +5 -5
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.network.js +311 -311
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.runtime.js +410 -410
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.storage.js +122 -122
- package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
- package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
- package/dist/src/modules/monitor/ConsoleMonitor.impl.core.dynamic.js +194 -194
- package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
- package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
- package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
- package/dist/src/modules/monitor/PlaywrightNetworkMonitor.js +62 -62
- package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
- package/dist/src/modules/process/LinuxProcessManager.js +2 -0
- package/dist/src/modules/process/MacProcessManager.js +25 -25
- package/dist/src/modules/process/MemoryManager.d.ts +1 -1
- package/dist/src/modules/process/MemoryManager.js +2 -2
- package/dist/src/modules/process/memory/AuditTrail.js +1 -1
- package/dist/src/modules/process/memory/availability.js +49 -49
- package/dist/src/modules/process/memory/injector.js +185 -185
- package/dist/src/modules/process/memory/reader.js +85 -53
- package/dist/src/modules/process/memory/regions.dump.js +51 -51
- package/dist/src/modules/process/memory/regions.enumerate.js +108 -108
- package/dist/src/modules/process/memory/regions.modules.js +80 -80
- package/dist/src/modules/process/memory/regions.protection.js +148 -115
- package/dist/src/modules/process/memory/scanner.d.ts +5 -1
- package/dist/src/modules/process/memory/scanner.darwin.js +98 -41
- package/dist/src/modules/process/memory/scanner.js +88 -4
- package/dist/src/modules/process/memory/scanner.windows.js +124 -124
- package/dist/src/modules/process/memory/writer.js +98 -58
- package/dist/src/modules/security/ExecutionSandbox.js +51 -52
- package/dist/src/modules/stealth/FingerprintManager.js +1 -1
- package/dist/src/modules/stealth/StealthScripts.d.ts +1 -0
- package/dist/src/modules/stealth/StealthScripts.js +18 -13
- package/dist/src/modules/stealth/StealthVerifier.js +1 -3
- package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
- package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
- package/dist/src/modules/trace/TraceDB.js +75 -69
- package/dist/src/modules/trace/TraceRecorder.js +1 -5
- package/dist/src/native/AntiCheatDetector.js +67 -16
- package/dist/src/native/CodeInjector.js +3 -3
- package/dist/src/native/HardwareBreakpoint.js +24 -15
- package/dist/src/native/HeapAnalyzer.js +2 -2
- package/dist/src/native/MemoryController.js +1 -1
- package/dist/src/native/MemoryScanSession.js +2 -2
- package/dist/src/native/MemoryScanner.js +4 -8
- package/dist/src/native/NativeMemoryManager.impl.js +2 -2
- package/dist/src/native/PEAnalyzer.js +14 -15
- package/dist/src/native/PointerChainEngine.js +2 -4
- package/dist/src/native/ScriptLoader.js +4 -9
- package/dist/src/native/Speedhack.js +1 -1
- package/dist/src/native/StructureAnalyzer.js +52 -33
- package/dist/src/native/Win32API.d.ts +1 -0
- package/dist/src/native/Win32API.js +13 -0
- package/dist/src/native/Win32Debug.js +19 -19
- package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
- package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
- package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
- package/dist/src/server/MCPServer.context.d.ts +2 -1
- package/dist/src/server/MCPServer.d.ts +2 -1
- package/dist/src/server/MCPServer.domain.d.ts +1 -1
- package/dist/src/server/MCPServer.domain.js +81 -16
- package/dist/src/server/MCPServer.js +41 -14
- package/dist/src/server/MCPServer.resources.d.ts +2 -0
- package/dist/src/server/MCPServer.resources.js +91 -0
- package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
- package/dist/src/server/MCPServer.search.helpers.js +1 -1
- package/dist/src/server/MCPServer.transport.js +12 -0
- package/dist/src/server/ToolCallContextGuard.js +8 -0
- package/dist/src/server/ToolRouter.d.ts +25 -9
- package/dist/src/server/ToolRouter.intent.d.ts +26 -0
- package/dist/src/server/ToolRouter.intent.js +77 -0
- package/dist/src/server/ToolRouter.js +103 -284
- package/dist/src/server/ToolRouter.policy.d.ts +22 -0
- package/dist/src/server/ToolRouter.policy.js +163 -0
- package/dist/src/server/ToolRouter.probe.d.ts +17 -0
- package/dist/src/server/ToolRouter.probe.js +103 -0
- package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
- package/dist/src/server/ToolRouter.renderer.js +52 -0
- package/dist/src/server/activation/ActivationController.js +15 -12
- package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
- package/dist/src/server/activation/PredictiveBooster.js +1 -3
- package/dist/src/server/domains/analysis/definitions.js +155 -655
- package/dist/src/server/domains/analysis/handlers.impl.js +26 -20
- package/dist/src/server/domains/analysis/handlers.web-tools.js +2 -1
- package/dist/src/server/domains/analysis/manifest.js +6 -4
- package/dist/src/server/domains/antidebug/definitions.js +25 -111
- package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
- package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
- package/dist/src/server/domains/browser/definitions.tools.page-core.js +210 -439
- package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
- package/dist/src/server/domains/browser/definitions.tools.runtime.js +98 -211
- package/dist/src/server/domains/browser/definitions.tools.security.js +194 -339
- package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
- package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
- package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
- package/dist/src/server/domains/browser/handlers/framework-state.js +27 -9
- package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
- package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
- package/dist/src/server/domains/browser/handlers.impl.d.ts +1 -2
- package/dist/src/server/domains/browser/handlers.impl.js +2 -3
- package/dist/src/server/domains/browser/manifest.js +37 -13
- package/dist/src/server/domains/coordination/definitions.js +50 -216
- package/dist/src/server/domains/coordination/index.d.ts +2 -1
- package/dist/src/server/domains/coordination/index.js +1 -0
- package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
- package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
- package/dist/src/server/domains/debugger/manifest.js +9 -2
- package/dist/src/server/domains/encoding/definitions.js +43 -153
- package/dist/src/server/domains/encoding/handlers.base.js +2 -2
- package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
- package/dist/src/server/domains/evidence/definitions.js +42 -0
- package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
- package/dist/src/server/domains/evidence/handlers.js +60 -0
- package/dist/src/server/domains/evidence/index.d.ts +2 -0
- package/dist/src/server/domains/evidence/index.js +2 -0
- package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
- package/dist/src/server/domains/evidence/manifest.js +78 -0
- package/dist/src/server/domains/graphql/definitions.js +53 -141
- package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
- package/dist/src/server/domains/graphql/handlers.impl.core.runtime.shared.js +77 -77
- package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
- package/dist/src/server/domains/hooks/ai-handlers.js +1 -67
- package/dist/src/server/domains/hooks/definitions.js +69 -335
- package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
- package/dist/src/server/domains/hooks/manifest.js +1 -2
- package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
- package/dist/src/server/domains/instrumentation/definitions.js +99 -0
- package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
- package/dist/src/server/domains/instrumentation/handlers.js +206 -0
- package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
- package/dist/src/server/domains/instrumentation/index.js +2 -0
- package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
- package/dist/src/server/domains/instrumentation/manifest.js +114 -0
- package/dist/src/server/domains/macro/definitions.js +16 -43
- package/dist/src/server/domains/maintenance/definitions.js +60 -219
- package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
- package/dist/src/server/domains/memory/definitions.js +387 -559
- package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
- package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
- package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
- package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
- package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
- package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
- package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
- package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
- package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
- package/dist/src/server/domains/memory/handlers/scan.js +97 -0
- package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
- package/dist/src/server/domains/memory/handlers/session.js +49 -0
- package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
- package/dist/src/server/domains/memory/handlers/structure.js +74 -0
- package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
- package/dist/src/server/domains/memory/handlers.impl.js +63 -494
- package/dist/src/server/domains/memory/manifest.js +236 -64
- package/dist/src/server/domains/native-bridge/definitions.js +54 -192
- package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
- package/dist/src/server/domains/native-bridge/index.js +2 -1
- package/dist/src/server/domains/network/auth-extractor.js +1 -1
- package/dist/src/server/domains/network/definitions.js +175 -578
- package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
- package/dist/src/server/domains/network/handlers.base.core.js +623 -0
- package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
- package/dist/src/server/domains/network/handlers.base.js +3 -878
- package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
- package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
- package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
- package/dist/src/server/domains/network/handlers.base.types.js +89 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
- package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
- package/dist/src/server/domains/network/manifest.js +15 -0
- package/dist/src/server/domains/network/replay.js +1 -4
- package/dist/src/server/domains/platform/definitions.js +121 -112
- package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +4 -0
- package/dist/src/server/domains/platform/handlers/bridge-handlers.js +193 -4
- package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
- package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
- package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
- package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
- package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
- package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
- package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
- package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
- package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
- package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +3 -3
- package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
- package/dist/src/server/domains/platform/handlers.d.ts +48 -0
- package/dist/src/server/domains/platform/handlers.js +29 -0
- package/dist/src/server/domains/platform/manifest.js +38 -0
- package/dist/src/server/domains/process/definitions.js +163 -647
- package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
- package/dist/src/server/domains/process/handlers.base.js +7 -462
- package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
- package/dist/src/server/domains/process/handlers.base.process.js +417 -0
- package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
- package/dist/src/server/domains/process/handlers.base.types.js +50 -0
- package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +18 -16
- package/dist/src/server/domains/process/manifest.js +6 -1
- package/dist/src/server/domains/sandbox/definitions.js +11 -33
- package/dist/src/server/domains/sandbox/handlers.js +8 -3
- package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
- package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
- package/dist/src/server/domains/shared/modules.d.ts +0 -2
- package/dist/src/server/domains/shared/modules.js +0 -1
- package/dist/src/server/domains/sourcemap/definitions.js +27 -111
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
- package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
- package/dist/src/server/domains/sourcemap/manifest.js +1 -1
- package/dist/src/server/domains/streaming/definitions.js +36 -148
- package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
- package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
- package/dist/src/server/domains/trace/TraceSummarizer.js +8 -5
- package/dist/src/server/domains/trace/definitions.tools.js +51 -206
- package/dist/src/server/domains/trace/handlers.js +10 -12
- package/dist/src/server/domains/trace/index.d.ts +2 -1
- package/dist/src/server/domains/trace/index.js +2 -1
- package/dist/src/server/domains/trace/manifest.js +15 -3
- package/dist/src/server/domains/transform/definitions.js +50 -210
- package/dist/src/server/domains/transform/handlers.impl.transform-base.js +108 -108
- package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
- package/dist/src/server/domains/transform/manifest.d.ts +1 -1
- package/dist/src/server/domains/transform/manifest.js +1 -1
- package/dist/src/server/domains/wasm/definitions.js +55 -232
- package/dist/src/server/domains/wasm/handlers.js +1 -1
- package/dist/src/server/domains/workflow/definitions.js +144 -414
- package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +1 -1
- package/dist/src/server/domains/workflow/handlers.impl.workflow-api.js +51 -51
- package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
- package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
- package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
- package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
- package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
- package/dist/src/server/evidence/index.d.ts +2 -0
- package/dist/src/server/evidence/index.js +1 -0
- package/dist/src/server/evidence/types.d.ts +22 -0
- package/dist/src/server/evidence/types.js +1 -0
- package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
- package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
- package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
- package/dist/src/server/extensions/ExtensionManager.js +193 -40
- package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
- package/dist/src/server/extensions/ExtensionManager.roots.js +4 -4
- package/dist/src/server/extensions/plugin-config.js +1 -1
- package/dist/src/server/extensions/plugin-env.d.ts +1 -1
- package/dist/src/server/extensions/plugin-env.js +10 -4
- package/dist/src/server/extensions/types.d.ts +17 -0
- package/dist/src/server/extensions/types.js +1 -1
- package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
- package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
- package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
- package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
- package/dist/src/server/instrumentation/index.d.ts +2 -0
- package/dist/src/server/instrumentation/index.js +2 -0
- package/dist/src/server/instrumentation/types.d.ts +62 -0
- package/dist/src/server/instrumentation/types.js +7 -0
- package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
- package/dist/src/server/macros/MacroConfigLoader.js +61 -59
- package/dist/src/server/macros/MacroRunner.js +6 -2
- package/dist/src/server/macros/builtins/index.d.ts +2 -3
- package/dist/src/server/macros/builtins/index.js +51 -7
- package/dist/src/server/plugins/PluginContract.d.ts +1 -1
- package/dist/src/server/registry/contracts.d.ts +1 -1
- package/dist/src/server/registry/discovery.js +5 -4
- package/dist/src/server/registry/ensure-browser-core.js +0 -3
- package/dist/src/server/registry/index.js +4 -4
- package/dist/src/server/registry/tool-builder.d.ts +46 -0
- package/dist/src/server/registry/tool-builder.js +105 -0
- package/dist/src/server/sandbox/QuickJSSandbox.js +16 -5
- package/dist/src/server/sandbox/SandboxHelpers.js +250 -250
- package/dist/src/server/search/EmbeddingWorker.js +5 -3
- package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
- package/dist/src/server/search/FeedbackTracker.js +26 -0
- package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
- package/dist/src/server/search/QueryNormalizer.js +94 -0
- package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
- package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
- package/dist/src/server/workflows/WorkflowContract.d.ts +24 -0
- package/dist/src/server/workflows/WorkflowContract.js +12 -0
- package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
- package/dist/src/server/workflows/WorkflowEngine.js +136 -3
- package/dist/src/types/config.d.ts +0 -14
- package/dist/src/types/deobfuscator.d.ts +0 -1
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/utils/DetailedDataManager.js +2 -0
- package/dist/src/utils/RingBuffer.js +5 -5
- package/dist/src/utils/TokenBudgetManager.js +1 -1
- package/dist/src/utils/UnifiedCacheManager.js +1 -1
- package/dist/src/utils/artifactRetention.js +2 -2
- package/dist/src/utils/betterSqlite3.d.ts +11 -0
- package/dist/src/utils/betterSqlite3.js +88 -0
- package/dist/src/utils/browserExecutable.js +2 -2
- package/dist/src/utils/cliFastPath.js +5 -8
- package/dist/src/utils/config.js +4 -26
- package/dist/src/utils/environmentDoctor.js +138 -11
- package/dist/src/utils/outputPaths.js +16 -9
- package/dist/src/utils/parallel.js +1 -3
- package/package.json +74 -72
- package/workflows/.gitkeep +0 -0
- package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
- package/dist/src/modules/analyzer/AISummarizer.js +0 -122
- package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
- package/dist/src/modules/hook/AIHookGenerator.js +0 -360
- package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
- package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
- package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
- package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
- package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
- package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
- package/dist/src/services/LLMService.d.ts +0 -37
- package/dist/src/services/LLMService.js +0 -233
- package/dist/src/services/prompts/analysis.d.ts +0 -9
- package/dist/src/services/prompts/analysis.js +0 -158
- package/dist/src/services/prompts/crypto.d.ts +0 -2
- package/dist/src/services/prompts/crypto.js +0 -108
- package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
- package/dist/src/services/prompts/deobfuscation.js +0 -300
- package/dist/src/services/prompts/environment.d.ts +0 -16
- package/dist/src/services/prompts/environment.js +0 -372
- package/dist/src/services/prompts/intelligence.d.ts +0 -4
- package/dist/src/services/prompts/intelligence.js +0 -250
- package/dist/src/services/prompts/taint.d.ts +0 -2
- package/dist/src/services/prompts/taint.js +0 -54
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { ScriptManager } from '../../domains/shared/modules.js';
|
|
2
2
|
import { WorkerPool } from '../../../utils/WorkerPool.js';
|
|
3
3
|
import { TRANSFORM_WORKER_TIMEOUT_MS, TRANSFORM_CRYPTO_POOL_MAX_WORKERS, TRANSFORM_CRYPTO_POOL_IDLE_TIMEOUT_MS, TRANSFORM_CRYPTO_POOL_MAX_OLD_GEN_MB, TRANSFORM_CRYPTO_POOL_MAX_YOUNG_GEN_MB, } from '../../../constants.js';
|
|
4
|
+
function extractLastSegment(value) {
|
|
5
|
+
const normalized = value.startsWith('window.') ? value.slice(7) : value;
|
|
6
|
+
const parts = normalized.split('.').filter(Boolean);
|
|
7
|
+
return parts.length > 0 ? parts[parts.length - 1] : '';
|
|
8
|
+
}
|
|
4
9
|
const SUPPORTED_TRANSFORMS = [
|
|
5
10
|
'constant_fold',
|
|
6
11
|
'string_decrypt',
|
|
@@ -31,98 +36,98 @@ export const CRYPTO_KEYWORDS = [
|
|
|
31
36
|
'aes',
|
|
32
37
|
'rsa',
|
|
33
38
|
];
|
|
34
|
-
const CRYPTO_TEST_WORKER_SCRIPT = `
|
|
35
|
-
const __bootstrap = async () => {
|
|
36
|
-
const [workerThreads, vm, perfHooks] = await Promise.all([
|
|
37
|
-
import('node:worker_threads'),
|
|
38
|
-
import('node:vm'),
|
|
39
|
-
import('node:perf_hooks'),
|
|
40
|
-
]);
|
|
41
|
-
|
|
42
|
-
const parentPort = workerThreads.parentPort;
|
|
43
|
-
const performance = perfHooks.performance;
|
|
44
|
-
|
|
45
|
-
if (!parentPort) {
|
|
46
|
-
throw new Error('worker parentPort is unavailable');
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function normalizeOutput(value) {
|
|
50
|
-
if (value === undefined) return '__undefined__';
|
|
51
|
-
if (value === null) return 'null';
|
|
52
|
-
if (typeof value === 'string') return value;
|
|
53
|
-
if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') return String(value);
|
|
54
|
-
try { return JSON.stringify(value); } catch { return String(value); }
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
parentPort.on('message', async (msg) => {
|
|
58
|
-
const { jobId, payload } = msg;
|
|
59
|
-
try {
|
|
60
|
-
const { code, functionName, testInputs } = payload;
|
|
61
|
-
const sandbox = {
|
|
62
|
-
console: { log() {}, warn() {}, error() {} },
|
|
63
|
-
Buffer,
|
|
64
|
-
TextEncoder,
|
|
65
|
-
TextDecoder,
|
|
66
|
-
atob: (v) => Buffer.from(String(v), 'base64').toString('binary'),
|
|
67
|
-
btoa: (v) => Buffer.from(String(v), 'binary').toString('base64'),
|
|
68
|
-
};
|
|
69
|
-
sandbox.globalThis = sandbox;
|
|
70
|
-
const context = vm.createContext(sandbox);
|
|
71
|
-
|
|
72
|
-
const isValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(functionName);
|
|
73
|
-
const bindCode = isValidIdentifier
|
|
74
|
-
? "\\n;globalThis.__targetFn = (typeof " + functionName + " !== 'undefined' ? " + functionName + " : globalThis[" + JSON.stringify(functionName) + "]);"
|
|
75
|
-
: "\\n;globalThis.__targetFn = globalThis[" + JSON.stringify(functionName) + "];";
|
|
76
|
-
|
|
77
|
-
const script = new vm.Script(code + bindCode, { timeout: 5000 });
|
|
78
|
-
script.runInContext(context, { timeout: 5000 });
|
|
79
|
-
|
|
80
|
-
const targetFn = context.__targetFn;
|
|
81
|
-
if (typeof targetFn !== 'function') {
|
|
82
|
-
throw new Error("Function not found or not callable: " + functionName);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const rows = [];
|
|
86
|
-
for (const input of testInputs) {
|
|
87
|
-
const started = performance.now();
|
|
88
|
-
try {
|
|
89
|
-
const raw = targetFn(input);
|
|
90
|
-
const resolved = raw && typeof raw.then === 'function' ? await raw : raw;
|
|
91
|
-
rows.push({
|
|
92
|
-
input,
|
|
93
|
-
output: normalizeOutput(resolved),
|
|
94
|
-
duration: Number((performance.now() - started).toFixed(3)),
|
|
95
|
-
});
|
|
96
|
-
} catch (err) {
|
|
97
|
-
rows.push({
|
|
98
|
-
input,
|
|
99
|
-
output: '',
|
|
100
|
-
error: err && err.message ? err.message : String(err),
|
|
101
|
-
duration: Number((performance.now() - started).toFixed(3)),
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
parentPort.postMessage({ jobId, ok: true, result: { ok: true, results: rows } });
|
|
107
|
-
} catch (error) {
|
|
108
|
-
parentPort.postMessage({
|
|
109
|
-
jobId,
|
|
110
|
-
ok: true,
|
|
111
|
-
result: {
|
|
112
|
-
ok: false,
|
|
113
|
-
error: error && error.message ? error.message : String(error),
|
|
114
|
-
results: [],
|
|
115
|
-
},
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
__bootstrap().catch((error) => {
|
|
122
|
-
if (typeof console !== 'undefined' && typeof console.error === 'function') {
|
|
123
|
-
console.error('crypto harness worker bootstrap failed:', error && error.message ? error.message : String(error));
|
|
124
|
-
}
|
|
125
|
-
});
|
|
39
|
+
const CRYPTO_TEST_WORKER_SCRIPT = `
|
|
40
|
+
const __bootstrap = async () => {
|
|
41
|
+
const [workerThreads, vm, perfHooks] = await Promise.all([
|
|
42
|
+
import('node:worker_threads'),
|
|
43
|
+
import('node:vm'),
|
|
44
|
+
import('node:perf_hooks'),
|
|
45
|
+
]);
|
|
46
|
+
|
|
47
|
+
const parentPort = workerThreads.parentPort;
|
|
48
|
+
const performance = perfHooks.performance;
|
|
49
|
+
|
|
50
|
+
if (!parentPort) {
|
|
51
|
+
throw new Error('worker parentPort is unavailable');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function normalizeOutput(value) {
|
|
55
|
+
if (value === undefined) return '__undefined__';
|
|
56
|
+
if (value === null) return 'null';
|
|
57
|
+
if (typeof value === 'string') return value;
|
|
58
|
+
if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') return String(value);
|
|
59
|
+
try { return JSON.stringify(value); } catch { return String(value); }
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
parentPort.on('message', async (msg) => {
|
|
63
|
+
const { jobId, payload } = msg;
|
|
64
|
+
try {
|
|
65
|
+
const { code, functionName, testInputs } = payload;
|
|
66
|
+
const sandbox = {
|
|
67
|
+
console: { log() {}, warn() {}, error() {} },
|
|
68
|
+
Buffer,
|
|
69
|
+
TextEncoder,
|
|
70
|
+
TextDecoder,
|
|
71
|
+
atob: (v) => Buffer.from(String(v), 'base64').toString('binary'),
|
|
72
|
+
btoa: (v) => Buffer.from(String(v), 'binary').toString('base64'),
|
|
73
|
+
};
|
|
74
|
+
sandbox.globalThis = sandbox;
|
|
75
|
+
const context = vm.createContext(sandbox);
|
|
76
|
+
|
|
77
|
+
const isValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(functionName);
|
|
78
|
+
const bindCode = isValidIdentifier
|
|
79
|
+
? "\\n;globalThis.__targetFn = (typeof " + functionName + " !== 'undefined' ? " + functionName + " : globalThis[" + JSON.stringify(functionName) + "]);"
|
|
80
|
+
: "\\n;globalThis.__targetFn = globalThis[" + JSON.stringify(functionName) + "];";
|
|
81
|
+
|
|
82
|
+
const script = new vm.Script(code + bindCode, { timeout: 5000 });
|
|
83
|
+
script.runInContext(context, { timeout: 5000 });
|
|
84
|
+
|
|
85
|
+
const targetFn = context.__targetFn;
|
|
86
|
+
if (typeof targetFn !== 'function') {
|
|
87
|
+
throw new Error("Function not found or not callable: " + functionName);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const rows = [];
|
|
91
|
+
for (const input of testInputs) {
|
|
92
|
+
const started = performance.now();
|
|
93
|
+
try {
|
|
94
|
+
const raw = targetFn(input);
|
|
95
|
+
const resolved = raw && typeof raw.then === 'function' ? await raw : raw;
|
|
96
|
+
rows.push({
|
|
97
|
+
input,
|
|
98
|
+
output: normalizeOutput(resolved),
|
|
99
|
+
duration: Number((performance.now() - started).toFixed(3)),
|
|
100
|
+
});
|
|
101
|
+
} catch (err) {
|
|
102
|
+
rows.push({
|
|
103
|
+
input,
|
|
104
|
+
output: '',
|
|
105
|
+
error: err && err.message ? err.message : String(err),
|
|
106
|
+
duration: Number((performance.now() - started).toFixed(3)),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
parentPort.postMessage({ jobId, ok: true, result: { ok: true, results: rows } });
|
|
112
|
+
} catch (error) {
|
|
113
|
+
parentPort.postMessage({
|
|
114
|
+
jobId,
|
|
115
|
+
ok: true,
|
|
116
|
+
result: {
|
|
117
|
+
ok: false,
|
|
118
|
+
error: error && error.message ? error.message : String(error),
|
|
119
|
+
results: [],
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
__bootstrap().catch((error) => {
|
|
127
|
+
if (typeof console !== 'undefined' && typeof console.error === 'function') {
|
|
128
|
+
console.error('crypto harness worker bootstrap failed:', error && error.message ? error.message : String(error));
|
|
129
|
+
}
|
|
130
|
+
});
|
|
126
131
|
`;
|
|
127
132
|
export class TransformToolHandlersBase {
|
|
128
133
|
collector;
|
|
@@ -279,7 +284,7 @@ export class TransformToolHandlersBase {
|
|
|
279
284
|
}
|
|
280
285
|
}
|
|
281
286
|
for (const script of scripts) {
|
|
282
|
-
if (script.id === id ||
|
|
287
|
+
if (script.id === id || script.dataset?.scriptId === id) {
|
|
283
288
|
if (script.textContent && script.textContent.trim().length > 0) {
|
|
284
289
|
return script.textContent;
|
|
285
290
|
}
|
|
@@ -313,11 +318,6 @@ export class TransformToolHandlersBase {
|
|
|
313
318
|
throw new Error(`Unable to resolve source from scriptId: ${scriptId}`);
|
|
314
319
|
}
|
|
315
320
|
resolveFunctionName(targetFunction, targetPath, source) {
|
|
316
|
-
const extractLastSegment = (value) => {
|
|
317
|
-
const normalized = value.startsWith('window.') ? value.slice(7) : value;
|
|
318
|
-
const parts = normalized.split('.').filter(Boolean);
|
|
319
|
-
return parts.length > 0 ? parts[parts.length - 1] : '';
|
|
320
|
-
};
|
|
321
321
|
const candidateFromTarget = extractLastSegment(targetFunction);
|
|
322
322
|
if (this.isValidIdentifier(candidateFromTarget)) {
|
|
323
323
|
return candidateFromTarget;
|
|
@@ -336,16 +336,16 @@ export class TransformToolHandlersBase {
|
|
|
336
336
|
return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(value);
|
|
337
337
|
}
|
|
338
338
|
buildCryptoPolyfills() {
|
|
339
|
-
return `
|
|
340
|
-
const __textEncoder = typeof TextEncoder !== 'undefined' ? new TextEncoder() : null;
|
|
341
|
-
const __textDecoder = typeof TextDecoder !== 'undefined' ? new TextDecoder() : null;
|
|
342
|
-
|
|
343
|
-
if (typeof globalThis.atob === 'undefined') {
|
|
344
|
-
globalThis.atob = (value) => Buffer.from(String(value), 'base64').toString('binary');
|
|
345
|
-
}
|
|
346
|
-
if (typeof globalThis.btoa === 'undefined') {
|
|
347
|
-
globalThis.btoa = (value) => Buffer.from(String(value), 'binary').toString('base64');
|
|
348
|
-
}
|
|
339
|
+
return `
|
|
340
|
+
const __textEncoder = typeof TextEncoder !== 'undefined' ? new TextEncoder() : null;
|
|
341
|
+
const __textDecoder = typeof TextDecoder !== 'undefined' ? new TextDecoder() : null;
|
|
342
|
+
|
|
343
|
+
if (typeof globalThis.atob === 'undefined') {
|
|
344
|
+
globalThis.atob = (value) => Buffer.from(String(value), 'base64').toString('binary');
|
|
345
|
+
}
|
|
346
|
+
if (typeof globalThis.btoa === 'undefined') {
|
|
347
|
+
globalThis.btoa = (value) => Buffer.from(String(value), 'binary').toString('base64');
|
|
348
|
+
}
|
|
349
349
|
`.trim();
|
|
350
350
|
}
|
|
351
351
|
async runCryptoHarness(code, functionName, testInputs) {
|
|
@@ -11,24 +11,6 @@ export class TransformToolHandlersCrypto extends TransformToolHandlersOps {
|
|
|
11
11
|
const keywordList = Array.isArray(keywords) ? keywords : [];
|
|
12
12
|
const lowerKeywords = keywordList.map((item) => String(item).toLowerCase());
|
|
13
13
|
const globalObj = window;
|
|
14
|
-
const resolvePath = (path) => {
|
|
15
|
-
const normalized = path.startsWith('window.') ? path.slice(7) : path;
|
|
16
|
-
const parts = normalized.split('.').filter(Boolean);
|
|
17
|
-
let cursor = window;
|
|
18
|
-
for (const part of parts) {
|
|
19
|
-
if (cursor === null ||
|
|
20
|
-
cursor === undefined ||
|
|
21
|
-
(typeof cursor !== 'object' && typeof cursor !== 'function')) {
|
|
22
|
-
return undefined;
|
|
23
|
-
}
|
|
24
|
-
const carrier = cursor;
|
|
25
|
-
if (!(part in carrier)) {
|
|
26
|
-
return undefined;
|
|
27
|
-
}
|
|
28
|
-
cursor = carrier[part];
|
|
29
|
-
}
|
|
30
|
-
return cursor;
|
|
31
|
-
};
|
|
32
14
|
const scoreFunction = (path, source) => {
|
|
33
15
|
const text = (path + '\\n' + source).toLowerCase();
|
|
34
16
|
let score = 0;
|
|
@@ -56,7 +38,24 @@ export class TransformToolHandlersCrypto extends TransformToolHandlersOps {
|
|
|
56
38
|
});
|
|
57
39
|
};
|
|
58
40
|
if (target.length > 0) {
|
|
59
|
-
const resolved =
|
|
41
|
+
const resolved = (() => {
|
|
42
|
+
const normalized = target.startsWith('window.') ? target.slice(7) : target;
|
|
43
|
+
const parts = normalized.split('.').filter(Boolean);
|
|
44
|
+
let cursor = window;
|
|
45
|
+
for (const part of parts) {
|
|
46
|
+
if (cursor === null ||
|
|
47
|
+
cursor === undefined ||
|
|
48
|
+
(typeof cursor !== 'object' && typeof cursor !== 'function')) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
const carrier = cursor;
|
|
52
|
+
if (!(part in carrier)) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
cursor = carrier[part];
|
|
56
|
+
}
|
|
57
|
+
return cursor;
|
|
58
|
+
})();
|
|
60
59
|
pushCandidate(target, resolved, 100);
|
|
61
60
|
}
|
|
62
61
|
const globalKeys = Object.getOwnPropertyNames(globalObj).slice(0, 800);
|
|
@@ -1,234 +1,57 @@
|
|
|
1
|
+
import { tool } from '../../registry/tool-builder.js';
|
|
1
2
|
export const wasmTools = [
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
name: 'wasm_decompile',
|
|
57
|
-
description: 'Decompile a .wasm file to C-like pseudo-code using wasm-decompile.\n\nRequires: wabt toolchain installed (wasm-decompile in PATH).\n\nProduces more readable output than WAT, resembling C/JavaScript syntax. Useful for understanding VMP handler logic.',
|
|
58
|
-
inputSchema: {
|
|
59
|
-
type: 'object',
|
|
60
|
-
properties: {
|
|
61
|
-
inputPath: {
|
|
62
|
-
type: 'string',
|
|
63
|
-
description: 'Path to the .wasm file to decompile',
|
|
64
|
-
},
|
|
65
|
-
outputPath: {
|
|
66
|
-
type: 'string',
|
|
67
|
-
description: 'Output file path. If omitted, auto-generates in artifacts/wasm/',
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
required: ['inputPath'],
|
|
71
|
-
},
|
|
72
|
-
annotations: {
|
|
73
|
-
readOnlyHint: false,
|
|
74
|
-
destructiveHint: false,
|
|
75
|
-
idempotentHint: false,
|
|
76
|
-
openWorldHint: false,
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
name: 'wasm_inspect_sections',
|
|
81
|
-
description: 'Inspect sections and metadata of a .wasm file using wasm-objdump.\n\nRequires: wabt toolchain installed (wasm-objdump in PATH).\n\nReturns section headers, import/export tables, function signatures, and memory layout.',
|
|
82
|
-
inputSchema: {
|
|
83
|
-
type: 'object',
|
|
84
|
-
properties: {
|
|
85
|
-
inputPath: {
|
|
86
|
-
type: 'string',
|
|
87
|
-
description: 'Path to the .wasm file to inspect',
|
|
88
|
-
},
|
|
89
|
-
sections: {
|
|
90
|
-
type: 'string',
|
|
91
|
-
enum: ['headers', 'details', 'disassemble', 'all'],
|
|
92
|
-
description: 'What to dump: headers (section overview), details (full metadata), disassemble (bytecode), all. Default: details',
|
|
93
|
-
default: 'details',
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
required: ['inputPath'],
|
|
97
|
-
},
|
|
98
|
-
annotations: {
|
|
99
|
-
readOnlyHint: false,
|
|
100
|
-
destructiveHint: false,
|
|
101
|
-
idempotentHint: false,
|
|
102
|
-
openWorldHint: false,
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
name: 'wasm_offline_run',
|
|
107
|
-
description: 'Execute a specific exported function from a .wasm file offline using wasmtime or wasmer.\n\nRequires: wasmtime or wasmer installed in PATH.\n\nUSE THIS to run sign/encrypt functions extracted from WASM VMP without a browser. Provide the function name and arguments.\n\nSecurity: Runs in a sandboxed WASM runtime with no filesystem or network access.',
|
|
108
|
-
inputSchema: {
|
|
109
|
-
type: 'object',
|
|
110
|
-
properties: {
|
|
111
|
-
inputPath: {
|
|
112
|
-
type: 'string',
|
|
113
|
-
description: 'Path to the .wasm file',
|
|
114
|
-
},
|
|
115
|
-
functionName: {
|
|
116
|
-
type: 'string',
|
|
117
|
-
description: 'Name of the exported function to invoke (e.g., "_sign", "encrypt")',
|
|
118
|
-
},
|
|
119
|
-
args: {
|
|
120
|
-
type: 'array',
|
|
121
|
-
items: { type: 'string' },
|
|
122
|
-
description: 'Arguments to pass to the function (will be parsed as integers/floats)',
|
|
123
|
-
},
|
|
124
|
-
runtime: {
|
|
125
|
-
type: 'string',
|
|
126
|
-
enum: ['wasmtime', 'wasmer', 'auto'],
|
|
127
|
-
description: 'WASM runtime to use. "auto" tries wasmtime first, then wasmer. Default: auto',
|
|
128
|
-
default: 'auto',
|
|
129
|
-
},
|
|
130
|
-
timeoutMs: {
|
|
131
|
-
type: 'number',
|
|
132
|
-
description: 'Execution timeout in ms (default: 10000)',
|
|
133
|
-
default: 10000,
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
required: ['inputPath', 'functionName'],
|
|
137
|
-
},
|
|
138
|
-
annotations: {
|
|
139
|
-
readOnlyHint: false,
|
|
140
|
-
destructiveHint: false,
|
|
141
|
-
idempotentHint: false,
|
|
142
|
-
openWorldHint: false,
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
name: 'wasm_optimize',
|
|
147
|
-
description: 'Optimize a .wasm file using binaryen wasm-opt.\n\nRequires: binaryen toolchain installed (wasm-opt in PATH).\n\nApplies optimization passes (dead code elimination, constant folding, etc.) to reduce size and improve performance. Optimized output can be re-injected into the browser.',
|
|
148
|
-
inputSchema: {
|
|
149
|
-
type: 'object',
|
|
150
|
-
properties: {
|
|
151
|
-
inputPath: {
|
|
152
|
-
type: 'string',
|
|
153
|
-
description: 'Path to the .wasm file to optimize',
|
|
154
|
-
},
|
|
155
|
-
outputPath: {
|
|
156
|
-
type: 'string',
|
|
157
|
-
description: 'Output optimized .wasm file path. If omitted, auto-generates in artifacts/wasm/',
|
|
158
|
-
},
|
|
159
|
-
level: {
|
|
160
|
-
type: 'string',
|
|
161
|
-
enum: ['O1', 'O2', 'O3', 'O4', 'Os', 'Oz'],
|
|
162
|
-
description: 'Optimization level (default: O2)',
|
|
163
|
-
default: 'O2',
|
|
164
|
-
},
|
|
165
|
-
},
|
|
166
|
-
required: ['inputPath'],
|
|
167
|
-
},
|
|
168
|
-
annotations: {
|
|
169
|
-
readOnlyHint: false,
|
|
170
|
-
destructiveHint: false,
|
|
171
|
-
idempotentHint: false,
|
|
172
|
-
openWorldHint: false,
|
|
173
|
-
},
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
name: 'wasm_vmp_trace',
|
|
177
|
-
description: 'Trace WASM VMP (Virtual Machine Protection) opcode execution.\n\nCombines the webassembly-full hook preset with enhanced import call tracing to reconstruct VMP handler tables and execution flows.\n\nUSE THIS when a page uses WASM-based VMP to protect sign/encrypt functions. Returns:\n- Import call sequence (opcode trace)\n- Identified handler patterns\n- Input→output data flow',
|
|
178
|
-
inputSchema: {
|
|
179
|
-
type: 'object',
|
|
180
|
-
properties: {
|
|
181
|
-
maxEvents: {
|
|
182
|
-
type: 'number',
|
|
183
|
-
description: 'Maximum import call events to capture (default: 5000)',
|
|
184
|
-
default: 5000,
|
|
185
|
-
},
|
|
186
|
-
filterModule: {
|
|
187
|
-
type: 'string',
|
|
188
|
-
description: 'Only trace calls to this import module name (e.g., "env", "wasi_snapshot_preview1")',
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
annotations: {
|
|
193
|
-
readOnlyHint: false,
|
|
194
|
-
destructiveHint: false,
|
|
195
|
-
idempotentHint: false,
|
|
196
|
-
openWorldHint: false,
|
|
197
|
-
},
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
name: 'wasm_memory_inspect',
|
|
201
|
-
description: 'Inspect WebAssembly.Memory contents from the browser.\n\nReads the linear memory buffer of the active WASM module, displaying it as hex dump, ASCII, or searching for patterns.\n\nUSE THIS to:\n- Examine WASM memory layout (stack, heap, data segments)\n- Find strings, keys, or encoded data in WASM memory\n- Track how input data is transformed through WASM functions',
|
|
202
|
-
inputSchema: {
|
|
203
|
-
type: 'object',
|
|
204
|
-
properties: {
|
|
205
|
-
offset: {
|
|
206
|
-
type: 'number',
|
|
207
|
-
description: 'Starting byte offset to read from (default: 0)',
|
|
208
|
-
default: 0,
|
|
209
|
-
},
|
|
210
|
-
length: {
|
|
211
|
-
type: 'number',
|
|
212
|
-
description: 'Number of bytes to read (default: 256, max: 65536)',
|
|
213
|
-
default: 256,
|
|
214
|
-
},
|
|
215
|
-
format: {
|
|
216
|
-
type: 'string',
|
|
217
|
-
enum: ['hex', 'ascii', 'both'],
|
|
218
|
-
description: 'Output format (default: both)',
|
|
219
|
-
default: 'both',
|
|
220
|
-
},
|
|
221
|
-
searchPattern: {
|
|
222
|
-
type: 'string',
|
|
223
|
-
description: 'Search for this hex pattern or ASCII string in the memory range',
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
},
|
|
227
|
-
annotations: {
|
|
228
|
-
readOnlyHint: false,
|
|
229
|
-
destructiveHint: false,
|
|
230
|
-
idempotentHint: false,
|
|
231
|
-
openWorldHint: false,
|
|
232
|
-
},
|
|
233
|
-
},
|
|
3
|
+
tool('wasm_dump')
|
|
4
|
+
.desc('Dump a WebAssembly module from the current browser page.\n\nExtracts the WASM binary via the webassembly-full hook preset, saves it to disk, and returns module metadata (hash, size, imports, exports).\n\nPrerequisites: A page with WASM must be loaded. The webassembly-full hook preset will be auto-injected if not already active.')
|
|
5
|
+
.number('moduleIndex', 'Index of the WASM module to dump if multiple were loaded', {
|
|
6
|
+
default: 0,
|
|
7
|
+
})
|
|
8
|
+
.string('outputPath', 'Custom output file path. If omitted, auto-generates in artifacts/wasm/')
|
|
9
|
+
.build(),
|
|
10
|
+
tool('wasm_disassemble')
|
|
11
|
+
.desc('Disassemble a .wasm file to WebAssembly Text Format (WAT) using wasm2wat.\n\nRequires: wabt toolchain installed (wasm2wat in PATH).\n\nUSE THIS to read WASM bytecode as human-readable text. The output shows all functions, imports, exports, and instructions.')
|
|
12
|
+
.string('inputPath', 'Path to the .wasm file to disassemble')
|
|
13
|
+
.string('outputPath', 'Output .wat file path. If omitted, auto-generates in artifacts/wasm/')
|
|
14
|
+
.boolean('foldExprs', 'Fold expressions for more compact output', { default: true })
|
|
15
|
+
.required('inputPath')
|
|
16
|
+
.build(),
|
|
17
|
+
tool('wasm_decompile')
|
|
18
|
+
.desc('Decompile a .wasm file to C-like pseudo-code using wasm-decompile.\n\nRequires: wabt toolchain installed (wasm-decompile in PATH).\n\nProduces more readable output than WAT, resembling C/JavaScript syntax. Useful for understanding VMP handler logic.')
|
|
19
|
+
.string('inputPath', 'Path to the .wasm file to decompile')
|
|
20
|
+
.string('outputPath', 'Output file path. If omitted, auto-generates in artifacts/wasm/')
|
|
21
|
+
.required('inputPath')
|
|
22
|
+
.build(),
|
|
23
|
+
tool('wasm_inspect_sections')
|
|
24
|
+
.desc('Inspect sections and metadata of a .wasm file using wasm-objdump.\n\nRequires: wabt toolchain installed (wasm-objdump in PATH).\n\nReturns section headers, import/export tables, function signatures, and memory layout.')
|
|
25
|
+
.string('inputPath', 'Path to the .wasm file to inspect')
|
|
26
|
+
.enum('sections', ['headers', 'details', 'disassemble', 'all'], 'What to dump: headers (section overview), details (full metadata), disassemble (bytecode), all', { default: 'details' })
|
|
27
|
+
.required('inputPath')
|
|
28
|
+
.build(),
|
|
29
|
+
tool('wasm_offline_run')
|
|
30
|
+
.desc('Execute a specific exported function from a .wasm file offline using wasmtime or wasmer.\n\nRequires: wasmtime or wasmer installed in PATH.\n\nUSE THIS to run sign/encrypt functions extracted from WASM VMP without a browser. Provide the function name and arguments.\n\nSecurity: Runs in a sandboxed WASM runtime with no filesystem or network access.')
|
|
31
|
+
.string('inputPath', 'Path to the .wasm file')
|
|
32
|
+
.string('functionName', 'Name of the exported function to invoke (e.g., "_sign", "encrypt")')
|
|
33
|
+
.array('args', { type: 'string' }, 'Arguments to pass to the function (will be parsed as integers/floats)')
|
|
34
|
+
.enum('runtime', ['wasmtime', 'wasmer', 'auto'], 'WASM runtime to use. "auto" tries wasmtime first, then wasmer', { default: 'auto' })
|
|
35
|
+
.number('timeoutMs', 'Execution timeout in ms', { default: 10000 })
|
|
36
|
+
.required('inputPath', 'functionName')
|
|
37
|
+
.build(),
|
|
38
|
+
tool('wasm_optimize')
|
|
39
|
+
.desc('Optimize a .wasm file using binaryen wasm-opt.\n\nRequires: binaryen toolchain installed (wasm-opt in PATH).\n\nApplies optimization passes (dead code elimination, constant folding, etc.) to reduce size and improve performance. Optimized output can be re-injected into the browser.')
|
|
40
|
+
.string('inputPath', 'Path to the .wasm file to optimize')
|
|
41
|
+
.string('outputPath', 'Output optimized .wasm file path. If omitted, auto-generates in artifacts/wasm/')
|
|
42
|
+
.enum('level', ['O1', 'O2', 'O3', 'O4', 'Os', 'Oz'], 'Optimization level', { default: 'O2' })
|
|
43
|
+
.required('inputPath')
|
|
44
|
+
.build(),
|
|
45
|
+
tool('wasm_vmp_trace')
|
|
46
|
+
.desc('Trace WASM VMP (Virtual Machine Protection) opcode execution.\n\nCombines the webassembly-full hook preset with enhanced import call tracing to reconstruct VMP handler tables and execution flows.\n\nUSE THIS when a page uses WASM-based VMP to protect sign/encrypt functions. Returns:\n- Import call sequence (opcode trace)\n- Identified handler patterns\n- Input→output data flow')
|
|
47
|
+
.number('maxEvents', 'Maximum import call events to capture', { default: 5000 })
|
|
48
|
+
.string('filterModule', 'Only trace calls to this import module name (e.g., "env", "wasi_snapshot_preview1")')
|
|
49
|
+
.build(),
|
|
50
|
+
tool('wasm_memory_inspect')
|
|
51
|
+
.desc('Inspect WebAssembly.Memory contents from the browser.\n\nReads the linear memory buffer of the active WASM module, displaying it as hex dump, ASCII, or searching for patterns.\n\nUSE THIS to:\n- Examine WASM memory layout (stack, heap, data segments)\n- Find strings, keys, or encoded data in WASM memory\n- Track how input data is transformed through WASM functions')
|
|
52
|
+
.number('offset', 'Starting byte offset to read from', { default: 0 })
|
|
53
|
+
.number('length', 'Number of bytes to read', { default: 256 })
|
|
54
|
+
.enum('format', ['hex', 'ascii', 'both'], 'Output format', { default: 'both' })
|
|
55
|
+
.string('searchPattern', 'Search for this hex pattern or ASCII string in the memory range')
|
|
56
|
+
.build(),
|
|
234
57
|
];
|
|
@@ -411,7 +411,7 @@ export class WasmToolHandlers {
|
|
|
411
411
|
fnCounts[key] = (fnCounts[key] || 0) + 1;
|
|
412
412
|
}
|
|
413
413
|
const sorted = Object.entries(fnCounts)
|
|
414
|
-
.
|
|
414
|
+
.toSorted((a, b) => b[1] - a[1])
|
|
415
415
|
.slice(0, 30)
|
|
416
416
|
.map(([name, count]) => ({ name, count }));
|
|
417
417
|
return {
|