@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.
Files changed (385) hide show
  1. package/README.md +14 -5
  2. package/README.zh.md +18 -3
  3. package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
  4. package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
  5. package/dist/packages/extension-sdk/src/plugin.js +119 -33
  6. package/dist/packages/extension-sdk/src/workflow.d.ts +156 -0
  7. package/dist/packages/extension-sdk/src/workflow.js +236 -0
  8. package/dist/src/config/search-defaults.js +161 -0
  9. package/dist/src/constants.d.ts +3 -0
  10. package/dist/src/constants.js +4 -1
  11. package/dist/src/index.d.ts +1 -1
  12. package/dist/src/index.js +13 -17
  13. package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
  14. package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
  15. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
  16. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
  17. package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
  18. package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
  19. package/dist/src/modules/analyzer/PatternDetector.js +3 -3
  20. package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
  21. package/dist/src/modules/browser/BrowserDiscovery.js +2 -2
  22. package/dist/src/modules/browser/BrowserModeManager.js +11 -10
  23. package/dist/src/modules/browser/TabRegistry.js +2 -2
  24. package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
  25. package/dist/src/modules/browser/UnifiedBrowserManager.js +18 -3
  26. package/dist/src/modules/captcha/AICaptchaDetector.d.ts +1 -10
  27. package/dist/src/modules/captcha/AICaptchaDetector.js +7 -201
  28. package/dist/src/modules/collector/CodeCollector.js +4 -5
  29. package/dist/src/modules/collector/DOMInspector.js +48 -58
  30. package/dist/src/modules/collector/PageController.d.ts +17 -4
  31. package/dist/src/modules/collector/PageController.js +2 -5
  32. package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
  33. package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
  34. package/dist/src/modules/crypto/CryptoDetector.js +2 -42
  35. package/dist/src/modules/crypto/CryptoRules.js +1 -1
  36. package/dist/src/modules/debugger/BlackboxManager.js +1 -1
  37. package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
  38. package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +4 -2
  39. package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
  40. package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
  41. package/dist/src/modules/deobfuscator/Deobfuscator.js +4 -39
  42. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
  43. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
  44. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +1 -2
  45. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +3 -55
  46. package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
  47. package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
  48. package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
  49. package/dist/src/modules/deobfuscator/webcrack.js +15 -2
  50. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
  51. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
  52. package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
  53. package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
  54. package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
  55. package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
  56. package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
  57. package/dist/src/modules/external/ExternalToolRunner.js +25 -22
  58. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.compose.js +5 -5
  59. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.network.js +311 -311
  60. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.runtime.js +410 -410
  61. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.storage.js +122 -122
  62. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
  63. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
  64. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.dynamic.js +194 -194
  65. package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
  66. package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
  67. package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
  68. package/dist/src/modules/monitor/PlaywrightNetworkMonitor.js +62 -62
  69. package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
  70. package/dist/src/modules/process/LinuxProcessManager.js +2 -0
  71. package/dist/src/modules/process/MacProcessManager.js +25 -25
  72. package/dist/src/modules/process/MemoryManager.d.ts +1 -1
  73. package/dist/src/modules/process/MemoryManager.js +2 -2
  74. package/dist/src/modules/process/memory/AuditTrail.js +1 -1
  75. package/dist/src/modules/process/memory/availability.js +49 -49
  76. package/dist/src/modules/process/memory/injector.js +185 -185
  77. package/dist/src/modules/process/memory/reader.js +85 -53
  78. package/dist/src/modules/process/memory/regions.dump.js +51 -51
  79. package/dist/src/modules/process/memory/regions.enumerate.js +108 -108
  80. package/dist/src/modules/process/memory/regions.modules.js +80 -80
  81. package/dist/src/modules/process/memory/regions.protection.js +148 -115
  82. package/dist/src/modules/process/memory/scanner.d.ts +5 -1
  83. package/dist/src/modules/process/memory/scanner.darwin.js +98 -41
  84. package/dist/src/modules/process/memory/scanner.js +88 -4
  85. package/dist/src/modules/process/memory/scanner.windows.js +124 -124
  86. package/dist/src/modules/process/memory/writer.js +98 -58
  87. package/dist/src/modules/security/ExecutionSandbox.js +51 -52
  88. package/dist/src/modules/stealth/FingerprintManager.js +1 -1
  89. package/dist/src/modules/stealth/StealthScripts.d.ts +1 -0
  90. package/dist/src/modules/stealth/StealthScripts.js +18 -13
  91. package/dist/src/modules/stealth/StealthVerifier.js +1 -3
  92. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
  93. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
  94. package/dist/src/modules/trace/TraceDB.js +75 -69
  95. package/dist/src/modules/trace/TraceRecorder.js +1 -5
  96. package/dist/src/native/AntiCheatDetector.js +67 -16
  97. package/dist/src/native/CodeInjector.js +3 -3
  98. package/dist/src/native/HardwareBreakpoint.js +24 -15
  99. package/dist/src/native/HeapAnalyzer.js +2 -2
  100. package/dist/src/native/MemoryController.js +1 -1
  101. package/dist/src/native/MemoryScanSession.js +2 -2
  102. package/dist/src/native/MemoryScanner.js +4 -8
  103. package/dist/src/native/NativeMemoryManager.impl.js +2 -2
  104. package/dist/src/native/PEAnalyzer.js +14 -15
  105. package/dist/src/native/PointerChainEngine.js +2 -4
  106. package/dist/src/native/ScriptLoader.js +4 -9
  107. package/dist/src/native/Speedhack.js +1 -1
  108. package/dist/src/native/StructureAnalyzer.js +52 -33
  109. package/dist/src/native/Win32API.d.ts +1 -0
  110. package/dist/src/native/Win32API.js +13 -0
  111. package/dist/src/native/Win32Debug.js +19 -19
  112. package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
  113. package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
  114. package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
  115. package/dist/src/server/MCPServer.context.d.ts +2 -1
  116. package/dist/src/server/MCPServer.d.ts +2 -1
  117. package/dist/src/server/MCPServer.domain.d.ts +1 -1
  118. package/dist/src/server/MCPServer.domain.js +81 -16
  119. package/dist/src/server/MCPServer.js +41 -14
  120. package/dist/src/server/MCPServer.resources.d.ts +2 -0
  121. package/dist/src/server/MCPServer.resources.js +91 -0
  122. package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
  123. package/dist/src/server/MCPServer.search.helpers.js +1 -1
  124. package/dist/src/server/MCPServer.transport.js +12 -0
  125. package/dist/src/server/ToolCallContextGuard.js +8 -0
  126. package/dist/src/server/ToolRouter.d.ts +25 -9
  127. package/dist/src/server/ToolRouter.intent.d.ts +26 -0
  128. package/dist/src/server/ToolRouter.intent.js +77 -0
  129. package/dist/src/server/ToolRouter.js +103 -284
  130. package/dist/src/server/ToolRouter.policy.d.ts +22 -0
  131. package/dist/src/server/ToolRouter.policy.js +163 -0
  132. package/dist/src/server/ToolRouter.probe.d.ts +17 -0
  133. package/dist/src/server/ToolRouter.probe.js +103 -0
  134. package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
  135. package/dist/src/server/ToolRouter.renderer.js +52 -0
  136. package/dist/src/server/activation/ActivationController.js +15 -12
  137. package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
  138. package/dist/src/server/activation/PredictiveBooster.js +1 -3
  139. package/dist/src/server/domains/analysis/definitions.js +155 -655
  140. package/dist/src/server/domains/analysis/handlers.impl.js +26 -20
  141. package/dist/src/server/domains/analysis/handlers.web-tools.js +2 -1
  142. package/dist/src/server/domains/analysis/manifest.js +6 -4
  143. package/dist/src/server/domains/antidebug/definitions.js +25 -111
  144. package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
  145. package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
  146. package/dist/src/server/domains/browser/definitions.tools.page-core.js +210 -439
  147. package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
  148. package/dist/src/server/domains/browser/definitions.tools.runtime.js +98 -211
  149. package/dist/src/server/domains/browser/definitions.tools.security.js +194 -339
  150. package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
  151. package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
  152. package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
  153. package/dist/src/server/domains/browser/handlers/framework-state.js +27 -9
  154. package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
  155. package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
  156. package/dist/src/server/domains/browser/handlers.impl.d.ts +1 -2
  157. package/dist/src/server/domains/browser/handlers.impl.js +2 -3
  158. package/dist/src/server/domains/browser/manifest.js +37 -13
  159. package/dist/src/server/domains/coordination/definitions.js +50 -216
  160. package/dist/src/server/domains/coordination/index.d.ts +2 -1
  161. package/dist/src/server/domains/coordination/index.js +1 -0
  162. package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
  163. package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
  164. package/dist/src/server/domains/debugger/manifest.js +9 -2
  165. package/dist/src/server/domains/encoding/definitions.js +43 -153
  166. package/dist/src/server/domains/encoding/handlers.base.js +2 -2
  167. package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
  168. package/dist/src/server/domains/evidence/definitions.js +42 -0
  169. package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
  170. package/dist/src/server/domains/evidence/handlers.js +60 -0
  171. package/dist/src/server/domains/evidence/index.d.ts +2 -0
  172. package/dist/src/server/domains/evidence/index.js +2 -0
  173. package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
  174. package/dist/src/server/domains/evidence/manifest.js +78 -0
  175. package/dist/src/server/domains/graphql/definitions.js +53 -141
  176. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
  177. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.shared.js +77 -77
  178. package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
  179. package/dist/src/server/domains/hooks/ai-handlers.js +1 -67
  180. package/dist/src/server/domains/hooks/definitions.js +69 -335
  181. package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
  182. package/dist/src/server/domains/hooks/manifest.js +1 -2
  183. package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
  184. package/dist/src/server/domains/instrumentation/definitions.js +99 -0
  185. package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
  186. package/dist/src/server/domains/instrumentation/handlers.js +206 -0
  187. package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
  188. package/dist/src/server/domains/instrumentation/index.js +2 -0
  189. package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
  190. package/dist/src/server/domains/instrumentation/manifest.js +114 -0
  191. package/dist/src/server/domains/macro/definitions.js +16 -43
  192. package/dist/src/server/domains/maintenance/definitions.js +60 -219
  193. package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
  194. package/dist/src/server/domains/memory/definitions.js +387 -559
  195. package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
  196. package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
  197. package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
  198. package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
  199. package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
  200. package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
  201. package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
  202. package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
  203. package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
  204. package/dist/src/server/domains/memory/handlers/scan.js +97 -0
  205. package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
  206. package/dist/src/server/domains/memory/handlers/session.js +49 -0
  207. package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
  208. package/dist/src/server/domains/memory/handlers/structure.js +74 -0
  209. package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
  210. package/dist/src/server/domains/memory/handlers.impl.js +63 -494
  211. package/dist/src/server/domains/memory/manifest.js +236 -64
  212. package/dist/src/server/domains/native-bridge/definitions.js +54 -192
  213. package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
  214. package/dist/src/server/domains/native-bridge/index.js +2 -1
  215. package/dist/src/server/domains/network/auth-extractor.js +1 -1
  216. package/dist/src/server/domains/network/definitions.js +175 -578
  217. package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
  218. package/dist/src/server/domains/network/handlers.base.core.js +623 -0
  219. package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
  220. package/dist/src/server/domains/network/handlers.base.js +3 -878
  221. package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
  222. package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
  223. package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
  224. package/dist/src/server/domains/network/handlers.base.types.js +89 -0
  225. package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
  226. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
  227. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
  228. package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
  229. package/dist/src/server/domains/network/manifest.js +15 -0
  230. package/dist/src/server/domains/network/replay.js +1 -4
  231. package/dist/src/server/domains/platform/definitions.js +121 -112
  232. package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +4 -0
  233. package/dist/src/server/domains/platform/handlers/bridge-handlers.js +193 -4
  234. package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
  235. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
  236. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
  237. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
  238. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
  239. package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
  240. package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
  241. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
  242. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
  243. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
  244. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
  245. package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +3 -3
  246. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
  247. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
  248. package/dist/src/server/domains/platform/handlers.d.ts +48 -0
  249. package/dist/src/server/domains/platform/handlers.js +29 -0
  250. package/dist/src/server/domains/platform/manifest.js +38 -0
  251. package/dist/src/server/domains/process/definitions.js +163 -647
  252. package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
  253. package/dist/src/server/domains/process/handlers.base.js +7 -462
  254. package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
  255. package/dist/src/server/domains/process/handlers.base.process.js +417 -0
  256. package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
  257. package/dist/src/server/domains/process/handlers.base.types.js +50 -0
  258. package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +18 -16
  259. package/dist/src/server/domains/process/manifest.js +6 -1
  260. package/dist/src/server/domains/sandbox/definitions.js +11 -33
  261. package/dist/src/server/domains/sandbox/handlers.js +8 -3
  262. package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
  263. package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
  264. package/dist/src/server/domains/shared/modules.d.ts +0 -2
  265. package/dist/src/server/domains/shared/modules.js +0 -1
  266. package/dist/src/server/domains/sourcemap/definitions.js +27 -111
  267. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
  268. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
  269. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
  270. package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
  271. package/dist/src/server/domains/sourcemap/manifest.js +1 -1
  272. package/dist/src/server/domains/streaming/definitions.js +36 -148
  273. package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
  274. package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
  275. package/dist/src/server/domains/trace/TraceSummarizer.js +8 -5
  276. package/dist/src/server/domains/trace/definitions.tools.js +51 -206
  277. package/dist/src/server/domains/trace/handlers.js +10 -12
  278. package/dist/src/server/domains/trace/index.d.ts +2 -1
  279. package/dist/src/server/domains/trace/index.js +2 -1
  280. package/dist/src/server/domains/trace/manifest.js +15 -3
  281. package/dist/src/server/domains/transform/definitions.js +50 -210
  282. package/dist/src/server/domains/transform/handlers.impl.transform-base.js +108 -108
  283. package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
  284. package/dist/src/server/domains/transform/manifest.d.ts +1 -1
  285. package/dist/src/server/domains/transform/manifest.js +1 -1
  286. package/dist/src/server/domains/wasm/definitions.js +55 -232
  287. package/dist/src/server/domains/wasm/handlers.js +1 -1
  288. package/dist/src/server/domains/workflow/definitions.js +144 -414
  289. package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +1 -1
  290. package/dist/src/server/domains/workflow/handlers.impl.workflow-api.js +51 -51
  291. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
  292. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
  293. package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
  294. package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
  295. package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
  296. package/dist/src/server/evidence/index.d.ts +2 -0
  297. package/dist/src/server/evidence/index.js +1 -0
  298. package/dist/src/server/evidence/types.d.ts +22 -0
  299. package/dist/src/server/evidence/types.js +1 -0
  300. package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
  301. package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
  302. package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
  303. package/dist/src/server/extensions/ExtensionManager.js +193 -40
  304. package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
  305. package/dist/src/server/extensions/ExtensionManager.roots.js +4 -4
  306. package/dist/src/server/extensions/plugin-config.js +1 -1
  307. package/dist/src/server/extensions/plugin-env.d.ts +1 -1
  308. package/dist/src/server/extensions/plugin-env.js +10 -4
  309. package/dist/src/server/extensions/types.d.ts +17 -0
  310. package/dist/src/server/extensions/types.js +1 -1
  311. package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
  312. package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
  313. package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
  314. package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
  315. package/dist/src/server/instrumentation/index.d.ts +2 -0
  316. package/dist/src/server/instrumentation/index.js +2 -0
  317. package/dist/src/server/instrumentation/types.d.ts +62 -0
  318. package/dist/src/server/instrumentation/types.js +7 -0
  319. package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
  320. package/dist/src/server/macros/MacroConfigLoader.js +61 -59
  321. package/dist/src/server/macros/MacroRunner.js +6 -2
  322. package/dist/src/server/macros/builtins/index.d.ts +2 -3
  323. package/dist/src/server/macros/builtins/index.js +51 -7
  324. package/dist/src/server/plugins/PluginContract.d.ts +1 -1
  325. package/dist/src/server/registry/contracts.d.ts +1 -1
  326. package/dist/src/server/registry/discovery.js +5 -4
  327. package/dist/src/server/registry/ensure-browser-core.js +0 -3
  328. package/dist/src/server/registry/index.js +4 -4
  329. package/dist/src/server/registry/tool-builder.d.ts +46 -0
  330. package/dist/src/server/registry/tool-builder.js +105 -0
  331. package/dist/src/server/sandbox/QuickJSSandbox.js +16 -5
  332. package/dist/src/server/sandbox/SandboxHelpers.js +250 -250
  333. package/dist/src/server/search/EmbeddingWorker.js +5 -3
  334. package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
  335. package/dist/src/server/search/FeedbackTracker.js +26 -0
  336. package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
  337. package/dist/src/server/search/QueryNormalizer.js +94 -0
  338. package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
  339. package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
  340. package/dist/src/server/workflows/WorkflowContract.d.ts +24 -0
  341. package/dist/src/server/workflows/WorkflowContract.js +12 -0
  342. package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
  343. package/dist/src/server/workflows/WorkflowEngine.js +136 -3
  344. package/dist/src/types/config.d.ts +0 -14
  345. package/dist/src/types/deobfuscator.d.ts +0 -1
  346. package/dist/src/types/index.d.ts +1 -1
  347. package/dist/src/utils/DetailedDataManager.js +2 -0
  348. package/dist/src/utils/RingBuffer.js +5 -5
  349. package/dist/src/utils/TokenBudgetManager.js +1 -1
  350. package/dist/src/utils/UnifiedCacheManager.js +1 -1
  351. package/dist/src/utils/artifactRetention.js +2 -2
  352. package/dist/src/utils/betterSqlite3.d.ts +11 -0
  353. package/dist/src/utils/betterSqlite3.js +88 -0
  354. package/dist/src/utils/browserExecutable.js +2 -2
  355. package/dist/src/utils/cliFastPath.js +5 -8
  356. package/dist/src/utils/config.js +4 -26
  357. package/dist/src/utils/environmentDoctor.js +138 -11
  358. package/dist/src/utils/outputPaths.js +16 -9
  359. package/dist/src/utils/parallel.js +1 -3
  360. package/package.json +74 -72
  361. package/workflows/.gitkeep +0 -0
  362. package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
  363. package/dist/src/modules/analyzer/AISummarizer.js +0 -122
  364. package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
  365. package/dist/src/modules/hook/AIHookGenerator.js +0 -360
  366. package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
  367. package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
  368. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
  369. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
  370. package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
  371. package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
  372. package/dist/src/services/LLMService.d.ts +0 -37
  373. package/dist/src/services/LLMService.js +0 -233
  374. package/dist/src/services/prompts/analysis.d.ts +0 -9
  375. package/dist/src/services/prompts/analysis.js +0 -158
  376. package/dist/src/services/prompts/crypto.d.ts +0 -2
  377. package/dist/src/services/prompts/crypto.js +0 -108
  378. package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
  379. package/dist/src/services/prompts/deobfuscation.js +0 -300
  380. package/dist/src/services/prompts/environment.d.ts +0 -16
  381. package/dist/src/services/prompts/environment.js +0 -372
  382. package/dist/src/services/prompts/intelligence.d.ts +0 -4
  383. package/dist/src/services/prompts/intelligence.js +0 -250
  384. package/dist/src/services/prompts/taint.d.ts +0 -2
  385. package/dist/src/services/prompts/taint.js +0 -54
