@jshookmcp/jshook 0.2.2 → 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 (414) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +15 -6
  3. package/README.zh.md +19 -4
  4. package/dist/native/scripts/linux/enum-windows.sh +12 -12
  5. package/dist/native/scripts/macos/enum-windows.applescript +22 -22
  6. package/dist/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
  7. package/dist/native/scripts/windows/enum-windows.ps1 +44 -44
  8. package/dist/native/scripts/windows/inject-dll.ps1 +21 -21
  9. package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
  10. package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
  11. package/dist/packages/extension-sdk/src/plugin.js +119 -33
  12. package/dist/packages/extension-sdk/src/workflow.d.ts +156 -0
  13. package/dist/packages/extension-sdk/src/workflow.js +236 -0
  14. package/dist/src/config/search-defaults.js +161 -0
  15. package/dist/src/constants.d.ts +3 -0
  16. package/dist/src/constants.js +4 -1
  17. package/dist/src/index.d.ts +1 -1
  18. package/dist/src/index.js +13 -17
  19. package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
  20. package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
  21. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
  22. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
  23. package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
  24. package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
  25. package/dist/src/modules/analyzer/PatternDetector.js +3 -3
  26. package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
  27. package/dist/src/modules/browser/BrowserDiscovery.d.ts +6 -5
  28. package/dist/src/modules/browser/BrowserDiscovery.js +3 -3
  29. package/dist/src/modules/browser/BrowserModeManager.d.ts +1 -1
  30. package/dist/src/modules/browser/BrowserModeManager.js +11 -10
  31. package/dist/src/modules/browser/TabRegistry.js +2 -2
  32. package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
  33. package/dist/src/modules/browser/UnifiedBrowserManager.js +19 -4
  34. package/dist/src/modules/captcha/AICaptchaDetector.d.ts +14 -23
  35. package/dist/src/modules/captcha/AICaptchaDetector.js +8 -202
  36. package/dist/src/modules/captcha/CaptchaDetector.d.ts +31 -17
  37. package/dist/src/modules/captcha/CaptchaDetector.js +1 -1
  38. package/dist/src/modules/collector/CodeCache.d.ts +2 -2
  39. package/dist/src/modules/collector/CodeCollector.d.ts +12 -9
  40. package/dist/src/modules/collector/CodeCollector.js +5 -6
  41. package/dist/src/modules/collector/DOMInspector.d.ts +3 -2
  42. package/dist/src/modules/collector/DOMInspector.js +49 -59
  43. package/dist/src/modules/collector/PageController.d.ts +17 -4
  44. package/dist/src/modules/collector/PageController.js +2 -5
  45. package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
  46. package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
  47. package/dist/src/modules/crypto/CryptoDetector.js +2 -42
  48. package/dist/src/modules/crypto/CryptoRules.js +1 -1
  49. package/dist/src/modules/debugger/BlackboxManager.js +1 -1
  50. package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
  51. package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +5 -3
  52. package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
  53. package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
  54. package/dist/src/modules/deobfuscator/Deobfuscator.js +4 -39
  55. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
  56. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
  57. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +2 -3
  58. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +5 -57
  59. package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
  60. package/dist/src/modules/deobfuscator/PackerDeobfuscator.js +1 -1
  61. package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
  62. package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
  63. package/dist/src/modules/deobfuscator/webcrack.js +15 -2
  64. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
  65. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
  66. package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
  67. package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
  68. package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
  69. package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
  70. package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
  71. package/dist/src/modules/external/ExternalToolRunner.d.ts +1 -1
  72. package/dist/src/modules/external/ExternalToolRunner.js +26 -23
  73. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
  74. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
  75. package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
  76. package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
  77. package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
  78. package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
  79. package/dist/src/modules/process/LinuxProcessManager.js +4 -2
  80. package/dist/src/modules/process/MacProcessManager.js +1 -1
  81. package/dist/src/modules/process/MemoryManager.d.ts +1 -1
  82. package/dist/src/modules/process/MemoryManager.js +2 -2
  83. package/dist/src/modules/process/ProcessManager.impl.js +1 -1
  84. package/dist/src/modules/process/memory/AuditTrail.js +1 -1
  85. package/dist/src/modules/process/memory/reader.js +35 -3
  86. package/dist/src/modules/process/memory/regions.enumerate.js +1 -1
  87. package/dist/src/modules/process/memory/regions.protection.js +42 -9
  88. package/dist/src/modules/process/memory/scanner.d.ts +5 -1
  89. package/dist/src/modules/process/memory/scanner.darwin.js +57 -0
  90. package/dist/src/modules/process/memory/scanner.js +88 -4
  91. package/dist/src/modules/process/memory/writer.js +44 -4
  92. package/dist/src/modules/security/ExecutionSandbox.js +7 -8
  93. package/dist/src/modules/stealth/FingerprintManager.js +1 -1
  94. package/dist/src/modules/stealth/StealthScripts.d.ts +4 -2
  95. package/dist/src/modules/stealth/StealthScripts.js +53 -14
  96. package/dist/src/modules/stealth/StealthVerifier.d.ts +1 -1
  97. package/dist/src/modules/stealth/StealthVerifier.js +2 -4
  98. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
  99. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
  100. package/dist/src/modules/trace/TraceDB.js +12 -6
  101. package/dist/src/modules/trace/TraceRecorder.js +1 -5
  102. package/dist/src/native/AntiCheatDetector.js +67 -16
  103. package/dist/src/native/CodeInjector.js +4 -4
  104. package/dist/src/native/HardwareBreakpoint.js +25 -16
  105. package/dist/src/native/HeapAnalyzer.js +2 -2
  106. package/dist/src/native/MemoryController.js +1 -1
  107. package/dist/src/native/MemoryScanSession.js +2 -2
  108. package/dist/src/native/MemoryScanner.js +4 -8
  109. package/dist/src/native/NativeMemoryManager.impl.js +2 -2
  110. package/dist/src/native/PEAnalyzer.js +14 -15
  111. package/dist/src/native/PointerChainEngine.js +2 -4
  112. package/dist/src/native/ScriptLoader.js +4 -9
  113. package/dist/src/native/Speedhack.js +1 -1
  114. package/dist/src/native/StructureAnalyzer.js +52 -33
  115. package/dist/src/native/Win32API.d.ts +1 -0
  116. package/dist/src/native/Win32API.js +13 -0
  117. package/dist/src/native/Win32Debug.js +19 -19
  118. package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
  119. package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
  120. package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
  121. package/dist/src/server/MCPServer.context.d.ts +2 -1
  122. package/dist/src/server/MCPServer.d.ts +2 -1
  123. package/dist/src/server/MCPServer.domain.d.ts +1 -1
  124. package/dist/src/server/MCPServer.domain.js +81 -16
  125. package/dist/src/server/MCPServer.js +42 -14
  126. package/dist/src/server/MCPServer.resources.d.ts +2 -0
  127. package/dist/src/server/MCPServer.resources.js +91 -0
  128. package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
  129. package/dist/src/server/MCPServer.search.helpers.js +2 -2
  130. package/dist/src/server/MCPServer.tools.js +1 -1
  131. package/dist/src/server/MCPServer.transport.js +12 -0
  132. package/dist/src/server/ToolCallContextGuard.d.ts +5 -0
  133. package/dist/src/server/ToolCallContextGuard.js +85 -0
  134. package/dist/src/server/ToolRouter.d.ts +26 -10
  135. package/dist/src/server/ToolRouter.intent.d.ts +26 -0
  136. package/dist/src/server/ToolRouter.intent.js +77 -0
  137. package/dist/src/server/ToolRouter.js +103 -284
  138. package/dist/src/server/ToolRouter.policy.d.ts +22 -0
  139. package/dist/src/server/ToolRouter.policy.js +163 -0
  140. package/dist/src/server/ToolRouter.probe.d.ts +17 -0
  141. package/dist/src/server/ToolRouter.probe.js +103 -0
  142. package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
  143. package/dist/src/server/ToolRouter.renderer.js +52 -0
  144. package/dist/src/server/activation/ActivationController.js +15 -12
  145. package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
  146. package/dist/src/server/activation/PredictiveBooster.js +1 -3
  147. package/dist/src/server/domains/analysis/definitions.js +155 -655
  148. package/dist/src/server/domains/analysis/handlers.impl.d.ts +8 -8
  149. package/dist/src/server/domains/analysis/handlers.impl.js +34 -28
  150. package/dist/src/server/domains/analysis/handlers.web-tools.js +4 -3
  151. package/dist/src/server/domains/analysis/manifest.js +6 -4
  152. package/dist/src/server/domains/antidebug/definitions.js +25 -111
  153. package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
  154. package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
  155. package/dist/src/server/domains/browser/definitions.tools.page-core.js +157 -386
  156. package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
  157. package/dist/src/server/domains/browser/definitions.tools.runtime.js +61 -174
  158. package/dist/src/server/domains/browser/definitions.tools.security.js +92 -237
  159. package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
  160. package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
  161. package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
  162. package/dist/src/server/domains/browser/handlers/facade-initializer.d.ts +3 -3
  163. package/dist/src/server/domains/browser/handlers/facade-initializer.js +3 -3
  164. package/dist/src/server/domains/browser/handlers/framework-state.js +231 -3
  165. package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
  166. package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
  167. package/dist/src/server/domains/browser/handlers/stealth-injection.js +8 -2
  168. package/dist/src/server/domains/browser/handlers.impl.d.ts +15 -12
  169. package/dist/src/server/domains/browser/handlers.impl.js +5 -6
  170. package/dist/src/server/domains/browser/manifest.js +37 -13
  171. package/dist/src/server/domains/coordination/definitions.js +50 -149
  172. package/dist/src/server/domains/coordination/index.d.ts +20 -1
  173. package/dist/src/server/domains/coordination/index.js +133 -0
  174. package/dist/src/server/domains/coordination/manifest.js +15 -0
  175. package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
  176. package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
  177. package/dist/src/server/domains/debugger/manifest.js +9 -2
  178. package/dist/src/server/domains/encoding/definitions.js +43 -153
  179. package/dist/src/server/domains/encoding/handlers.base.js +2 -2
  180. package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
  181. package/dist/src/server/domains/evidence/definitions.js +42 -0
  182. package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
  183. package/dist/src/server/domains/evidence/handlers.js +60 -0
  184. package/dist/src/server/domains/evidence/index.d.ts +2 -0
  185. package/dist/src/server/domains/evidence/index.js +2 -0
  186. package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
  187. package/dist/src/server/domains/evidence/manifest.js +78 -0
  188. package/dist/src/server/domains/graphql/definitions.js +53 -141
  189. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
  190. package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
  191. package/dist/src/server/domains/hooks/ai-handlers.js +4 -70
  192. package/dist/src/server/domains/hooks/definitions.js +69 -335
  193. package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
  194. package/dist/src/server/domains/hooks/manifest.js +1 -2
  195. package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
  196. package/dist/src/server/domains/instrumentation/definitions.js +99 -0
  197. package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
  198. package/dist/src/server/domains/instrumentation/handlers.js +206 -0
  199. package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
  200. package/dist/src/server/domains/instrumentation/index.js +2 -0
  201. package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
  202. package/dist/src/server/domains/instrumentation/manifest.js +114 -0
  203. package/dist/src/server/domains/macro/definitions.js +16 -43
  204. package/dist/src/server/domains/maintenance/definitions.js +60 -219
  205. package/dist/src/server/domains/maintenance/handlers.d.ts +2 -2
  206. package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
  207. package/dist/src/server/domains/maintenance/handlers.js +2 -2
  208. package/dist/src/server/domains/memory/definitions.js +387 -559
  209. package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
  210. package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
  211. package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
  212. package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
  213. package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
  214. package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
  215. package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
  216. package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
  217. package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
  218. package/dist/src/server/domains/memory/handlers/scan.js +97 -0
  219. package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
  220. package/dist/src/server/domains/memory/handlers/session.js +49 -0
  221. package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
  222. package/dist/src/server/domains/memory/handlers/structure.js +74 -0
  223. package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
  224. package/dist/src/server/domains/memory/handlers.impl.js +63 -494
  225. package/dist/src/server/domains/memory/manifest.js +236 -64
  226. package/dist/src/server/domains/native-bridge/definitions.js +54 -192
  227. package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
  228. package/dist/src/server/domains/native-bridge/index.js +2 -1
  229. package/dist/src/server/domains/network/auth-extractor.js +1 -1
  230. package/dist/src/server/domains/network/definitions.js +175 -578
  231. package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
  232. package/dist/src/server/domains/network/handlers.base.core.js +623 -0
  233. package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
  234. package/dist/src/server/domains/network/handlers.base.js +3 -878
  235. package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
  236. package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
  237. package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
  238. package/dist/src/server/domains/network/handlers.base.types.js +89 -0
  239. package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
  240. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
  241. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
  242. package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
  243. package/dist/src/server/domains/network/manifest.js +15 -0
  244. package/dist/src/server/domains/network/replay.js +1 -4
  245. package/dist/src/server/domains/platform/definitions.js +121 -112
  246. package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +5 -1
  247. package/dist/src/server/domains/platform/handlers/bridge-handlers.js +194 -5
  248. package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
  249. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
  250. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
  251. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
  252. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
  253. package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
  254. package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
  255. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
  256. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
  257. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
  258. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
  259. package/dist/src/server/domains/platform/handlers/miniapp-handlers.d.ts +1 -1
  260. package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +4 -4
  261. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
  262. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
  263. package/dist/src/server/domains/platform/handlers.d.ts +48 -0
  264. package/dist/src/server/domains/platform/handlers.js +29 -0
  265. package/dist/src/server/domains/platform/manifest.js +38 -0
  266. package/dist/src/server/domains/process/definitions.js +163 -647
  267. package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
  268. package/dist/src/server/domains/process/handlers.base.js +7 -462
  269. package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
  270. package/dist/src/server/domains/process/handlers.base.process.js +417 -0
  271. package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
  272. package/dist/src/server/domains/process/handlers.base.types.js +50 -0
  273. package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +19 -17
  274. package/dist/src/server/domains/process/manifest.js +6 -1
  275. package/dist/src/server/domains/sandbox/definitions.js +11 -33
  276. package/dist/src/server/domains/sandbox/handlers.js +8 -3
  277. package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
  278. package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
  279. package/dist/src/server/domains/shared/modules.d.ts +0 -2
  280. package/dist/src/server/domains/shared/modules.js +0 -1
  281. package/dist/src/server/domains/sourcemap/definitions.js +27 -111
  282. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
  283. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
  284. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
  285. package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
  286. package/dist/src/server/domains/sourcemap/manifest.js +1 -1
  287. package/dist/src/server/domains/streaming/definitions.js +36 -148
  288. package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
  289. package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
  290. package/dist/src/server/domains/trace/TraceSummarizer.d.ts +60 -0
  291. package/dist/src/server/domains/trace/TraceSummarizer.js +112 -0
  292. package/dist/src/server/domains/trace/definitions.tools.js +51 -176
  293. package/dist/src/server/domains/trace/handlers.d.ts +2 -1
  294. package/dist/src/server/domains/trace/handlers.js +62 -9
  295. package/dist/src/server/domains/trace/index.d.ts +2 -1
  296. package/dist/src/server/domains/trace/index.js +2 -1
  297. package/dist/src/server/domains/trace/manifest.js +18 -4
  298. package/dist/src/server/domains/transform/definitions.js +50 -210
  299. package/dist/src/server/domains/transform/handlers.impl.transform-base.js +6 -6
  300. package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
  301. package/dist/src/server/domains/transform/manifest.d.ts +1 -1
  302. package/dist/src/server/domains/transform/manifest.js +1 -1
  303. package/dist/src/server/domains/wasm/definitions.js +55 -232
  304. package/dist/src/server/domains/wasm/handlers.js +3 -3
  305. package/dist/src/server/domains/workflow/definitions.js +144 -414
  306. package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +2 -2
  307. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
  308. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
  309. package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
  310. package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
  311. package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
  312. package/dist/src/server/evidence/index.d.ts +2 -0
  313. package/dist/src/server/evidence/index.js +1 -0
  314. package/dist/src/server/evidence/types.d.ts +22 -0
  315. package/dist/src/server/evidence/types.js +1 -0
  316. package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
  317. package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
  318. package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
  319. package/dist/src/server/extensions/ExtensionManager.js +193 -40
  320. package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
  321. package/dist/src/server/extensions/ExtensionManager.roots.js +19 -9
  322. package/dist/src/server/extensions/plugin-config.js +1 -1
  323. package/dist/src/server/extensions/plugin-env.d.ts +1 -1
  324. package/dist/src/server/extensions/plugin-env.js +10 -4
  325. package/dist/src/server/extensions/types.d.ts +17 -0
  326. package/dist/src/server/extensions/types.js +1 -1
  327. package/dist/src/server/http/HttpMiddleware.js +1 -1
  328. package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
  329. package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
  330. package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
  331. package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
  332. package/dist/src/server/instrumentation/index.d.ts +2 -0
  333. package/dist/src/server/instrumentation/index.js +2 -0
  334. package/dist/src/server/instrumentation/types.d.ts +62 -0
  335. package/dist/src/server/instrumentation/types.js +7 -0
  336. package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
  337. package/dist/src/server/macros/MacroConfigLoader.js +61 -59
  338. package/dist/src/server/macros/MacroRunner.js +6 -2
  339. package/dist/src/server/macros/builtins/index.d.ts +2 -3
  340. package/dist/src/server/macros/builtins/index.js +51 -7
  341. package/dist/src/server/plugins/PluginContract.d.ts +1 -1
  342. package/dist/src/server/registry/contracts.d.ts +7 -1
  343. package/dist/src/server/registry/discovery.js +5 -4
  344. package/dist/src/server/registry/ensure-browser-core.js +0 -3
  345. package/dist/src/server/registry/index.js +4 -4
  346. package/dist/src/server/registry/tool-builder.d.ts +46 -0
  347. package/dist/src/server/registry/tool-builder.js +105 -0
  348. package/dist/src/server/sandbox/MCPBridge.d.ts +9 -0
  349. package/dist/src/server/sandbox/MCPBridge.js +22 -0
  350. package/dist/src/server/sandbox/QuickJSSandbox.d.ts +4 -1
  351. package/dist/src/server/sandbox/QuickJSSandbox.js +162 -2
  352. package/dist/src/server/sandbox/types.d.ts +13 -0
  353. package/dist/src/server/search/AffinityGraph.d.ts +7 -1
  354. package/dist/src/server/search/AffinityGraph.js +24 -3
  355. package/dist/src/server/search/EmbeddingWorker.js +5 -3
  356. package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
  357. package/dist/src/server/search/FeedbackTracker.js +26 -0
  358. package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
  359. package/dist/src/server/search/QueryNormalizer.js +94 -0
  360. package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
  361. package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
  362. package/dist/src/server/workflows/WorkflowContract.d.ts +24 -0
  363. package/dist/src/server/workflows/WorkflowContract.js +12 -0
  364. package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
  365. package/dist/src/server/workflows/WorkflowEngine.js +136 -3
  366. package/dist/src/types/config.d.ts +0 -14
  367. package/dist/src/types/deobfuscator.d.ts +0 -1
  368. package/dist/src/types/index.d.ts +1 -1
  369. package/dist/src/utils/DetailedDataManager.js +2 -0
  370. package/dist/src/utils/RingBuffer.js +5 -5
  371. package/dist/src/utils/TokenBudgetManager.js +1 -1
  372. package/dist/src/utils/UnifiedCacheManager.d.ts +1 -1
  373. package/dist/src/utils/UnifiedCacheManager.js +3 -3
  374. package/dist/src/utils/artifactRetention.js +2 -2
  375. package/dist/src/utils/betterSqlite3.d.ts +11 -0
  376. package/dist/src/utils/betterSqlite3.js +88 -0
  377. package/dist/src/utils/browserExecutable.js +2 -2
  378. package/dist/src/utils/cliFastPath.js +17 -6
  379. package/dist/src/utils/config.js +4 -26
  380. package/dist/src/utils/environmentDoctor.js +138 -11
  381. package/dist/src/utils/outputPaths.js +16 -9
  382. package/dist/src/utils/parallel.js +1 -3
  383. package/package.json +76 -72
  384. package/scripts/postinstall.cjs +37 -37
  385. package/src/native/scripts/linux/enum-windows.sh +12 -12
  386. package/src/native/scripts/macos/enum-windows.applescript +22 -22
  387. package/src/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
  388. package/src/native/scripts/windows/enum-windows.ps1 +44 -44
  389. package/src/native/scripts/windows/inject-dll.ps1 +21 -21
  390. package/workflows/.gitkeep +0 -0
  391. package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
  392. package/dist/src/modules/analyzer/AISummarizer.js +0 -122
  393. package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
  394. package/dist/src/modules/hook/AIHookGenerator.js +0 -360
  395. package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
  396. package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
  397. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
  398. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
  399. package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
  400. package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
  401. package/dist/src/services/LLMService.d.ts +0 -37
  402. package/dist/src/services/LLMService.js +0 -233
  403. package/dist/src/services/prompts/analysis.d.ts +0 -9
  404. package/dist/src/services/prompts/analysis.js +0 -158
  405. package/dist/src/services/prompts/crypto.d.ts +0 -2
  406. package/dist/src/services/prompts/crypto.js +0 -108
  407. package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
  408. package/dist/src/services/prompts/deobfuscation.js +0 -300
  409. package/dist/src/services/prompts/environment.d.ts +0 -16
  410. package/dist/src/services/prompts/environment.js +0 -372
  411. package/dist/src/services/prompts/intelligence.d.ts +0 -4
  412. package/dist/src/services/prompts/intelligence.js +0 -250
  413. package/dist/src/services/prompts/taint.d.ts +0 -2
  414. package/dist/src/services/prompts/taint.js +0 -54
