@jshookmcp/jshook 0.2.3 → 0.2.6

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 (583) 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 +171 -0
  7. package/dist/packages/extension-sdk/src/workflow.js +272 -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/BrowserPool.d.ts +49 -0
  24. package/dist/src/modules/browser/BrowserPool.js +288 -0
  25. package/dist/src/modules/browser/TabRegistry.js +2 -2
  26. package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
  27. package/dist/src/modules/browser/UnifiedBrowserManager.js +18 -3
  28. package/dist/src/modules/captcha/AICaptchaDetector.d.ts +1 -10
  29. package/dist/src/modules/captcha/AICaptchaDetector.js +7 -201
  30. package/dist/src/modules/collector/CodeCollector.js +4 -5
  31. package/dist/src/modules/collector/DOMInspector.js +48 -58
  32. package/dist/src/modules/collector/PageController.d.ts +17 -4
  33. package/dist/src/modules/collector/PageController.js +2 -5
  34. package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
  35. package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
  36. package/dist/src/modules/crypto/CryptoDetector.js +2 -42
  37. package/dist/src/modules/crypto/CryptoRules.js +1 -1
  38. package/dist/src/modules/debugger/BlackboxManager.js +1 -1
  39. package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
  40. package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +4 -2
  41. package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
  42. package/dist/src/modules/deobfuscator/AdvancedDeobfuscator.d.ts +5 -0
  43. package/dist/src/modules/deobfuscator/AdvancedDeobfuscator.js +43 -2
  44. package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
  45. package/dist/src/modules/deobfuscator/Deobfuscator.js +9 -39
  46. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
  47. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
  48. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +1 -2
  49. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +3 -55
  50. package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
  51. package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
  52. package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
  53. package/dist/src/modules/deobfuscator/webcrack.js +15 -2
  54. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
  55. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
  56. package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
  57. package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
  58. package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
  59. package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
  60. package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
  61. package/dist/src/modules/external/ExternalToolRunner.js +25 -22
  62. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.compose.js +5 -5
  63. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.network.js +311 -311
  64. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.runtime.js +410 -410
  65. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.storage.js +122 -122
  66. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
  67. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
  68. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.dynamic.js +194 -194
  69. package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
  70. package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
  71. package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
  72. package/dist/src/modules/monitor/PlaywrightNetworkMonitor.js +62 -62
  73. package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
  74. package/dist/src/modules/process/LinuxProcessManager.js +2 -0
  75. package/dist/src/modules/process/MacProcessManager.js +25 -25
  76. package/dist/src/modules/process/MemoryManager.d.ts +1 -1
  77. package/dist/src/modules/process/MemoryManager.js +2 -2
  78. package/dist/src/modules/process/memory/AuditTrail.js +1 -1
  79. package/dist/src/modules/process/memory/availability.js +49 -49
  80. package/dist/src/modules/process/memory/injector.js +185 -185
  81. package/dist/src/modules/process/memory/reader.js +85 -53
  82. package/dist/src/modules/process/memory/regions.dump.js +51 -51
  83. package/dist/src/modules/process/memory/regions.enumerate.js +108 -108
  84. package/dist/src/modules/process/memory/regions.modules.js +80 -80
  85. package/dist/src/modules/process/memory/regions.protection.js +148 -115
  86. package/dist/src/modules/process/memory/scanner.d.ts +5 -1
  87. package/dist/src/modules/process/memory/scanner.darwin.js +98 -41
  88. package/dist/src/modules/process/memory/scanner.js +88 -4
  89. package/dist/src/modules/process/memory/scanner.windows.js +124 -124
  90. package/dist/src/modules/process/memory/writer.js +98 -58
  91. package/dist/src/modules/security/ExecutionSandbox.js +51 -52
  92. package/dist/src/modules/stealth/FingerprintManager.js +1 -1
  93. package/dist/src/modules/stealth/StealthScripts.d.ts +1 -0
  94. package/dist/src/modules/stealth/StealthScripts.js +18 -13
  95. package/dist/src/modules/stealth/StealthVerifier.js +1 -3
  96. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
  97. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
  98. package/dist/src/modules/trace/TraceDB.js +75 -69
  99. package/dist/src/modules/trace/TraceRecorder.js +1 -5
  100. package/dist/src/native/AntiCheatDetector.js +67 -16
  101. package/dist/src/native/CodeInjector.js +3 -3
  102. package/dist/src/native/HardwareBreakpoint.js +24 -15
  103. package/dist/src/native/HeapAnalyzer.js +2 -2
  104. package/dist/src/native/MemoryController.js +1 -1
  105. package/dist/src/native/MemoryScanSession.js +2 -2
  106. package/dist/src/native/MemoryScanner.js +4 -8
  107. package/dist/src/native/NativeMemoryManager.impl.js +2 -2
  108. package/dist/src/native/PEAnalyzer.js +14 -15
  109. package/dist/src/native/PointerChainEngine.js +2 -4
  110. package/dist/src/native/ScriptLoader.js +4 -9
  111. package/dist/src/native/Speedhack.js +1 -1
  112. package/dist/src/native/StructureAnalyzer.js +52 -33
  113. package/dist/src/native/Win32API.d.ts +1 -0
  114. package/dist/src/native/Win32API.js +13 -0
  115. package/dist/src/native/Win32Debug.js +19 -19
  116. package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
  117. package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
  118. package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
  119. package/dist/src/server/MCPServer.context.d.ts +3 -1
  120. package/dist/src/server/MCPServer.d.ts +2 -1
  121. package/dist/src/server/MCPServer.domain.d.ts +1 -1
  122. package/dist/src/server/MCPServer.domain.js +81 -16
  123. package/dist/src/server/MCPServer.js +41 -14
  124. package/dist/src/server/MCPServer.resources.d.ts +2 -0
  125. package/dist/src/server/MCPServer.resources.js +91 -0
  126. package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
  127. package/dist/src/server/MCPServer.search.helpers.js +1 -1
  128. package/dist/src/server/MCPServer.transport.js +12 -0
  129. package/dist/src/server/ToolCallContextGuard.js +8 -0
  130. package/dist/src/server/ToolRouter.d.ts +25 -9
  131. package/dist/src/server/ToolRouter.intent.d.ts +26 -0
  132. package/dist/src/server/ToolRouter.intent.js +77 -0
  133. package/dist/src/server/ToolRouter.js +103 -284
  134. package/dist/src/server/ToolRouter.policy.d.ts +22 -0
  135. package/dist/src/server/ToolRouter.policy.js +163 -0
  136. package/dist/src/server/ToolRouter.probe.d.ts +17 -0
  137. package/dist/src/server/ToolRouter.probe.js +103 -0
  138. package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
  139. package/dist/src/server/ToolRouter.renderer.js +52 -0
  140. package/dist/src/server/activation/ActivationController.js +15 -12
  141. package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
  142. package/dist/src/server/activation/PredictiveBooster.js +1 -3
  143. package/dist/src/server/domains/analysis/definitions.js +155 -655
  144. package/dist/src/server/domains/analysis/handlers.impl.js +26 -20
  145. package/dist/src/server/domains/analysis/handlers.web-tools.js +2 -1
  146. package/dist/src/server/domains/analysis/manifest.js +6 -4
  147. package/dist/src/server/domains/antidebug/definitions.js +25 -111
  148. package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
  149. package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
  150. package/dist/src/server/domains/browser/definitions.tools.page-core.js +210 -439
  151. package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
  152. package/dist/src/server/domains/browser/definitions.tools.runtime.js +98 -211
  153. package/dist/src/server/domains/browser/definitions.tools.security.js +194 -339
  154. package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
  155. package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
  156. package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
  157. package/dist/src/server/domains/browser/handlers/framework-state.js +27 -9
  158. package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
  159. package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
  160. package/dist/src/server/domains/browser/handlers/stealth-injection.d.ts +1 -0
  161. package/dist/src/server/domains/browser/handlers/stealth-injection.js +3 -0
  162. package/dist/src/server/domains/browser/handlers.impl.d.ts +1 -2
  163. package/dist/src/server/domains/browser/handlers.impl.js +2 -3
  164. package/dist/src/server/domains/browser/manifest.js +37 -13
  165. package/dist/src/server/domains/coordination/definitions.js +50 -216
  166. package/dist/src/server/domains/coordination/index.d.ts +2 -1
  167. package/dist/src/server/domains/coordination/index.js +1 -0
  168. package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
  169. package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
  170. package/dist/src/server/domains/debugger/manifest.js +9 -2
  171. package/dist/src/server/domains/encoding/definitions.js +43 -153
  172. package/dist/src/server/domains/encoding/handlers.base.js +2 -2
  173. package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
  174. package/dist/src/server/domains/evidence/definitions.js +42 -0
  175. package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
  176. package/dist/src/server/domains/evidence/handlers.js +60 -0
  177. package/dist/src/server/domains/evidence/index.d.ts +2 -0
  178. package/dist/src/server/domains/evidence/index.js +2 -0
  179. package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
  180. package/dist/src/server/domains/evidence/manifest.js +78 -0
  181. package/dist/src/server/domains/graphql/definitions.js +53 -141
  182. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
  183. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.shared.js +77 -77
  184. package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
  185. package/dist/src/server/domains/hooks/ai-handlers.js +1 -67
  186. package/dist/src/server/domains/hooks/definitions.js +69 -335
  187. package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
  188. package/dist/src/server/domains/hooks/manifest.js +1 -2
  189. package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
  190. package/dist/src/server/domains/instrumentation/definitions.js +99 -0
  191. package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
  192. package/dist/src/server/domains/instrumentation/handlers.js +206 -0
  193. package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
  194. package/dist/src/server/domains/instrumentation/index.js +2 -0
  195. package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
  196. package/dist/src/server/domains/instrumentation/manifest.js +114 -0
  197. package/dist/src/server/domains/macro/definitions.js +16 -43
  198. package/dist/src/server/domains/maintenance/definitions.js +60 -219
  199. package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
  200. package/dist/src/server/domains/memory/definitions.js +387 -559
  201. package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
  202. package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
  203. package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
  204. package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
  205. package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
  206. package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
  207. package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
  208. package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
  209. package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
  210. package/dist/src/server/domains/memory/handlers/scan.js +97 -0
  211. package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
  212. package/dist/src/server/domains/memory/handlers/session.js +49 -0
  213. package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
  214. package/dist/src/server/domains/memory/handlers/structure.js +74 -0
  215. package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
  216. package/dist/src/server/domains/memory/handlers.impl.js +63 -494
  217. package/dist/src/server/domains/memory/manifest.js +236 -64
  218. package/dist/src/server/domains/native-bridge/definitions.js +54 -192
  219. package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
  220. package/dist/src/server/domains/native-bridge/index.js +2 -1
  221. package/dist/src/server/domains/network/auth-extractor.js +1 -1
  222. package/dist/src/server/domains/network/definitions.js +175 -578
  223. package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
  224. package/dist/src/server/domains/network/handlers.base.core.js +623 -0
  225. package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
  226. package/dist/src/server/domains/network/handlers.base.js +3 -878
  227. package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
  228. package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
  229. package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
  230. package/dist/src/server/domains/network/handlers.base.types.js +89 -0
  231. package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
  232. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
  233. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
  234. package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
  235. package/dist/src/server/domains/network/manifest.js +15 -0
  236. package/dist/src/server/domains/network/replay.js +1 -4
  237. package/dist/src/server/domains/platform/definitions.js +121 -112
  238. package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +4 -0
  239. package/dist/src/server/domains/platform/handlers/bridge-handlers.js +193 -4
  240. package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
  241. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
  242. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
  243. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
  244. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
  245. package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
  246. package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
  247. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
  248. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
  249. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
  250. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
  251. package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +3 -3
  252. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
  253. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
  254. package/dist/src/server/domains/platform/handlers.d.ts +48 -0
  255. package/dist/src/server/domains/platform/handlers.js +29 -0
  256. package/dist/src/server/domains/platform/manifest.js +38 -0
  257. package/dist/src/server/domains/process/definitions.js +163 -647
  258. package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
  259. package/dist/src/server/domains/process/handlers.base.js +7 -462
  260. package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
  261. package/dist/src/server/domains/process/handlers.base.process.js +417 -0
  262. package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
  263. package/dist/src/server/domains/process/handlers.base.types.js +50 -0
  264. package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +18 -16
  265. package/dist/src/server/domains/process/manifest.js +6 -1
  266. package/dist/src/server/domains/sandbox/definitions.js +11 -33
  267. package/dist/src/server/domains/sandbox/handlers.js +8 -3
  268. package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
  269. package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
  270. package/dist/src/server/domains/shared/modules.d.ts +0 -2
  271. package/dist/src/server/domains/shared/modules.js +0 -1
  272. package/dist/src/server/domains/shared-state-board/definitions.d.ts +2 -0
  273. package/dist/src/server/domains/shared-state-board/definitions.js +78 -0
  274. package/dist/src/server/domains/shared-state-board/handlers.impl.d.ts +58 -0
  275. package/dist/src/server/domains/shared-state-board/handlers.impl.js +419 -0
  276. package/dist/src/server/domains/shared-state-board/index.d.ts +2 -0
  277. package/dist/src/server/domains/shared-state-board/index.js +2 -0
  278. package/dist/src/server/domains/shared-state-board/manifest.d.ts +57 -0
  279. package/dist/src/server/domains/shared-state-board/manifest.js +74 -0
  280. package/dist/src/server/domains/sourcemap/definitions.js +27 -111
  281. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
  282. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
  283. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
  284. package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
  285. package/dist/src/server/domains/sourcemap/manifest.js +1 -1
  286. package/dist/src/server/domains/streaming/definitions.js +36 -148
  287. package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
  288. package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
  289. package/dist/src/server/domains/trace/TraceSummarizer.js +8 -5
  290. package/dist/src/server/domains/trace/definitions.tools.js +51 -206
  291. package/dist/src/server/domains/trace/handlers.js +10 -12
  292. package/dist/src/server/domains/trace/index.d.ts +2 -1
  293. package/dist/src/server/domains/trace/index.js +2 -1
  294. package/dist/src/server/domains/trace/manifest.js +15 -3
  295. package/dist/src/server/domains/transform/definitions.js +50 -210
  296. package/dist/src/server/domains/transform/handlers.impl.transform-base.js +108 -108
  297. package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
  298. package/dist/src/server/domains/transform/manifest.d.ts +1 -1
  299. package/dist/src/server/domains/transform/manifest.js +1 -1
  300. package/dist/src/server/domains/wasm/definitions.js +55 -232
  301. package/dist/src/server/domains/wasm/handlers.js +1 -1
  302. package/dist/src/server/domains/workflow/definitions.js +144 -414
  303. package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +1 -1
  304. package/dist/src/server/domains/workflow/handlers.impl.workflow-api.js +51 -51
  305. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
  306. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
  307. package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
  308. package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
  309. package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
  310. package/dist/src/server/evidence/index.d.ts +2 -0
  311. package/dist/src/server/evidence/index.js +1 -0
  312. package/dist/src/server/evidence/types.d.ts +22 -0
  313. package/dist/src/server/evidence/types.js +1 -0
  314. package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
  315. package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
  316. package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
  317. package/dist/src/server/extensions/ExtensionManager.js +193 -40
  318. package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
  319. package/dist/src/server/extensions/ExtensionManager.roots.js +4 -4
  320. package/dist/src/server/extensions/plugin-config.js +1 -1
  321. package/dist/src/server/extensions/plugin-env.d.ts +1 -1
  322. package/dist/src/server/extensions/plugin-env.js +10 -4
  323. package/dist/src/server/extensions/types.d.ts +17 -0
  324. package/dist/src/server/extensions/types.js +1 -1
  325. package/dist/src/server/http/SseStream.d.ts +21 -0
  326. package/dist/src/server/http/SseStream.js +129 -0
  327. package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
  328. package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
  329. package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
  330. package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
  331. package/dist/src/server/instrumentation/index.d.ts +2 -0
  332. package/dist/src/server/instrumentation/index.js +2 -0
  333. package/dist/src/server/instrumentation/types.d.ts +62 -0
  334. package/dist/src/server/instrumentation/types.js +7 -0
  335. package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
  336. package/dist/src/server/macros/MacroConfigLoader.js +61 -59
  337. package/dist/src/server/macros/MacroRunner.js +6 -2
  338. package/dist/src/server/macros/builtins/index.d.ts +2 -3
  339. package/dist/src/server/macros/builtins/index.js +51 -7
  340. package/dist/src/server/plugins/PluginContract.d.ts +1 -1
  341. package/dist/src/server/registry/contracts.d.ts +1 -1
  342. package/dist/src/server/registry/discovery.js +5 -4
  343. package/dist/src/server/registry/ensure-browser-core.js +0 -3
  344. package/dist/src/server/registry/index.js +4 -4
  345. package/dist/src/server/registry/tool-builder.d.ts +46 -0
  346. package/dist/src/server/registry/tool-builder.js +105 -0
  347. package/dist/src/server/sandbox/QuickJSSandbox.js +16 -5
  348. package/dist/src/server/sandbox/SandboxHelpers.js +250 -250
  349. package/dist/src/server/search/EmbeddingWorker.js +5 -3
  350. package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
  351. package/dist/src/server/search/FeedbackTracker.js +26 -0
  352. package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
  353. package/dist/src/server/search/QueryNormalizer.js +94 -0
  354. package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
  355. package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
  356. package/dist/src/server/teams/TeamManager.d.ts +43 -0
  357. package/dist/src/server/teams/TeamManager.js +238 -0
  358. package/dist/src/server/teams/index.d.ts +1 -0
  359. package/dist/src/server/teams/index.js +1 -0
  360. package/dist/src/server/workflows/WorkflowContract.d.ts +44 -4
  361. package/dist/src/server/workflows/WorkflowContract.js +52 -0
  362. package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
  363. package/dist/src/server/workflows/WorkflowEngine.js +314 -4
  364. package/dist/src/types/config.d.ts +0 -14
  365. package/dist/src/types/deobfuscator.d.ts +1 -1
  366. package/dist/src/types/index.d.ts +1 -1
  367. package/dist/src/utils/DetailedDataManager.js +2 -0
  368. package/dist/src/utils/RingBuffer.js +5 -5
  369. package/dist/src/utils/TokenBudgetManager.js +1 -1
  370. package/dist/src/utils/UnifiedCacheManager.js +1 -1
  371. package/dist/src/utils/artifactRetention.js +2 -2
  372. package/dist/src/utils/betterSqlite3.d.ts +11 -0
  373. package/dist/src/utils/betterSqlite3.js +88 -0
  374. package/dist/src/utils/browserExecutable.js +2 -2
  375. package/dist/src/utils/cache/CachedDecorator.d.ts +8 -0
  376. package/dist/src/utils/cache/CachedDecorator.js +55 -0
  377. package/dist/src/utils/cache/PersistentCache.d.ts +33 -0
  378. package/dist/src/utils/cache/PersistentCache.js +246 -0
  379. package/dist/src/utils/cache/index.d.ts +2 -0
  380. package/dist/src/utils/cache/index.js +2 -0
  381. package/dist/src/utils/cliFastPath.js +5 -8
  382. package/dist/src/utils/config.js +4 -26
  383. package/dist/src/utils/environmentDoctor.js +138 -11
  384. package/dist/src/utils/outputPaths.js +16 -9
  385. package/dist/src/utils/parallel.js +1 -3
  386. package/package.json +82 -81
  387. package/scripts/postinstall.cjs +54 -27
  388. package/workflows/.gitkeep +0 -0
  389. package/workflows/anti-bot-diagnoser/.jshook-install.json +14 -0
  390. package/workflows/anti-bot-diagnoser/LICENSE +21 -0
  391. package/workflows/anti-bot-diagnoser/README.md +105 -0
  392. package/workflows/anti-bot-diagnoser/docs/agent-recipes.md +44 -0
  393. package/workflows/anti-bot-diagnoser/meta.yaml +6 -0
  394. package/workflows/anti-bot-diagnoser/package.json +22 -0
  395. package/workflows/anti-bot-diagnoser/tsconfig.json +15 -0
  396. package/workflows/anti-bot-diagnoser/workflow.ts +224 -0
  397. package/workflows/api-openapi-probe/.jshook-install.json +14 -0
  398. package/workflows/api-openapi-probe/meta.yaml +6 -0
  399. package/workflows/api-openapi-probe/package.json +22 -0
  400. package/workflows/api-openapi-probe/pnpm-lock.yaml +819 -0
  401. package/workflows/api-openapi-probe/tsconfig.json +15 -0
  402. package/workflows/api-openapi-probe/workflow.ts +40 -0
  403. package/workflows/api-probe-batch/.jshook-install.json +14 -0
  404. package/workflows/api-probe-batch/LICENSE +21 -0
  405. package/workflows/api-probe-batch/README.md +45 -0
  406. package/workflows/api-probe-batch/meta.yaml +4 -0
  407. package/workflows/api-probe-batch/package.json +23 -0
  408. package/workflows/api-probe-batch/tsconfig.json +16 -0
  409. package/workflows/api-probe-batch/workflow.ts +111 -0
  410. package/workflows/auth-bootstrap/.jshook-install.json +14 -0
  411. package/workflows/auth-bootstrap/LICENSE +21 -0
  412. package/workflows/auth-bootstrap/README.md +74 -0
  413. package/workflows/auth-bootstrap/meta.yaml +4 -0
  414. package/workflows/auth-bootstrap/package.json +23 -0
  415. package/workflows/auth-bootstrap/tsconfig.json +16 -0
  416. package/workflows/auth-bootstrap/workflow.ts +141 -0
  417. package/workflows/auth-extract/.jshook-install.json +14 -0
  418. package/workflows/auth-extract/meta.yaml +6 -0
  419. package/workflows/auth-extract/package.json +22 -0
  420. package/workflows/auth-extract/pnpm-lock.yaml +819 -0
  421. package/workflows/auth-extract/tsconfig.json +15 -0
  422. package/workflows/auth-extract/workflow.ts +36 -0
  423. package/workflows/auth-surface-mapper/.jshook-install.json +14 -0
  424. package/workflows/auth-surface-mapper/meta.yaml +6 -0
  425. package/workflows/auth-surface-mapper/package.json +22 -0
  426. package/workflows/auth-surface-mapper/pnpm-lock.yaml +819 -0
  427. package/workflows/auth-surface-mapper/tsconfig.json +15 -0
  428. package/workflows/auth-surface-mapper/workflow.ts +104 -0
  429. package/workflows/batch-register/.jshook-install.json +14 -0
  430. package/workflows/batch-register/LICENSE +21 -0
  431. package/workflows/batch-register/README.md +39 -0
  432. package/workflows/batch-register/meta.yaml +4 -0
  433. package/workflows/batch-register/package.json +23 -0
  434. package/workflows/batch-register/tsconfig.json +16 -0
  435. package/workflows/batch-register/workflow.ts +67 -0
  436. package/workflows/bundle-recovery/.jshook-install.json +14 -0
  437. package/workflows/bundle-recovery/LICENSE +21 -0
  438. package/workflows/bundle-recovery/README.md +105 -0
  439. package/workflows/bundle-recovery/docs/agent-recipes.md +44 -0
  440. package/workflows/bundle-recovery/meta.yaml +6 -0
  441. package/workflows/bundle-recovery/package.json +22 -0
  442. package/workflows/bundle-recovery/tsconfig.json +15 -0
  443. package/workflows/bundle-recovery/workflow.ts +179 -0
  444. package/workflows/challenge-detector/.jshook-install.json +14 -0
  445. package/workflows/challenge-detector/meta.yaml +14 -0
  446. package/workflows/challenge-detector/package.json +22 -0
  447. package/workflows/challenge-detector/pnpm-lock.yaml +819 -0
  448. package/workflows/challenge-detector/tsconfig.json +15 -0
  449. package/workflows/challenge-detector/workflow.ts +298 -0
  450. package/workflows/deobfuscation-pipeline/.jshook-install.json +14 -0
  451. package/workflows/deobfuscation-pipeline/meta.yaml +6 -0
  452. package/workflows/deobfuscation-pipeline/package.json +22 -0
  453. package/workflows/deobfuscation-pipeline/pnpm-lock.yaml +819 -0
  454. package/workflows/deobfuscation-pipeline/tsconfig.json +15 -0
  455. package/workflows/deobfuscation-pipeline/workflow.ts +119 -0
  456. package/workflows/electron-bridge-mapper/.jshook-install.json +14 -0
  457. package/workflows/electron-bridge-mapper/meta.yaml +6 -0
  458. package/workflows/electron-bridge-mapper/package.json +22 -0
  459. package/workflows/electron-bridge-mapper/pnpm-lock.yaml +819 -0
  460. package/workflows/electron-bridge-mapper/tsconfig.json +15 -0
  461. package/workflows/electron-bridge-mapper/workflow.ts +125 -0
  462. package/workflows/evidence-pack/.jshook-install.json +14 -0
  463. package/workflows/evidence-pack/LICENSE +21 -0
  464. package/workflows/evidence-pack/README.md +105 -0
  465. package/workflows/evidence-pack/docs/agent-recipes.md +44 -0
  466. package/workflows/evidence-pack/meta.yaml +6 -0
  467. package/workflows/evidence-pack/package.json +22 -0
  468. package/workflows/evidence-pack/tsconfig.json +15 -0
  469. package/workflows/evidence-pack/workflow.ts +154 -0
  470. package/workflows/js-bundle-search/.jshook-install.json +14 -0
  471. package/workflows/js-bundle-search/LICENSE +21 -0
  472. package/workflows/js-bundle-search/README.md +46 -0
  473. package/workflows/js-bundle-search/meta.yaml +4 -0
  474. package/workflows/js-bundle-search/package.json +23 -0
  475. package/workflows/js-bundle-search/tsconfig.json +16 -0
  476. package/workflows/js-bundle-search/workflow.ts +118 -0
  477. package/workflows/protocol-registry/.jshook-install.json +14 -0
  478. package/workflows/protocol-registry/meta.yaml +6 -0
  479. package/workflows/protocol-registry/package.json +22 -0
  480. package/workflows/protocol-registry/pnpm-lock.yaml +819 -0
  481. package/workflows/protocol-registry/tsconfig.json +15 -0
  482. package/workflows/protocol-registry/workflow.ts +107 -0
  483. package/workflows/qwen-mail-open-latest/meta.yaml +7 -0
  484. package/workflows/qwen-mail-open-latest/package.json +22 -0
  485. package/workflows/qwen-mail-open-latest/pnpm-lock.yaml +819 -0
  486. package/workflows/qwen-mail-open-latest/tsconfig.json +15 -0
  487. package/workflows/qwen-mail-open-latest/workflow.ts +77 -0
  488. package/workflows/register-account-flow/.jshook-install.json +14 -0
  489. package/workflows/register-account-flow/LICENSE +21 -0
  490. package/workflows/register-account-flow/README.md +64 -0
  491. package/workflows/register-account-flow/meta.yaml +4 -0
  492. package/workflows/register-account-flow/package.json +23 -0
  493. package/workflows/register-account-flow/tsconfig.json +16 -0
  494. package/workflows/register-account-flow/workflow.ts +127 -0
  495. package/workflows/replay-lab/.jshook-install.json +14 -0
  496. package/workflows/replay-lab/meta.yaml +6 -0
  497. package/workflows/replay-lab/package.json +22 -0
  498. package/workflows/replay-lab/pnpm-lock.yaml +819 -0
  499. package/workflows/replay-lab/tsconfig.json +15 -0
  500. package/workflows/replay-lab/workflow.ts +106 -0
  501. package/workflows/script-evidence-scan/.jshook-install.json +14 -0
  502. package/workflows/script-evidence-scan/LICENSE +21 -0
  503. package/workflows/script-evidence-scan/README.md +61 -0
  504. package/workflows/script-evidence-scan/meta.yaml +4 -0
  505. package/workflows/script-evidence-scan/package.json +23 -0
  506. package/workflows/script-evidence-scan/tsconfig.json +16 -0
  507. package/workflows/script-evidence-scan/workflow.ts +89 -0
  508. package/workflows/signature-hunter/.jshook-install.json +14 -0
  509. package/workflows/signature-hunter/LICENSE +21 -0
  510. package/workflows/signature-hunter/README.md +105 -0
  511. package/workflows/signature-hunter/docs/agent-recipes.md +44 -0
  512. package/workflows/signature-hunter/meta.yaml +6 -0
  513. package/workflows/signature-hunter/package.json +22 -0
  514. package/workflows/signature-hunter/tsconfig.json +15 -0
  515. package/workflows/signature-hunter/workflow.ts +170 -0
  516. package/workflows/signing-lineage/.jshook-install.json +14 -0
  517. package/workflows/signing-lineage/meta.yaml +6 -0
  518. package/workflows/signing-lineage/package.json +22 -0
  519. package/workflows/signing-lineage/pnpm-lock.yaml +819 -0
  520. package/workflows/signing-lineage/tsconfig.json +15 -0
  521. package/workflows/signing-lineage/workflow.ts +120 -0
  522. package/workflows/temp-mail-extract-link/.jshook-install.json +14 -0
  523. package/workflows/temp-mail-extract-link/LICENSE +21 -0
  524. package/workflows/temp-mail-extract-link/README.md +71 -0
  525. package/workflows/temp-mail-extract-link/meta.yaml +4 -0
  526. package/workflows/temp-mail-extract-link/package.json +23 -0
  527. package/workflows/temp-mail-extract-link/tsconfig.json +16 -0
  528. package/workflows/temp-mail-extract-link/workflow.ts +221 -0
  529. package/workflows/temp-mail-open-latest/.jshook-install.json +14 -0
  530. package/workflows/temp-mail-open-latest/LICENSE +21 -0
  531. package/workflows/temp-mail-open-latest/README.md +61 -0
  532. package/workflows/temp-mail-open-latest/meta.yaml +4 -0
  533. package/workflows/temp-mail-open-latest/package.json +23 -0
  534. package/workflows/temp-mail-open-latest/tsconfig.json +16 -0
  535. package/workflows/temp-mail-open-latest/workflow.ts +136 -0
  536. package/workflows/template/.jshook-install.json +14 -0
  537. package/workflows/template/LICENSE +21 -0
  538. package/workflows/template/README.md +45 -0
  539. package/workflows/template/docs/SKILL.md +111 -0
  540. package/workflows/template/meta.yaml +6 -0
  541. package/workflows/template/package.json +22 -0
  542. package/workflows/template/pnpm-lock.yaml +819 -0
  543. package/workflows/template/tsconfig.json +15 -0
  544. package/workflows/template/workflow.ts +73 -0
  545. package/workflows/web-api-capture-session/.jshook-install.json +14 -0
  546. package/workflows/web-api-capture-session/LICENSE +21 -0
  547. package/workflows/web-api-capture-session/README.md +64 -0
  548. package/workflows/web-api-capture-session/meta.yaml +4 -0
  549. package/workflows/web-api-capture-session/package.json +23 -0
  550. package/workflows/web-api-capture-session/tsconfig.json +16 -0
  551. package/workflows/web-api-capture-session/workflow.ts +124 -0
  552. package/workflows/ws-protocol-lifter/.jshook-install.json +14 -0
  553. package/workflows/ws-protocol-lifter/LICENSE +21 -0
  554. package/workflows/ws-protocol-lifter/README.md +105 -0
  555. package/workflows/ws-protocol-lifter/docs/agent-recipes.md +44 -0
  556. package/workflows/ws-protocol-lifter/meta.yaml +6 -0
  557. package/workflows/ws-protocol-lifter/package.json +22 -0
  558. package/workflows/ws-protocol-lifter/tsconfig.json +15 -0
  559. package/workflows/ws-protocol-lifter/workflow.ts +163 -0
  560. package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
  561. package/dist/src/modules/analyzer/AISummarizer.js +0 -122
  562. package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
  563. package/dist/src/modules/hook/AIHookGenerator.js +0 -360
  564. package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
  565. package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
  566. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
  567. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
  568. package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
  569. package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
  570. package/dist/src/services/LLMService.d.ts +0 -37
  571. package/dist/src/services/LLMService.js +0 -233
  572. package/dist/src/services/prompts/analysis.d.ts +0 -9
  573. package/dist/src/services/prompts/analysis.js +0 -158
  574. package/dist/src/services/prompts/crypto.d.ts +0 -2
  575. package/dist/src/services/prompts/crypto.js +0 -108
  576. package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
  577. package/dist/src/services/prompts/deobfuscation.js +0 -300
  578. package/dist/src/services/prompts/environment.d.ts +0 -16
  579. package/dist/src/services/prompts/environment.js +0 -372
  580. package/dist/src/services/prompts/intelligence.d.ts +0 -4
  581. package/dist/src/services/prompts/intelligence.js +0 -250
  582. package/dist/src/services/prompts/taint.d.ts +0 -2
  583. 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) {