@@ -1,104 +1,104 @@
1
1
  import { logger } from '../../../utils/logger.js';
2
2
  import { executePowerShellScript } from '../../process/memory/types.js';
3
3
  function buildDllInjectionScript(pid, dllPath) {
4
- return `
5
- Add-Type @"
6
- using System;
7
- using System.Runtime.InteropServices;
8
- using System.ComponentModel;
9
- using System.IO;
10
-
11
- public class DllInjector {
12
- [DllImport("kernel32.dll", SetLastError = true)]
13
- public static extern IntPtr OpenProcess(int access, bool inherit, int pid);
14
-
15
- [DllImport("kernel32.dll", SetLastError = true)]
16
- public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr addr, int size, int allocType, int protect);
17
-
18
- [DllImport("kernel32.dll", SetLastError = true)]
19
- public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr addr, byte[] buffer, int size, out int written);
20
-
21
- [DllImport("kernel32.dll", SetLastError = true)]
22
- public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr attr, int stackSize, IntPtr startAddr, IntPtr param, int flags, out int threadId);
23
-
24
- [DllImport("kernel32.dll", SetLastError = true)]
25
- public static extern IntPtr GetModuleHandle(string name);
26
-
27
- [DllImport("kernel32.dll", SetLastError = true)]
28
- public static extern IntPtr GetProcAddress(IntPtr hModule, string name);
29
-
30
- [DllImport("kernel32.dll", SetLastError = true)]
31
- public static extern bool CloseHandle(IntPtr handle);
32
-
33
- [DllImport("kernel32.dll", SetLastError = true)]
34
- public static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr addr, int size, int freeType);
35
-
36
- const int PROCESS_CREATE_THREAD = 0x0002;
37
- const int PROCESS_QUERY_INFORMATION = 0x0400;
38
- const int PROCESS_VM_OPERATION = 0x0008;
39
- const int PROCESS_VM_WRITE = 0x0020;
40
- const int MEM_COMMIT = 0x1000;
41
- const int MEM_RESERVE = 0x2000;
42
- const int PAGE_READWRITE = 0x04;
43
- const int MEM_RELEASE = 0x8000;
44
-
45
- public static object Inject(int pid, string dllPath) {
46
- if (!File.Exists(dllPath)) {
47
- return new { success = false, error = "DLL not found: " + dllPath };
48
- }
49
-
50
- IntPtr hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, false, pid);
51
- if (hProcess == IntPtr.Zero) {
52
- int error = Marshal.GetLastWin32Error();
53
- throw new Win32Exception(error, "Failed to open process. Run as Administrator.");
54
- }
55
-
56
- try {
57
- byte[] dllBytes = System.Text.Encoding.ASCII.GetBytes(dllPath + "\\0");
58
- IntPtr remoteMem = VirtualAllocEx(hProcess, IntPtr.Zero, dllBytes.Length, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
59
- if (remoteMem == IntPtr.Zero) {
60
- int error = Marshal.GetLastWin32Error();
61
- throw new Win32Exception(error, "Failed to allocate memory in target");
62
- }
63
-
64
- try {
65
- int written;
66
- if (!WriteProcessMemory(hProcess, remoteMem, dllBytes, dllBytes.Length, out written)) {
67
- int error = Marshal.GetLastWin32Error();
68
- throw new Win32Exception(error, "Failed to write DLL path to target");
69
- }
70
-
71
- IntPtr hKernel32 = GetModuleHandle("kernel32.dll");
72
- IntPtr loadLibraryAddr = GetProcAddress(hKernel32, "LoadLibraryA");
73
- if (loadLibraryAddr == IntPtr.Zero) {
74
- throw new Exception("Failed to get LoadLibraryA address");
75
- }
76
-
77
- int threadId;
78
- IntPtr hThread = CreateRemoteThread(hProcess, IntPtr.Zero, 0, loadLibraryAddr, remoteMem, 0, out threadId);
79
- if (hThread == IntPtr.Zero) {
80
- int error = Marshal.GetLastWin32Error();
81
- throw new Win32Exception(error, "Failed to create remote thread");
82
- }
83
-
84
- CloseHandle(hThread);
85
- return new { success = true, remoteThreadId = threadId };
86
- } finally {
87
- VirtualFreeEx(hProcess, remoteMem, 0, MEM_RELEASE);
88
- }
89
- } finally {
90
- CloseHandle(hProcess);
91
- }
92
- }
93
- }
94
- "@
95
-
96
- try {
97
- $result = [DllInjector]::Inject(${pid}, "${dllPath.replace(/\\/g, '\\\\').replace(/"/g, '`"').replace(/`/g, '``').replace(/\$/g, '`$')}")
98
- $result | ConvertTo-Json -Compress
99
- } catch {
100
- @{ success = $false; error = $_.Exception.Message } | ConvertTo-Json -Compress
101
- }
4
+ return `
5
+ Add-Type @"
6
+ using System;
7
+ using System.Runtime.InteropServices;
8
+ using System.ComponentModel;
9
+ using System.IO;
10
+
11
+ public class DllInjector {
12
+ [DllImport("kernel32.dll", SetLastError = true)]
13
+ public static extern IntPtr OpenProcess(int access, bool inherit, int pid);
14
+
15
+ [DllImport("kernel32.dll", SetLastError = true)]
16
+ public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr addr, int size, int allocType, int protect);
17
+
18
+ [DllImport("kernel32.dll", SetLastError = true)]
19
+ public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr addr, byte[] buffer, int size, out int written);
20
+
21
+ [DllImport("kernel32.dll", SetLastError = true)]
22
+ public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr attr, int stackSize, IntPtr startAddr, IntPtr param, int flags, out int threadId);
23
+
24
+ [DllImport("kernel32.dll", SetLastError = true)]
25
+ public static extern IntPtr GetModuleHandle(string name);
26
+
27
+ [DllImport("kernel32.dll", SetLastError = true)]
28
+ public static extern IntPtr GetProcAddress(IntPtr hModule, string name);
29
+
30
+ [DllImport("kernel32.dll", SetLastError = true)]
31
+ public static extern bool CloseHandle(IntPtr handle);
32
+
33
+ [DllImport("kernel32.dll", SetLastError = true)]
34
+ public static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr addr, int size, int freeType);
35
+
36
+ const int PROCESS_CREATE_THREAD = 0x0002;
37
+ const int PROCESS_QUERY_INFORMATION = 0x0400;
38
+ const int PROCESS_VM_OPERATION = 0x0008;
39
+ const int PROCESS_VM_WRITE = 0x0020;
40
+ const int MEM_COMMIT = 0x1000;
41
+ const int MEM_RESERVE = 0x2000;
42
+ const int PAGE_READWRITE = 0x04;
43
+ const int MEM_RELEASE = 0x8000;
44
+
45
+ public static object Inject(int pid, string dllPath) {
46
+ if (!File.Exists(dllPath)) {
47
+ return new { success = false, error = "DLL not found: " + dllPath };
48
+ }
49
+
50
+ IntPtr hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, false, pid);
51
+ if (hProcess == IntPtr.Zero) {
52
+ int error = Marshal.GetLastWin32Error();
53
+ throw new Win32Exception(error, "Failed to open process. Run as Administrator.");
54
+ }
55
+
56
+ try {
57
+ byte[] dllBytes = System.Text.Encoding.ASCII.GetBytes(dllPath + "\\0");
58
+ IntPtr remoteMem = VirtualAllocEx(hProcess, IntPtr.Zero, dllBytes.Length, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
59
+ if (remoteMem == IntPtr.Zero) {
60
+ int error = Marshal.GetLastWin32Error();
61
+ throw new Win32Exception(error, "Failed to allocate memory in target");
62
+ }
63
+
64
+ try {
65
+ int written;
66
+ if (!WriteProcessMemory(hProcess, remoteMem, dllBytes, dllBytes.Length, out written)) {
67
+ int error = Marshal.GetLastWin32Error();
68
+ throw new Win32Exception(error, "Failed to write DLL path to target");
69
+ }
70
+
71
+ IntPtr hKernel32 = GetModuleHandle("kernel32.dll");
72
+ IntPtr loadLibraryAddr = GetProcAddress(hKernel32, "LoadLibraryA");
73
+ if (loadLibraryAddr == IntPtr.Zero) {
74
+ throw new Exception("Failed to get LoadLibraryA address");
75
+ }
76
+
77
+ int threadId;
78
+ IntPtr hThread = CreateRemoteThread(hProcess, IntPtr.Zero, 0, loadLibraryAddr, remoteMem, 0, out threadId);
79
+ if (hThread == IntPtr.Zero) {
80
+ int error = Marshal.GetLastWin32Error();
81
+ throw new Win32Exception(error, "Failed to create remote thread");
82
+ }
83
+
84
+ CloseHandle(hThread);
85
+ return new { success = true, remoteThreadId = threadId };
86
+ } finally {
87
+ VirtualFreeEx(hProcess, remoteMem, 0, MEM_RELEASE);
88
+ }
89
+ } finally {
90
+ CloseHandle(hProcess);
91
+ }
92
+ }
93
+ }
94
+ "@
95
+
96
+ try {
97
+ $result = [DllInjector]::Inject(${pid}, "${dllPath.replace(/\\/g, '\\\\').replace(/"/g, '`"').replace(/`/g, '``').replace(/\$/g, '`$')}")
98
+ $result | ConvertTo-Json -Compress
99
+ } catch {
100
+ @{ success = $false; error = $_.Exception.Message } | ConvertTo-Json -Compress
101
+ }
102
102
  `.trim();
103
103
  }
104
104
  export async function injectDll(platform, pid, dllPath) {
@@ -130,93 +130,93 @@ export async function injectDll(platform, pid, dllPath) {
130
130
  }
131
131
  }
132
132
  function buildShellcodeInjectionScript(pid, shellcode) {
133
- return `
134
- Add-Type @"
135
- using System;
136
- using System.Runtime.InteropServices;
137
- using System.ComponentModel;
138
-
139
- public class ShellcodeInjector {
140
- [DllImport("kernel32.dll", SetLastError = true)]
141
- public static extern IntPtr OpenProcess(int access, bool inherit, int pid);
142
-
143
- [DllImport("kernel32.dll", SetLastError = true)]
144
- public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr addr, int size, int allocType, int protect);
145
-
146
- [DllImport("kernel32.dll", SetLastError = true)]
147
- public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr addr, byte[] buffer, int size, out int written);
148
-
149
- [DllImport("kernel32.dll", SetLastError = true)]
150
- public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr attr, int stackSize, IntPtr startAddr, IntPtr param, int flags, out int threadId);
151
-
152
- [DllImport("kernel32.dll", SetLastError = true)]
153
- public static extern bool CloseHandle(IntPtr handle);
154
-
155
- [DllImport("kernel32.dll", SetLastError = true)]
156
- public static extern bool VirtualProtectEx(IntPtr hProcess, IntPtr addr, int size, int newProtect, out int oldProtect);
157
-
158
- const int PROCESS_CREATE_THREAD = 0x0002;
159
- const int PROCESS_QUERY_INFORMATION = 0x0400;
160
- const int PROCESS_VM_OPERATION = 0x0008;
161
- const int PROCESS_VM_WRITE = 0x0020;
162
- const int MEM_COMMIT = 0x1000;
163
- const int MEM_RESERVE = 0x2000;
164
- const int PAGE_READWRITE = 0x04;
165
- const int PAGE_EXECUTE_READWRITE = 0x40;
166
-
167
- public static object Inject(int pid, byte[] shellcode) {
168
- IntPtr hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, false, pid);
169
- if (hProcess == IntPtr.Zero) {
170
- int error = Marshal.GetLastWin32Error();
171
- throw new Win32Exception(error, "Failed to open process. Run as Administrator.");
172
- }
173
-
174
- try {
175
- IntPtr remoteMem = VirtualAllocEx(hProcess, IntPtr.Zero, shellcode.Length, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
176
- if (remoteMem == IntPtr.Zero) {
177
- int error = Marshal.GetLastWin32Error();
178
- throw new Win32Exception(error, "Failed to allocate memory in target");
179
- }
180
-
181
- try {
182
- int written;
183
- if (!WriteProcessMemory(hProcess, remoteMem, shellcode, shellcode.Length, out written)) {
184
- int error = Marshal.GetLastWin32Error();
185
- throw new Win32Exception(error, "Failed to write shellcode to target");
186
- }
187
-
188
- int oldProtect;
189
- if (!VirtualProtectEx(hProcess, remoteMem, shellcode.Length, PAGE_EXECUTE_READWRITE, out oldProtect)) {
190
- int error = Marshal.GetLastWin32Error();
191
- throw new Win32Exception(error, "Failed to change memory protection to executable");
192
- }
193
-
194
- int threadId;
195
- IntPtr hThread = CreateRemoteThread(hProcess, IntPtr.Zero, 0, remoteMem, IntPtr.Zero, 0, out threadId);
196
- if (hThread == IntPtr.Zero) {
197
- int error = Marshal.GetLastWin32Error();
198
- throw new Win32Exception(error, "Failed to create remote thread");
199
- }
200
-
201
- CloseHandle(hThread);
202
- return new { success = true, remoteThreadId = threadId };
203
- } finally {
204
- // Note: Memory is not freed to allow shellcode to execute
205
- }
206
- } finally {
207
- CloseHandle(hProcess);
208
- }
209
- }
210
- }
211
- "@
212
-
213
- try {
214
- $shellcode = @(${Array.from(shellcode).join(',')})
215
- $result = [ShellcodeInjector]::Inject(${pid}, $shellcode)
216
- $result | ConvertTo-Json -Compress
217
- } catch {
218
- @{ success = $false; error = $_.Exception.Message } | ConvertTo-Json -Compress
219
- }
133
+ return `
134
+ Add-Type @"
135
+ using System;
136
+ using System.Runtime.InteropServices;
137
+ using System.ComponentModel;
138
+
139
+ public class ShellcodeInjector {
140
+ [DllImport("kernel32.dll", SetLastError = true)]
141
+ public static extern IntPtr OpenProcess(int access, bool inherit, int pid);
142
+
143
+ [DllImport("kernel32.dll", SetLastError = true)]
144
+ public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr addr, int size, int allocType, int protect);
145
+
146
+ [DllImport("kernel32.dll", SetLastError = true)]
147
+ public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr addr, byte[] buffer, int size, out int written);
148
+
149
+ [DllImport("kernel32.dll", SetLastError = true)]
150
+ public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr attr, int stackSize, IntPtr startAddr, IntPtr param, int flags, out int threadId);
151
+
152
+ [DllImport("kernel32.dll", SetLastError = true)]
153
+ public static extern bool CloseHandle(IntPtr handle);
154
+
155
+ [DllImport("kernel32.dll", SetLastError = true)]
156
+ public static extern bool VirtualProtectEx(IntPtr hProcess, IntPtr addr, int size, int newProtect, out int oldProtect);
157
+
158
+ const int PROCESS_CREATE_THREAD = 0x0002;
159
+ const int PROCESS_QUERY_INFORMATION = 0x0400;
160
+ const int PROCESS_VM_OPERATION = 0x0008;
161
+ const int PROCESS_VM_WRITE = 0x0020;
162
+ const int MEM_COMMIT = 0x1000;
163
+ const int MEM_RESERVE = 0x2000;
164
+ const int PAGE_READWRITE = 0x04;
165
+ const int PAGE_EXECUTE_READWRITE = 0x40;
166
+
167
+ public static object Inject(int pid, byte[] shellcode) {
168
+ IntPtr hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, false, pid);
169
+ if (hProcess == IntPtr.Zero) {
170
+ int error = Marshal.GetLastWin32Error();
171
+ throw new Win32Exception(error, "Failed to open process. Run as Administrator.");
172
+ }
173
+
174
+ try {
175
+ IntPtr remoteMem = VirtualAllocEx(hProcess, IntPtr.Zero, shellcode.Length, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
176
+ if (remoteMem == IntPtr.Zero) {
177
+ int error = Marshal.GetLastWin32Error();
178
+ throw new Win32Exception(error, "Failed to allocate memory in target");
179
+ }
180
+
181
+ try {
182
+ int written;
183
+ if (!WriteProcessMemory(hProcess, remoteMem, shellcode, shellcode.Length, out written)) {
184
+ int error = Marshal.GetLastWin32Error();
185
+ throw new Win32Exception(error, "Failed to write shellcode to target");
186
+ }
187
+
188
+ int oldProtect;
189
+ if (!VirtualProtectEx(hProcess, remoteMem, shellcode.Length, PAGE_EXECUTE_READWRITE, out oldProtect)) {
190
+ int error = Marshal.GetLastWin32Error();
191
+ throw new Win32Exception(error, "Failed to change memory protection to executable");
192
+ }
193
+
194
+ int threadId;
195
+ IntPtr hThread = CreateRemoteThread(hProcess, IntPtr.Zero, 0, remoteMem, IntPtr.Zero, 0, out threadId);
196
+ if (hThread == IntPtr.Zero) {
197
+ int error = Marshal.GetLastWin32Error();
198
+ throw new Win32Exception(error, "Failed to create remote thread");
199
+ }
200
+
201
+ CloseHandle(hThread);
202
+ return new { success = true, remoteThreadId = threadId };
203
+ } finally {
204
+ // Note: Memory is not freed to allow shellcode to execute
205
+ }
206
+ } finally {
207
+ CloseHandle(hProcess);
208
+ }
209
+ }
210
+ }
211
+ "@
212
+
213
+ try {
214
+ $shellcode = @(${Array.from(shellcode).join(',')})
215
+ $result = [ShellcodeInjector]::Inject(${pid}, $shellcode)
216
+ $result | ConvertTo-Json -Compress
217
+ } catch {
218
+ @{ success = $false; error = $_.Exception.Message } | ConvertTo-Json -Compress
219
+ }
220
220
  `.trim();