@@ -3,15 +3,25 @@ import { scanMemoryWindows } from './scanner.windows.js';
3
3
  import { scanMemoryLinux } from './scanner.linux.js';
4
4
  import { scanMemoryMac } from './scanner.darwin.js';
5
5
  export { buildPatternBytesAndMask, patternToBytesMac } from './scanner.patterns.js';
6
- export async function scanMemory(platform, pid, pattern, patternType = 'hex') {
6
+ export async function scanMemory(platform, pid, pattern, patternType = 'hex', suspendTarget = false) {
7
+ let suspended = false;
7
8
  try {
9
+ if (suspendTarget) {
10
+ suspended = await suspendProcess(platform, pid);
11
+ if (suspended) {
12
+ logger.info(`Suspended process ${pid} for consistent memory scan`);
13
+ }
14
+ else {
15
+ logger.warn(`Could not suspend process ${pid} — scanning unsuspended`);
16
+ }
17
+ }
8
18
  switch (platform) {
9
19
  case 'win32':
10
- return scanMemoryWindows(pid, pattern, patternType);
20
+ return await scanMemoryWindows(pid, pattern, patternType);
11
21
  case 'linux':
12
- return scanMemoryLinux(pid, pattern, patternType);
22
+ return await scanMemoryLinux(pid, pattern, patternType);
13
23
  case 'darwin':
14
- return scanMemoryMac(pid, pattern, patternType);
24
+ return await scanMemoryMac(pid, pattern, patternType);
15
25
  default:
16
26
  return { success: false, addresses: [], error: `Memory scan not supported on ${platform}` };
17
27
  }
@@ -24,6 +34,12 @@ export async function scanMemory(platform, pid, pattern, patternType = 'hex') {
24
34
  error: error instanceof Error ? error.message : String(error),
25
35
  };
26
36
  }
37
+ finally {
38
+ if (suspended) {
39
+ await resumeProcess(platform, pid);
40
+ logger.info(`Resumed process ${pid} after memory scan`);
41
+ }
42
+ }
27
43
  }
28
44
  export async function scanMemoryFiltered(pid, pattern, addresses, patternType = 'hex', _readMemoryFn, scanMemoryFn) {
29
45
  const validAddresses = [];
@@ -59,3 +75,71 @@ export async function scanMemoryFiltered(pid, pattern, addresses, patternType =
59
75
  stats: { resultsFound: results.length, patternLength: pattern.length },
60
76
  };
61
77
  }
78
+ async function suspendProcess(platform, pid) {
79
+ try {
80
+ switch (platform) {
81
+ case 'darwin': {
82
+ const { createPlatformProvider } = await import('../../../native/platform/factory.js');
83
+ const provider = createPlatformProvider();
84
+ const avail = await provider.checkAvailability();
85
+ if (!avail.available)
86
+ return false;
87
+ const handle = provider.openProcess(pid, false);
88
+ try {
89
+ const { taskSuspend } = await import('../../../native/platform/darwin/DarwinAPI.js');
90
+ const { machTaskSelf, taskForPid, KERN } = await import('../../../native/platform/darwin/DarwinAPI.js');
91
+ const { kr, task } = taskForPid(machTaskSelf(), pid);
92
+ if (kr !== KERN.SUCCESS)
93
+ return false;
94
+ const suspendKr = taskSuspend(task);
95
+ return suspendKr === KERN.SUCCESS;
96
+ }
97
+ finally {
98
+ provider.closeProcess(handle);
99
+ }
100
+ }
101
+ case 'linux': {
102
+ const { execAsync } = await import('../../process/memory/types.js');
103
+ await execAsync(`kill -STOP ${pid}`, { timeout: 2000 });
104
+ return true;
105
+ }
106
+ case 'win32': {
107
+ const { execAsync } = await import('../../process/memory/types.js');
108
+ await execAsync(`powershell -NoProfile -Command "(Add-Type -MemberDefinition '[DllImport("ntdll.dll")] public static extern int NtSuspendProcess(IntPtr h);' -Name W -Namespace N -PassThru)::NtSuspendProcess((Get-Process -Id ${pid}).Handle)"`, { timeout: 5000 });
109
+ return true;
110
+ }
111
+ default:
112
+ return false;
113
+ }
114
+ }
115
+ catch (err) {
116
+ logger.warn(`Failed to suspend process ${pid}:`, err);
117
+ return false;
118
+ }
119
+ }
120
+ async function resumeProcess(platform, pid) {
121
+ try {
122
+ switch (platform) {
123
+ case 'darwin': {
124
+ const { machTaskSelf, taskForPid, taskResume, KERN } = await import('../../../native/platform/darwin/DarwinAPI.js');
125
+ const { kr, task } = taskForPid(machTaskSelf(), pid);
126
+ if (kr === KERN.SUCCESS)
127
+ taskResume(task);
128
+ break;
129
+ }
130
+ case 'linux': {
131
+ const { execAsync } = await import('../../process/memory/types.js');
132
+ await execAsync(`kill -CONT ${pid}`, { timeout: 2000 });
133
+ break;
134
+ }
135
+ case 'win32': {
136
+ const { execAsync } = await import('../../process/memory/types.js');
137
+ await execAsync(`powershell -NoProfile -Command "(Add-Type -MemberDefinition '[DllImport("ntdll.dll")] public static extern int NtResumeProcess(IntPtr h);' -Name W -Namespace N -PassThru)::NtResumeProcess((Get-Process -Id ${pid}).Handle)"`, { timeout: 5000 });
138
+ break;
139
+ }
140
+ }
141
+ }
142
+ catch (err) {
143
+ logger.error(`CRITICAL: Failed to resume process ${pid} — may need manual SIGCONT:`, err);
144
+ }
145
+ }
@@ -1,6 +1,7 @@
1
1
  import { logger } from '../../../utils/logger.js';
2
2
  import { nativeMemoryManager } from '../../../native/NativeMemoryManager.js';
3
3
  import { isKoffiAvailable } from '../../../native/Win32API.js';
4
+ import { MEMORY_MAX_WRITE_BYTES } from '../../../constants.js';
4
5
  import { execAsync, executePowerShellScript, } from '../../process/memory/types.js';
5
6
  async function writeMemoryWindows(pid, address, data) {
6
7
  try {
@@ -108,11 +109,32 @@ async function writeMemoryMac(pid, address, data, checkProtectionFn) {
108
109
  if (address === 0) {
109
110
  return { success: false, error: 'Invalid address: null pointer (0x0)' };
110
111
  }
111
- const MAX_WRITE_SIZE = 16 * 1024;
112
- if (data.length === 0 || data.length > MAX_WRITE_SIZE) {
113
- return { success: false, error: `Invalid write size: must be 1–${MAX_WRITE_SIZE} bytes` };
112
+ if (data.length === 0 || data.length > MEMORY_MAX_WRITE_BYTES) {
113
+ return {
114
+ success: false,
115
+ error: `Invalid write size: must be 1–${MEMORY_MAX_WRITE_BYTES} bytes`,
116
+ };
114
117
  }
115
118
  const addrHex = `0x${address.toString(16)}`;
119
+ try {
120
+ const { createPlatformProvider } = await import('../../../native/platform/factory.js');
121
+ const provider = createPlatformProvider();
122
+ const avail = await provider.checkAvailability();
123
+ if (avail.available) {
124
+ const handle = provider.openProcess(pid, true);
125
+ try {
126
+ const result = provider.writeMemory(handle, BigInt(address), data);
127
+ logger.debug('Native Mach memory write succeeded (zero-pause)');
128
+ return { success: true, bytesWritten: result.bytesWritten };
129
+ }
130
+ finally {
131
+ provider.closeProcess(handle);
132
+ }
133
+ }
134
+ }
135
+ catch (nativeErr) {
136
+ logger.debug('Native Mach write failed, falling back to lldb:', nativeErr);
137
+ }
116
138
  const prot = await checkProtectionFn(pid, addrHex);
117
139
  if (!prot.success) {
118
140
  return { success: false, error: `Cannot verify memory region: ${prot.error}` };
@@ -138,8 +160,12 @@ async function writeMemoryMac(pid, address, data, checkProtectionFn) {
138
160
  return { success: false, error: error instanceof Error ? error.message : String(error) };
139
161
  }
140
162
  }
163
+ const HEX_ADDR = /^(?:0x)?[0-9a-fA-F]{1,16}$/;
141
164
  export async function writeMemory(platform, pid, address, data, encoding = 'hex', checkProtectionFn) {
142
165
  try {
166
+ if (!HEX_ADDR.test(address)) {
167
+ return { success: false, error: 'Invalid address format. Use hex like "0x12345678"' };
168
+ }
143
169
  const addrNum = parseInt(address, 16);
144
170
  if (isNaN(addrNum)) {
145
171
  return { success: false, error: 'Invalid address format' };
@@ -154,9 +180,15 @@ export async function writeMemory(platform, pid, address, data, encoding = 'hex'
154
180
  buffer = Buffer.from(cleanHex, 'hex');
155
181
  }
156
182
  }
157
- catch (_e) {
183
+ catch {
158
184
  return { success: false, error: `Invalid ${encoding} data` };
159
185
  }
186
+ if (buffer.length === 0 || buffer.length > MEMORY_MAX_WRITE_BYTES) {
187
+ return {
188
+ success: false,
189
+ error: `Write size must be 1–${MEMORY_MAX_WRITE_BYTES} bytes (${(MEMORY_MAX_WRITE_BYTES / 1024).toFixed(0)} KB)`,
190
+ };
191
+ }
160
192
  if (platform === 'win32' && isKoffiAvailable()) {
161
193
  try {
162
194
  const result = await nativeMemoryManager.writeMemory(pid, address, data, encoding);
@@ -189,7 +221,15 @@ export async function writeMemory(platform, pid, address, data, encoding = 'hex'
189
221
  return { success: false, error: error instanceof Error ? error.message : String(error) };
190
222
  }
191
223
  }
224
+ const MAX_BATCH_PATCHES = 1000;
192
225
  export async function batchMemoryWrite(pid, patches, writeFn) {
226
+ if (patches.length > MAX_BATCH_PATCHES) {
227
+ return {
228
+ success: false,
229
+ results: [],
230
+ error: `Too many patches (${patches.length}), max ${MAX_BATCH_PATCHES}`,
231
+ };
232
+ }
193
233
  const results = [];
194
234
  for (const patch of patches) {
195
235
  const result = await writeFn(pid, patch.address, patch.data, patch.encoding || 'hex');
@@ -57,7 +57,13 @@ export class ExecutionSandbox {
57
57
  const startTime = Date.now();
58
58
  return new Promise((resolve) => {
59
59
  let settled = false;
60
- let terminationTimeout;
60
+ const terminationTimeout = setTimeout(() => {
61
+ if (!settled) {
62
+ void worker.terminate();
63
+ logger.warn(`[ExecutionSandbox] Worker terminated after ${timeoutMs + SANDBOX_TERMINATE_GRACE_MS}ms`);
64
+ finish({ ok: false, error: 'Execution timed out (worker terminated)', timedOut: true });
65
+ }
66
+ }, timeoutMs + SANDBOX_TERMINATE_GRACE_MS);
61
67
  const workerOptions = {
62
68
  eval: true,
63
69
  workerData: {
@@ -80,13 +86,6 @@ export class ExecutionSandbox {
80
86
  clearTimeout(terminationTimeout);
81
87
  resolve({ ...result, durationMs: Date.now() - startTime });
82
88
  };
83
- terminationTimeout = setTimeout(() => {
84
- if (!settled) {
85
- void worker.terminate();
86
- logger.warn(`[ExecutionSandbox] Worker terminated after ${timeoutMs + SANDBOX_TERMINATE_GRACE_MS}ms`);
87
- finish({ ok: false, error: 'Execution timed out (worker terminated)', timedOut: true });
88
- }
89
- }, timeoutMs + SANDBOX_TERMINATE_GRACE_MS);
90
89
  worker.on('message', (msg) => {
91
90
  finish({
92
91
  ok: msg.ok,
@@ -70,7 +70,7 @@ export class FingerprintManager {
70
70
  throw new Error('fingerprint-injector not installed');
71
71
  }
72
72
  try {
73
- const { newInjectedPage } = await import('fingerprint-injector');
73
+ const { newInjectedPage } = (await import('fingerprint-injector'));
74
74
  const fp = 'fingerprint' in profile ? profile.fingerprint : profile;
75
75
  await newInjectedPage(page, { fingerprint: fp });
76
76
  logger.info('Fingerprint injected into page');
@@ -1,7 +1,9 @@
1
- import { Page } from 'rebrowser-puppeteer-core';
1
+ import { type Page } from 'rebrowser-puppeteer-core';
2
2
  export declare class StealthScripts {
3
- private static injectedPages;
3
+ protected constructor();
4
+ protected static injectedPages: WeakSet<object>;
4
5
  static injectAll(page: Page): Promise<void>;
6
+ static injectTimingDefense(page: Page): Promise<void>;
5
7
  static hideWebDriver(page: Page): Promise<void>;
6
8
  static mockChrome(page: Page): Promise<void>;
7
9
  static mockPlugins(page: Page): Promise<void>;
@@ -1,6 +1,7 @@
1
- import { Page } from 'rebrowser-puppeteer-core';
1
+ import {} from 'rebrowser-puppeteer-core';
2
2
  import { logger } from '../../utils/logger.js';
3
3
  export class StealthScripts {
4
+ constructor() { }
4
5
  static injectedPages = new WeakSet();
5
6
  static async injectAll(page) {
6
7
  if (this.injectedPages.has(page)) {
@@ -20,9 +21,43 @@ export class StealthScripts {
20
21
  this.fixMediaDevices(page),
21
22
  this.mockNotifications(page),
22
23
  ]);
24
+ await this.injectTimingDefense(page);
23
25
  this.injectedPages.add(page);
24
26
  logger.info(' ');
25
27
  }
28
+ static async injectTimingDefense(page) {
29
+ await page.evaluateOnNewDocument(() => {
30
+ const _originalPerfNow = performance.now.bind(performance);
31
+ const _originalDateNow = Date.now;
32
+ let _cdpOffset = 0;
33
+ performance.now = function () {
34
+ const win = window;
35
+ if (typeof win.__cdpTimingOffset === 'number') {
36
+ _cdpOffset = win.__cdpTimingOffset;
37
+ }
38
+ return _originalPerfNow() - _cdpOffset;
39
+ };
40
+ Date.now = function () {
41
+ const win = window;
42
+ if (typeof win.__cdpTimingOffset === 'number') {
43
+ _cdpOffset = win.__cdpTimingOffset;
44
+ }
45
+ return _originalDateNow.call(Date) - Math.floor(_cdpOffset);
46
+ };
47
+ const _OriginalDate = Date;
48
+ const _ProxiedDate = function (...args) {
49
+ if (args.length === 0) {
50
+ return new _OriginalDate(_OriginalDate.now());
51
+ }
52
+ return new _OriginalDate(...args);
53
+ };
54
+ _ProxiedDate.now = _OriginalDate.now;
55
+ _ProxiedDate.parse = _OriginalDate.parse.bind(_OriginalDate);
56
+ _ProxiedDate.UTC = _OriginalDate.UTC.bind(_OriginalDate);
57
+ Object.defineProperty(_ProxiedDate, 'prototype', { value: _OriginalDate.prototype });
58
+ globalThis.Date = _ProxiedDate;
59
+ });
60
+ }
26
61
  static async hideWebDriver(page) {
27
62
  await page.evaluateOnNewDocument(() => {
28
63
  const originalNavigator = navigator;
@@ -156,29 +191,33 @@ export class StealthScripts {
156
191
  await page.evaluateOnNewDocument(() => {
157
192
  const originalToDataURL = HTMLCanvasElement.prototype.toDataURL;
158
193
  const originalGetImageData = CanvasRenderingContext2D.prototype.getImageData;
159
- const addNoise = (imageData) => {
160
- const data = imageData.data;
161
- if (data) {
162
- for (let i = 0; i < data.length; i += 4) {
163
- data[i] = data[i] ^ 1;
164
- data[i + 1] = data[i + 1] ^ 1;
165
- data[i + 2] = data[i + 2] ^ 1;
166
- }
167
- }
168
- return imageData;
169
- };
170
194
  HTMLCanvasElement.prototype.toDataURL = function (...args) {
171
195
  const context = this.getContext('2d');
172
196
  if (context) {
173
197
  const imageData = context.getImageData(0, 0, this.width, this.height);
174
- addNoise(imageData);
198
+ const data = imageData.data;
199
+ if (data) {
200
+ for (let i = 0; i < data.length; i += 4) {
201
+ data[i] = data[i] ^ 1;
202
+ data[i + 1] = data[i + 1] ^ 1;
203
+ data[i + 2] = data[i + 2] ^ 1;
204
+ }
205
+ }
175
206
  context.putImageData(imageData, 0, 0);
176
207
  }
177
208
  return originalToDataURL.apply(this, args);
178
209
  };
179
210
  CanvasRenderingContext2D.prototype.getImageData = function (...args) {
180
211
  const imageData = originalGetImageData.apply(this, args);
181
- return addNoise(imageData);
212
+ const data = imageData.data;
213
+ if (data) {
214
+ for (let i = 0; i < data.length; i += 4) {
215
+ data[i] = data[i] ^ 1;
216
+ data[i + 1] = data[i + 1] ^ 1;
217
+ data[i + 2] = data[i + 2] ^ 1;
218
+ }
219
+ }
220
+ return imageData;
182
221
  };
183
222
  });
184
223
  }
@@ -1,4 +1,4 @@
1
- import { Page } from 'rebrowser-puppeteer-core';
1
+ import { type Page } from 'rebrowser-puppeteer-core';
2
2
  export interface StealthCheck {
3
3
  name: string;
4
4
  passed: boolean;
@@ -1,4 +1,4 @@
1
- import { Page } from 'rebrowser-puppeteer-core';
1
+ import {} from 'rebrowser-puppeteer-core';
2
2
  export class StealthVerifier {
3
3
  async verify(page) {
4
4
  const checks = await page.evaluate(() => {
@@ -18,9 +18,7 @@ export class StealthVerifier {
18
18
  expected: 'object',
19
19
  actual: typeof win.chrome,
20
20
  });
21
- const chromeApp = hasChrome
22
- ? win.chrome.app
23
- : null;
21
+ const chromeApp = hasChrome ? win.chrome.app : null;
24
22
  const hasAppIsInstalled = chromeApp && typeof chromeApp === 'object' && 'isInstalled' in chromeApp;
25
23
  results.push({
26
24
  name: 'chrome.app.isInstalled',
@@ -59,6 +59,20 @@ export declare class JSVMPSymbolicExecutor extends SymbolicExecutor {
59
59
  private executeAdd;
60
60
  private executeSub;
61
61
  private executeMul;
62
+ private executeDiv;
63
+ private executeMod;
64
+ private executeAnd;
65
+ private executeOr;
66
+ private executeNot;
67
+ private executeXor;
68
+ private executeEq;
69
+ private executeNe;
70
+ private executeLt;
71
+ private executeLe;
72
+ private executeGt;
73
+ private executeGe;
74
+ private executeJnz;
75
+ private executeDup;
62
76
  private executeLoad;
63
77
  private executeStore;
64
78
  private executeJZ;
@@ -61,7 +61,7 @@ export class JSVMPSymbolicExecutor extends SymbolicExecutor {
61
61
  break;
62
62
  }
63
63
  executionTrace.push(this.cloneStateInternal(state));
64
- state = this.executeInstruction(state, instruction);
64
+ state = this.executeInstruction(state, instruction, instructions);
65
65
  if (instruction.opcode === JSVMPOpcode.HALT) {
66
66
  break;
67
67
  }
@@ -88,7 +88,7 @@ export class JSVMPSymbolicExecutor extends SymbolicExecutor {
88
88
  throw error;
89
89
  }
90
90
  }
91
- executeInstruction(state, instruction) {
91
+ executeInstruction(state, instruction, instructions) {
92
92
  const newState = this.cloneStateInternal(state);
93
93
  switch (instruction.opcode) {
94
94
  case JSVMPOpcode.PUSH:
@@ -106,6 +106,55 @@ export class JSVMPSymbolicExecutor extends SymbolicExecutor {
106
106
  case JSVMPOpcode.MUL:
107
107
  this.executeMul(newState);
108
108
  break;
109
+ case JSVMPOpcode.DIV:
110
+ this.executeDiv(newState);
111
+ break;
112
+ case JSVMPOpcode.MOD:
113
+ this.executeMod(newState);
114
+ break;
115
+ case JSVMPOpcode.AND:
116
+ this.executeAnd(newState);
117
+ break;
118
+ case JSVMPOpcode.OR:
119
+ this.executeOr(newState);
120
+ break;
121
+ case JSVMPOpcode.NOT:
122
+ this.executeNot(newState);
123
+ break;
124
+ case JSVMPOpcode.XOR:
125
+ this.executeXor(newState);
126
+ break;
127
+ case JSVMPOpcode.EQ:
128
+ this.executeEq(newState);
129
+ break;
130
+ case JSVMPOpcode.NE:
131
+ this.executeNe(newState);
132
+ break;
133
+ case JSVMPOpcode.LT:
134
+ this.executeLt(newState);
135
+ break;
136
+ case JSVMPOpcode.LE:
137
+ this.executeLe(newState);
138
+ break;
139
+ case JSVMPOpcode.GT:
140
+ this.executeGt(newState);
141
+ break;
142
+ case JSVMPOpcode.GE:
143
+ this.executeGe(newState);
144
+ break;
145
+ case JSVMPOpcode.JNZ:
146
+ this.executeJnz(newState, this.asNumberOperand(instruction.operands[0]));
147
+ return newState;
148
+ case JSVMPOpcode.RET:
149
+ newState.pc = instructions.length;
150
+ return newState;
151
+ case JSVMPOpcode.DUP:
152
+ this.executeDup(newState);
153
+ break;
154
+ case JSVMPOpcode.LOAD_CONST:
155
+ this.executePush(newState, instruction.operands[0]);
156
+ newState.pc++;
157
+ return newState;
109
158
  case JSVMPOpcode.LOAD:
110
159
  this.executeLoad(newState, this.asStringOperand(instruction.operands[0]));
111
160
  break;
@@ -168,6 +217,136 @@ export class JSVMPSymbolicExecutor extends SymbolicExecutor {
168
217
  state.stack.push(result);
169
218
  }
170
219
  }
220
+ executeDiv(state) {
221
+ const b = state.stack.pop();
222
+ const a = state.stack.pop();
223
+ if (a && b) {
224
+ const result = this.createSymbolicValue('number', `${a.name} / ${b.name}`);
225
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} / ${b.name}`, '');
226
+ state.stack.push(result);
227
+ }
228
+ }
229
+ executeMod(state) {
230
+ const b = state.stack.pop();
231
+ const a = state.stack.pop();
232
+ if (a && b) {
233
+ const result = this.createSymbolicValue('number', `${a.name} % ${b.name}`);
234
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} % ${b.name}`, '');
235
+ state.stack.push(result);
236
+ }
237
+ }
238
+ executeAnd(state) {
239
+ const b = state.stack.pop();
240
+ const a = state.stack.pop();
241
+ if (a && b) {
242
+ const result = this.createSymbolicValue('boolean', `${a.name} && ${b.name}`);
243
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} && ${b.name}`, '');
244
+ state.stack.push(result);
245
+ }
246
+ }
247
+ executeOr(state) {
248
+ const b = state.stack.pop();
249
+ const a = state.stack.pop();
250
+ if (a && b) {
251
+ const result = this.createSymbolicValue('boolean', `${a.name} || ${b.name}`);
252
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} || ${b.name}`, '');
253
+ state.stack.push(result);
254
+ }
255
+ }
256
+ executeNot(state) {
257
+ const a = state.stack.pop();
258
+ if (a) {
259
+ const result = this.createSymbolicValue('boolean', `!${a.name}`);
260
+ this.addConstraint(result, 'custom', `${result.name} = !${a.name}`, '');
261
+ state.stack.push(result);
262
+ }
263
+ }
264
+ executeXor(state) {
265
+ const b = state.stack.pop();
266
+ const a = state.stack.pop();
267
+ if (a && b) {
268
+ const result = this.createSymbolicValue('boolean', `${a.name} ^ ${b.name}`);
269
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} ^ ${b.name}`, '');
270
+ state.stack.push(result);
271
+ }
272
+ }
273
+ executeEq(state) {
274
+ const b = state.stack.pop();
275
+ const a = state.stack.pop();
276
+ if (a && b) {
277
+ const result = this.createSymbolicValue('boolean', `${a.name} === ${b.name}`);
278
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} === ${b.name}`, '');
279
+ state.stack.push(result);
280
+ }
281
+ }
282
+ executeNe(state) {
283
+ const b = state.stack.pop();
284
+ const a = state.stack.pop();
285
+ if (a && b) {
286
+ const result = this.createSymbolicValue('boolean', `${a.name} !== ${b.name}`);
287
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} !== ${b.name}`, '');
288
+ state.stack.push(result);
289
+ }
290
+ }
291
+ executeLt(state) {
292
+ const b = state.stack.pop();
293
+ const a = state.stack.pop();
294
+ if (a && b) {
295
+ const result = this.createSymbolicValue('boolean', `${a.name} < ${b.name}`);
296
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} < ${b.name}`, '');
297
+ state.stack.push(result);
298
+ }
299
+ }
300
+ executeLe(state) {
301
+ const b = state.stack.pop();
302
+ const a = state.stack.pop();
303
+ if (a && b) {
304
+ const result = this.createSymbolicValue('boolean', `${a.name} <= ${b.name}`);
305
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} <= ${b.name}`, '');
306
+ state.stack.push(result);
307
+ }
308
+ }
309
+ executeGt(state) {
310
+ const b = state.stack.pop();
311
+ const a = state.stack.pop();
312
+ if (a && b) {
313
+ const result = this.createSymbolicValue('boolean', `${a.name} > ${b.name}`);
314
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} > ${b.name}`, '');
315
+ state.stack.push(result);
316
+ }
317
+ }
318
+ executeGe(state) {
319
+ const b = state.stack.pop();
320
+ const a = state.stack.pop();
321
+ if (a && b) {
322
+ const result = this.createSymbolicValue('boolean', `${a.name} >= ${b.name}`);
323
+ this.addConstraint(result, 'custom', `${result.name} = ${a.name} >= ${b.name}`, '');
324
+ state.stack.push(result);
325
+ }
326
+ }
327
+ executeJnz(state, target) {
328
+ const condition = state.stack.pop();
329
+ if (condition) {
330
+ const constraint = {
331
+ type: 'inequality',
332
+ expression: `${condition.name} != 0`,
333
+ description: '',
334
+ };
335
+ state.pathConstraints.push(constraint);
336
+ state.pc = target;
337
+ }
338
+ }
339
+ executeDup(state) {
340
+ const value = state.stack[state.stack.length - 1];
341
+ if (value) {
342
+ const dup = this.createSymbolicValue(value.type, value.name, value.source);
343
+ dup.constraints = [...value.constraints];
344
+ if (value.possibleValues) {
345
+ dup.possibleValues = [...value.possibleValues];
346
+ }
347
+ state.stack.push(dup);
348
+ }
349
+ }
171
350
  executeLoad(state, varName) {
172
351
  const value = state.memory.get(varName);
173
352
  if (value) {
@@ -1,3 +1,4 @@
1
+ import { formatBetterSqlite3Error } from '../../utils/betterSqlite3.js';
1
2
  let Database;
2
3
  try {
3
4
  Database = require('better-sqlite3');
@@ -19,9 +20,14 @@ export class TraceDB {
19
20
  constructor(options) {
20
21
  this.options = options;
21
22
  if (!Database) {
22
- throw new Error('better-sqlite3 is not installed. Install it with: pnpm add better-sqlite3');
23
+ throw new Error(formatBetterSqlite3Error(new Error("Cannot find package 'better-sqlite3'")));
24
+ }
25
+ try {
26
+ this.db = new Database(options.dbPath);
27
+ }
28
+ catch (error) {
29
+ throw new Error(formatBetterSqlite3Error(error), { cause: error });
23
30
  }
24
- this.db = new Database(options.dbPath);
25
31
  this.batchSize = options.batchSize ?? 200;
26
32
  this.db.pragma('journal_mode = WAL');
27
33
  this.db.pragma('synchronous = NORMAL');
@@ -138,7 +144,7 @@ export class TraceDB {
138
144
  return { columns, rows: [], rowCount: 0 };
139
145
  }
140
146
  const columns = Object.keys(rows[0]);
141
- const rowArrays = rows.map(row => columns.map(col => row[col]));
147
+ const rowArrays = rows.map((row) => columns.map((col) => row[col]));
142
148
  return { columns, rows: rowArrays, rowCount: rows.length };
143
149
  }
144
150
  getEventsByTimeRange(start, end) {
@@ -150,7 +156,7 @@ export class TraceDB {
150
156
  WHERE timestamp >= ? AND timestamp <= ?
151
157
  ORDER BY timestamp ASC
152
158
  `);
153
- return stmt.all(start, end).map(row => ({
159
+ return stmt.all(start, end).map((row) => ({
154
160
  id: row['id'],
155
161
  timestamp: row['timestamp'],
156
162
  category: row['category'],
@@ -169,7 +175,7 @@ export class TraceDB {
169
175
  WHERE address = ?
170
176
  ORDER BY timestamp ASC
171
177
  `);
172
- return stmt.all(address).map(row => ({
178
+ return stmt.all(address).map((row) => ({
173
179
  id: row['id'],
174
180
  timestamp: row['timestamp'],
175
181
  address: row['address'],
@@ -186,7 +192,7 @@ export class TraceDB {
186
192
  FROM heap_snapshots
187
193
  ORDER BY timestamp ASC
188
194
  `);
189
- return stmt.all().map(row => ({
195
+ return stmt.all().map((row) => ({
190
196
  id: row['id'],
191
197
  timestamp: row['timestamp'],
192
198
  snapshotData: row['snapshot_data'],