221
221
  }
222
222
  export async function injectShellcode(platform, pid, shellcode, encoding = 'hex') {
@@ -2,59 +2,61 @@ import { promises as fs } from 'node:fs';
2
2
  import { logger } from '../../../utils/logger.js';
3
3
  import { nativeMemoryManager } from '../../../native/NativeMemoryManager.js';
4
4
  import { isKoffiAvailable } from '../../../native/Win32API.js';
5
+ import { MEMORY_MAX_READ_BYTES } from '../../../constants.js';
5
6
  import { execAsync, executePowerShellScript, } from '../../process/memory/types.js';
7
+ const HEX_ADDR = /^(?:0x)?[0-9a-fA-F]{1,16}$/;
6
8
  async function readMemoryWindows(pid, address, size) {
7
9
  try {
8
- const psScript = `
9
- Add-Type @"
10
- using System;
11
- using System.Runtime.InteropServices;
12
- using System.ComponentModel;
13
-
14
- public class MemoryReader {
15
- [DllImport("kernel32.dll", SetLastError = true)]
16
- public static extern IntPtr OpenProcess(int access, bool inherit, int pid);
17
-
18
- [DllImport("kernel32.dll", SetLastError = true)]
19
- public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr addr, byte[] buffer, int size, out int read);
20
-
21
- [DllImport("kernel32.dll", SetLastError = true)]
22
- public static extern bool CloseHandle(IntPtr handle);
23
-
24
- const int PROCESS_VM_READ = 0x0010;
25
- const int PROCESS_QUERY_INFORMATION = 0x0400;
26
-
27
- public static string ReadMemory(int pid, long address, int size) {
28
- IntPtr hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, false, pid);
29
- if (hProcess == IntPtr.Zero) {
30
- int error = Marshal.GetLastWin32Error();
31
- throw new Win32Exception(error, "Failed to open process. Run as Administrator.");
32
- }
33
-
34
- try {
35
- byte[] buffer = new byte[size];
36
- int bytesRead;
37
- bool success = ReadProcessMemory(hProcess, (IntPtr)address, buffer, size, out bytesRead);
38
-
39
- if (!success) {
40
- int error = Marshal.GetLastWin32Error();
41
- throw new Win32Exception(error, "Failed to read memory");
42
- }
43
-
44
- return BitConverter.ToString(buffer, 0, bytesRead).Replace("-", " ");
45
- } finally {
46
- CloseHandle(hProcess);
47
- }
48
- }
49
- }
50
- "@
51
-
52
- try {
53
- $result = [MemoryReader]::ReadMemory(${pid}, ${address}, ${size})
54
- @{ success = $true; data = $result } | ConvertTo-Json -Compress
55
- } catch {
56
- @{ success = $false; error = $_.Exception.Message } | ConvertTo-Json -Compress
57
- }
10
+ const psScript = `
11
+ Add-Type @"
12
+ using System;
13
+ using System.Runtime.InteropServices;
14
+ using System.ComponentModel;
15
+
16
+ public class MemoryReader {
17
+ [DllImport("kernel32.dll", SetLastError = true)]
18
+ public static extern IntPtr OpenProcess(int access, bool inherit, int pid);
19
+
20
+ [DllImport("kernel32.dll", SetLastError = true)]
21
+ public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr addr, byte[] buffer, int size, out int read);
22
+
23
+ [DllImport("kernel32.dll", SetLastError = true)]
24
+ public static extern bool CloseHandle(IntPtr handle);
25
+
26
+ const int PROCESS_VM_READ = 0x0010;
27
+ const int PROCESS_QUERY_INFORMATION = 0x0400;
28
+
29
+ public static string ReadMemory(int pid, long address, int size) {
30
+ IntPtr hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, false, pid);
31
+ if (hProcess == IntPtr.Zero) {
32
+ int error = Marshal.GetLastWin32Error();
33
+ throw new Win32Exception(error, "Failed to open process. Run as Administrator.");
34
+ }
35
+
36
+ try {
37
+ byte[] buffer = new byte[size];
38
+ int bytesRead;
39
+ bool success = ReadProcessMemory(hProcess, (IntPtr)address, buffer, size, out bytesRead);
40
+
41
+ if (!success) {
42
+ int error = Marshal.GetLastWin32Error();
43
+ throw new Win32Exception(error, "Failed to read memory");
44
+ }
45
+
46
+ return BitConverter.ToString(buffer, 0, bytesRead).Replace("-", " ");
47
+ } finally {
48
+ CloseHandle(hProcess);
49
+ }
50
+ }
51
+ }
52
+ "@
53
+
54
+ try {
55
+ $result = [MemoryReader]::ReadMemory(${pid}, ${address}, ${size})
56
+ @{ success = $true; data = $result } | ConvertTo-Json -Compress
57
+ } catch {
58
+ @{ success = $false; error = $_.Exception.Message } | ConvertTo-Json -Compress
59
+ }
58
60
  `;
59
61
  const { stdout } = await executePowerShellScript(psScript, { maxBuffer: 1024 * 1024 * 10 });
60
62
  const _trimmed = stdout.trim();
@@ -107,11 +109,32 @@ async function readMemoryMac(pid, address, size, checkProtectionFn) {
107
109
  if (address === 0) {
108
110
  return { success: false, error: 'Invalid address: null pointer (0x0)' };
109
111
  }
110
- const MAX_READ_SIZE = 16 * 1024 * 1024;
111
- if (size <= 0 || size > MAX_READ_SIZE) {
112
- return { success: false, error: `Invalid size: must be 1–${MAX_READ_SIZE} bytes` };
112
+ if (size <= 0 || size > MEMORY_MAX_READ_BYTES) {
113
+ return { success: false, error: `Invalid size: must be 1–${MEMORY_MAX_READ_BYTES} bytes` };
113
114
  }
114
115
  const addrHex = `0x${address.toString(16)}`;
116
+ try {
117
+ const { createPlatformProvider } = await import('../../../native/platform/factory.js');
118
+ const provider = createPlatformProvider();
119
+ const avail = await provider.checkAvailability();
120
+ if (avail.available) {
121
+ const handle = provider.openProcess(pid, false);
122
+ try {
123
+ const result = provider.readMemory(handle, BigInt(address), size);
124
+ const hex = Array.from(result.data.subarray(0, result.bytesRead))
125
+ .map((b) => b.toString(16).padStart(2, '0').toUpperCase())
126
+ .join(' ');
127
+ logger.debug('Native Mach memory read succeeded (zero-pause)');
128
+ return { success: true, data: hex };
129
+ }
130
+ finally {
131
+ provider.closeProcess(handle);
132
+ }
133
+ }
134
+ }
135
+ catch (nativeErr) {
136
+ logger.debug('Native Mach read failed, falling back to lldb:', nativeErr);
137
+ }
115
138
  const prot = await checkProtectionFn(pid, addrHex);
116
139
  if (!prot.success) {
117
140
  return { success: false, error: `Cannot verify memory region: ${prot.error}` };
@@ -144,10 +167,19 @@ async function readMemoryMac(pid, address, size, checkProtectionFn) {
144
167
  }
145
168
  export async function readMemory(platform, pid, address, size, checkProtectionFn) {
146
169
  try {
170
+ if (!HEX_ADDR.test(address)) {
171
+ return { success: false, error: 'Invalid address format. Use hex like "0x12345678"' };
172
+ }
147
173
  const addrNum = parseInt(address, 16);
148
174
  if (isNaN(addrNum)) {
149
175
  return { success: false, error: 'Invalid address format. Use hex like "0x12345678"' };
150
176
  }
177
+ if (size <= 0 || size > MEMORY_MAX_READ_BYTES) {
178
+ return {
179
+ success: false,
180
+ error: `Read size must be 1–${MEMORY_MAX_READ_BYTES} bytes (${(MEMORY_MAX_READ_BYTES / 1024 / 1024).toFixed(0)} MB)`,
181
+ };
182
+ }
151
183
  if (platform === 'win32' && isKoffiAvailable()) {
152
184
  try {
153
185
  const result = await nativeMemoryManager.readMemory(pid, address, size);
@@ -1,57 +1,57 @@
1
1
  import { logger } from '../../../utils/logger.js';
2
2
  import { execFileAsync, executePowerShellScript, } from '../../process/memory/types.js';
3
3
  function buildMemoryDumpScript(pid, address, size, outputPath) {
4
- return `
5
- Add-Type @"
6
- using System;
7
- using System.Runtime.InteropServices;
8
- using System.IO;
9
- using System.ComponentModel;
10
-
11
- public class MemoryDumper {
12
- [DllImport("kernel32.dll", SetLastError = true)]
13
- public static extern IntPtr OpenProcess(int access, bool inherit, int pid);
14
-
15
- [DllImport("kernel32.dll", SetLastError = true)]
16
- public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr addr, byte[] buffer, int size, out int read);
17
-
18
- [DllImport("kernel32.dll", SetLastError = true)]
19
- public static extern bool CloseHandle(IntPtr handle);
20
-
21
- const int PROCESS_VM_READ = 0x0010;
22
- const int PROCESS_QUERY_INFORMATION = 0x0400;
23
-
24
- public static string DumpMemory(int pid, long address, int size, string outputPath) {
25
- IntPtr hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, false, pid);
26
- if (hProcess == IntPtr.Zero) {
27
- int error = Marshal.GetLastWin32Error();
28
- throw new Win32Exception(error, "Failed to open process. Run as Administrator.");
29
- }
30
-
31
- try {
32
- byte[] buffer = new byte[size];
33
- int bytesRead;
34
-
35
- if (!ReadProcessMemory(hProcess, (IntPtr)address, buffer, size, out bytesRead)) {
36
- int error = Marshal.GetLastWin32Error();
37
- throw new Win32Exception(error, "Failed to read memory");
38
- }
39
-
40
- File.WriteAllBytes(outputPath, buffer);
41
- return "Dumped " + bytesRead + " bytes to " + outputPath;
42
- } finally {
43
- CloseHandle(hProcess);
44
- }
45
- }
46
- }
47
- "@
48
-
49
- try {
50
- $result = [MemoryDumper]::DumpMemory(${pid}, ${address}, ${size}, "${outputPath.replace(/\\/g, '\\\\').replace(/"/g, '`"').replace(/\$/g, '`$')}")
51
- @{ success = $true; message = $result } | ConvertTo-Json -Compress
52
- } catch {
53
- @{ success = $false; error = $_.Exception.Message } | ConvertTo-Json -Compress
54
- }
4
+ return `
5
+ Add-Type @"
6
+ using System;
7
+ using System.Runtime.InteropServices;
8
+ using System.IO;
9
+ using System.ComponentModel;
10
+
11
+ public class MemoryDumper {
12
+ [DllImport("kernel32.dll", SetLastError = true)]
13
+ public static extern IntPtr OpenProcess(int access, bool inherit, int pid);
14
+
15
+ [DllImport("kernel32.dll", SetLastError = true)]
16
+ public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr addr, byte[] buffer, int size, out int read);
17
+
18
+ [DllImport("kernel32.dll", SetLastError = true)]
19
+ public static extern bool CloseHandle(IntPtr handle);
20
+
21
+ const int PROCESS_VM_READ = 0x0010;
22
+ const int PROCESS_QUERY_INFORMATION = 0x0400;
23
+
24
+ public static string DumpMemory(int pid, long address, int size, string outputPath) {
25
+ IntPtr hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, false, pid);
26
+ if (hProcess == IntPtr.Zero) {
27
+ int error = Marshal.GetLastWin32Error();
28
+ throw new Win32Exception(error, "Failed to open process. Run as Administrator.");
29
+ }
30
+
31
+ try {
32
+ byte[] buffer = new byte[size];
33
+ int bytesRead;
34
+
35
+ if (!ReadProcessMemory(hProcess, (IntPtr)address, buffer, size, out bytesRead)) {
36
+ int error = Marshal.GetLastWin32Error();
37
+ throw new Win32Exception(error, "Failed to read memory");
38
+ }
39
+
40
+ File.WriteAllBytes(outputPath, buffer);
41
+ return "Dumped " + bytesRead + " bytes to " + outputPath;
42
+ } finally {
43
+ CloseHandle(hProcess);
44
+ }
45
+ }
46
+ }
47
+ "@
48
+
49
+ try {
50
+ $result = [MemoryDumper]::DumpMemory(${pid}, ${address}, ${size}, "${outputPath.replace(/\\/g, '\\\\').replace(/"/g, '`"').replace(/\$/g, '`$')}")
51
+ @{ success = $true; message = $result } | ConvertTo-Json -Compress
52
+ } catch {
53
+ @{ success = $false; error = $_.Exception.Message } | ConvertTo-Json -Compress
54
+ }
55
55
  `.trim();
56
56
  }
57
57
  export async function dumpMemoryRegion(platform, pid, startAddress, size, outputPath) {