@jshookmcp/jshook 0.2.9 → 0.3.1

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 (316) hide show
  1. package/README.md +25 -50
  2. package/README.zh.md +25 -48
  3. package/dist/AntiCheatDetector-CGVGNfy5.mjs +1 -0
  4. package/dist/CacheAdapters-CdAxBmVW.mjs +1 -0
  5. package/dist/CodeInjector-BlgyqTOk.mjs +1 -0
  6. package/dist/ConsoleMonitor-Dkqc0HNi.mjs +490 -0
  7. package/dist/DOMInspector-BYY_EJ0C.mjs +95 -0
  8. package/dist/DarwinAPI-DC4HGGLl.mjs +1 -0
  9. package/dist/DetailedDataManager-BniBJlVv.mjs +1 -0
  10. package/dist/EventBus-DgciURGg.mjs +1 -0
  11. package/dist/EvidenceGraphBridge-BIfgB7HP.mjs +1 -0
  12. package/dist/ExtensionManager-erMpqcLk.mjs +1 -0
  13. package/dist/FingerprintManager-N7BZqjxP.mjs +1 -0
  14. package/dist/HardwareBreakpoint-OcJqNFVc.mjs +1 -0
  15. package/dist/HeapAnalyzer-CqAxZzeS.mjs +1 -0
  16. package/dist/{HookGeneratorBuilders.core.generators.storage-CtcdK78Q.mjs → HookGeneratorBuilders.core.generators.storage-Bf1fbrNK.mjs} +66 -174
  17. package/dist/InstrumentationSession-DxXs0sCp.mjs +1 -0
  18. package/dist/MCPServer.search.handlers.domain-DVbWL1bT.mjs +1 -0
  19. package/dist/MemoryController-BaqstM5w.mjs +2 -0
  20. package/dist/MemoryScanSession-CaxAjZJf.mjs +1 -0
  21. package/dist/MemoryScanner-BLYnMJy6.mjs +1 -0
  22. package/dist/NativeMemoryManager.impl-CI554XbY.mjs +1 -0
  23. package/dist/NativeMemoryManager.utils-DM4NC3FE.mjs +1 -0
  24. package/dist/PEAnalyzer-DJyaJTQJ.mjs +1 -0
  25. package/dist/PageController-D9jVkH0i.mjs +1 -0
  26. package/dist/PointerChainEngine-5nF9eNlu.mjs +1 -0
  27. package/dist/PrerequisiteError-Bl3dK8XA.mjs +1 -0
  28. package/dist/ProcessRegistry-Hf12LlR9.mjs +1 -0
  29. package/dist/ResponseBuilder-B2lu4KEl.mjs +1 -0
  30. package/dist/ReverseEvidenceGraph-B931HeoW.mjs +2 -0
  31. package/dist/ScriptManager-fgqiALgj.mjs +7 -0
  32. package/dist/Speedhack-l6s8L2Qw.mjs +1 -0
  33. package/dist/StealthVerifier-Dhbj4B4P.mjs +1 -0
  34. package/dist/StructureAnalyzer-A-WamfYE.mjs +2 -0
  35. package/dist/ToolCatalog-D_IKl1Hu.mjs +1 -0
  36. package/dist/ToolError-DWU_z7gp.mjs +1 -0
  37. package/dist/ToolProbe-xsfALmN3.mjs +1 -0
  38. package/dist/ToolRegistry-B0Zs-phN.mjs +1 -0
  39. package/dist/ToolRouter.policy-CFHoN_Lw.mjs +4 -0
  40. package/dist/TraceRecorder-Dd8jLXpi.mjs +272 -0
  41. package/dist/VersionDetector-DMoUWyNm.mjs +9 -0
  42. package/dist/Win32API-Bhi5xFBe.mjs +1 -0
  43. package/dist/Win32Debug-CQteFL4F.mjs +1 -0
  44. package/dist/WorkflowEngine-CxEp2WXH.mjs +1 -0
  45. package/dist/analysis-BuR-NgX8.mjs +5 -0
  46. package/dist/{antidebug-CqDTB_uk.mjs → antidebug-BOTZH6-0.mjs} +8 -259
  47. package/dist/artifactRetention-NBdncOEW.mjs +1 -0
  48. package/dist/artifacts-B5xQuEa_.mjs +1 -0
  49. package/dist/authorization-schema-B40obG1A.mjs +1 -0
  50. package/dist/betterSqlite3-CGaxz4AX.mjs +1 -0
  51. package/dist/binary-instrument-Cf9qqLlM.mjs +7 -0
  52. package/dist/bind-helpers-BlAOQrFQ.mjs +1 -0
  53. package/dist/boringssl-inspector-BST5vtKx.mjs +2 -0
  54. package/dist/browser-C4Le3xqA.mjs +11 -0
  55. package/dist/capabilities-DbYCv-HF.mjs +1 -0
  56. package/dist/chunk-C_pMuVsO.mjs +1 -0
  57. package/dist/collector-CKO8RPK8.mjs +1 -0
  58. package/dist/concurrency-CcK46d0h.mjs +1 -0
  59. package/dist/constants-Cp6hBrrx.mjs +1 -0
  60. package/dist/coordination-BbijHEHH.mjs +1 -0
  61. package/dist/debugger-CRJq_krh.mjs +1 -0
  62. package/dist/definitions-BGobEDQa.mjs +1 -0
  63. package/dist/definitions-BGwNSkVm.mjs +1 -0
  64. package/dist/definitions-BbxOUiP-.mjs +1 -0
  65. package/dist/definitions-CCP9gphV.mjs +1 -0
  66. package/dist/definitions-CIO9O-Sw.mjs +1 -0
  67. package/dist/definitions-CYFbewnd.mjs +1 -0
  68. package/dist/definitions-CdWEuIkI.mjs +1 -0
  69. package/dist/definitions-CoQFbggH.mjs +1 -0
  70. package/dist/definitions-CuJRsJ6N.mjs +1 -0
  71. package/dist/definitions-DI9YXsJk.mjs +1 -0
  72. package/dist/definitions-DJklW2sS.mjs +1 -0
  73. package/dist/definitions-DZ8uKusP.mjs +1 -0
  74. package/dist/definitions-Dds_zrWx.mjs +1 -0
  75. package/dist/definitions-Dgrg7f3D.mjs +1 -0
  76. package/dist/definitions-DtE0XLrT.mjs +1 -0
  77. package/dist/definitions-LaYTuwQd.mjs +26 -0
  78. package/dist/definitions-NoVp_9Pm.mjs +1 -0
  79. package/dist/definitions-OvGsfxdt.mjs +1 -0
  80. package/dist/definitions-jXPaVy4P.mjs +1 -0
  81. package/dist/encoding-DGcr6Aj_.mjs +2 -0
  82. package/dist/ensure-browser-core-Buls24LQ.mjs +1 -0
  83. package/dist/evidence-graph-bridge-B0yhGPcs.mjs +1 -0
  84. package/dist/factory-Cx_1LorX.mjs +1 -0
  85. package/dist/flat-target-session-CO5g78k3.mjs +1 -0
  86. package/dist/formatAddress-C7j2fDlM.mjs +1 -0
  87. package/dist/graphql-HLf3MS8H.mjs +62 -0
  88. package/dist/handlers-BLMa4X7l.mjs +54 -0
  89. package/dist/handlers-BP12ZsWc.mjs +4 -0
  90. package/dist/handlers-BZoPla6E.mjs +1 -0
  91. package/dist/handlers-BggKiVx9.mjs +2 -0
  92. package/dist/handlers-D3iev8g1.mjs +1 -0
  93. package/dist/handlers-D49r1-1P.mjs +1 -0
  94. package/dist/handlers-DCE45Ww8.mjs +2 -0
  95. package/dist/handlers-DW5AbYs5.mjs +5 -0
  96. package/dist/handlers-De5u62Ga2.mjs +1 -0
  97. package/dist/handlers-DmQzIc44.mjs +31 -0
  98. package/dist/handlers-DnJRGp7t.mjs +302 -0
  99. package/dist/handlers-Dv_runVv.mjs +2 -0
  100. package/dist/handlers-S9Ws0IGy.mjs +2 -0
  101. package/dist/{handlers-Bl8zkwz1.mjs → handlers-pVNpaw4A.mjs} +144 -841
  102. package/dist/handlers.impl-CD2_kOcC.mjs +1 -0
  103. package/dist/hooks-DDKppogd.mjs +600 -0
  104. package/dist/index.mjs +12 -5225
  105. package/dist/logger-sBC6IdRT.mjs +1 -0
  106. package/dist/maintenance-CutEO84j.mjs +1 -0
  107. package/dist/manifest-BFGxlDRh.mjs +123 -0
  108. package/dist/manifest-BPuE6oH2.mjs +1 -0
  109. package/dist/manifest-BXry5N09.mjs +1 -0
  110. package/dist/manifest-BeP_zJGb2.mjs +1 -0
  111. package/dist/manifest-C0g67k6U.mjs +1 -0
  112. package/dist/manifest-C1nZkTkO.mjs +1 -0
  113. package/dist/manifest-C7qV1z7F.mjs +1 -0
  114. package/dist/manifest-CDeUZGUZ.mjs +1 -0
  115. package/dist/manifest-CDiCtaQT.mjs +1 -0
  116. package/dist/manifest-CFn0359q2.mjs +1 -0
  117. package/dist/manifest-CGq4NpqH2.mjs +1 -0
  118. package/dist/manifest-CJMGt7Qy.mjs +1 -0
  119. package/dist/manifest-CRIJq4Hs.mjs +1 -0
  120. package/dist/manifest-C_hEIjSx.mjs +1 -0
  121. package/dist/manifest-CeQmtQOY.mjs +1 -0
  122. package/dist/manifest-Cq0j7GZt.mjs +1 -0
  123. package/dist/manifest-CtPmHAdn.mjs +1 -0
  124. package/dist/manifest-Cx2IVMUY.mjs +1 -0
  125. package/dist/manifest-D16xPXro.mjs +1 -0
  126. package/dist/manifest-D44TaRJU.mjs +1 -0
  127. package/dist/manifest-D610kxZr.mjs +2 -0
  128. package/dist/manifest-DC-SMF6b.mjs +1 -0
  129. package/dist/manifest-DD3rtxvV.mjs +1 -0
  130. package/dist/manifest-DKUorv5M.mjs +1 -0
  131. package/dist/manifest-DMJlcsTR.mjs +1 -0
  132. package/dist/manifest-DWUUWBz0.mjs +1 -0
  133. package/dist/manifest-De-6Wf2R.mjs +1 -0
  134. package/dist/manifest-Dgh0uDW-.mjs +1 -0
  135. package/dist/manifest-Dm0o3i2U.mjs +1 -0
  136. package/dist/manifest-DsVh7Y4U.mjs +1 -0
  137. package/dist/manifest-DtEFSRaq.mjs +1 -0
  138. package/dist/manifest-H-EpAyZQ.mjs +1 -0
  139. package/dist/manifest-ais9Afrw.mjs +1 -0
  140. package/dist/manifest-tmb54wmA.mjs +1 -0
  141. package/dist/manifest-yu2xiQqe.mjs +1 -0
  142. package/dist/manifest-zrbrpKCC.mjs +1 -0
  143. package/dist/matchesWildcardPattern-BGqLSmEs.mjs +1 -0
  144. package/dist/modules-p-PUNv9r.mjs +332 -0
  145. package/dist/mojo-ipc-VGlv3Qyp.mjs +9 -0
  146. package/dist/network-BjZ1Y-GB.mjs +7 -0
  147. package/dist/outputPaths-BonGThuc.mjs +2 -0
  148. package/dist/parse-args-Cuk7-xUt.mjs +1 -0
  149. package/dist/platform-C446Lf97.mjs +93 -0
  150. package/dist/playwright-cdp-fallback-BwVR-_T3.mjs +1 -0
  151. package/dist/process-C9f2A5zk.mjs +962 -0
  152. package/dist/proxy-CvRepxgV.mjs +1 -0
  153. package/dist/registry-DUHIPE-v.mjs +1 -0
  154. package/dist/response-C7rKQst4.mjs +1 -0
  155. package/dist/search-defaults-D2bY-rzH.mjs +1 -0
  156. package/dist/server/plugin-api.mjs +1 -293
  157. package/dist/shared-state-board-Cyg-xh_k.mjs +1 -0
  158. package/dist/sourcemap-D6Q1UuAp.mjs +1 -0
  159. package/dist/ssrf-policy-T96MR3r6.mjs +1 -0
  160. package/dist/streaming-CTX58tbb.mjs +1 -0
  161. package/dist/tool-builder-CI9914Tf.mjs +1 -0
  162. package/dist/transform-Cv9P2vVD.mjs +103 -0
  163. package/dist/types-CuyefmGT.mjs +1 -0
  164. package/dist/types-DtThH00r.mjs +1 -0
  165. package/dist/wasm-DaJa8J0V.mjs +174 -0
  166. package/dist/webcrack-CsLLJIs9.mjs +46 -0
  167. package/dist/workflow-CYIXtrWD.mjs +101 -0
  168. package/package.json +12 -7
  169. package/dist/AntiCheatDetector-BNk-EoBt.mjs +0 -244
  170. package/dist/CacheAdapters-CDe5WPSV.mjs +0 -80
  171. package/dist/CodeInjector-Cq8q01kp.mjs +0 -150
  172. package/dist/ConsoleMonitor-CPVQW1Y-.mjs +0 -2201
  173. package/dist/DarwinAPI-BNPxu0RH.mjs +0 -363
  174. package/dist/DetailedDataManager-BQQcxh64.mjs +0 -217
  175. package/dist/EventBus-DgPmwpeu.mjs +0 -141
  176. package/dist/EvidenceGraphBridge-SFesNera.mjs +0 -153
  177. package/dist/ExtensionManager-CWYgw0YW.mjs +0 -714
  178. package/dist/FingerprintManager-gzWtkKuf.mjs +0 -96
  179. package/dist/HardwareBreakpoint-B9gZCdFP.mjs +0 -239
  180. package/dist/HeapAnalyzer-BLDH0dCv.mjs +0 -284
  181. package/dist/InstrumentationSession-CvPC7Jwy.mjs +0 -244
  182. package/dist/MemoryController-CbVdCIJF.mjs +0 -167
  183. package/dist/MemoryScanSession-BsDZbLYm.mjs +0 -278
  184. package/dist/MemoryScanner-Bcpml6II.mjs +0 -425
  185. package/dist/NativeMemoryManager.impl-dZtA1ZGn.mjs +0 -482
  186. package/dist/NativeMemoryManager.utils-B-FjA2mJ.mjs +0 -165
  187. package/dist/PEAnalyzer-D1lzJ_VG.mjs +0 -385
  188. package/dist/PageController-Bqm2kZ_X.mjs +0 -417
  189. package/dist/PointerChainEngine-BOhyVsjx.mjs +0 -322
  190. package/dist/PrerequisiteError-Dl33Svkz.mjs +0 -20
  191. package/dist/ResponseBuilder-D3iFYx2N.mjs +0 -143
  192. package/dist/ReverseEvidenceGraph-Dlsk94LC.mjs +0 -269
  193. package/dist/ScriptManager-aHHq0X7U.mjs +0 -3000
  194. package/dist/Speedhack-CqdIFlQl.mjs +0 -156
  195. package/dist/StealthVerifier-Bo4T3bz8.mjs +0 -135
  196. package/dist/StructureAnalyzer-DhFaPvRO.mjs +0 -426
  197. package/dist/ToolCatalog-C0JGZoOm.mjs +0 -582
  198. package/dist/ToolError-jh9whhMd.mjs +0 -15
  199. package/dist/ToolProbe-oC7aPrkv.mjs +0 -45
  200. package/dist/ToolRegistry-BjaF4oNz.mjs +0 -131
  201. package/dist/ToolRouter.policy-BWV67ZK-.mjs +0 -304
  202. package/dist/TraceRecorder-DgxyVbdQ.mjs +0 -519
  203. package/dist/VersionDetector-CwVLVdDM.mjs +0 -104
  204. package/dist/Win32API-CePkipZY.mjs +0 -340
  205. package/dist/Win32Debug-BvKs-gxc.mjs +0 -274
  206. package/dist/WorkflowEngine-CuvkZtWu.mjs +0 -598
  207. package/dist/analysis-CL9uACt9.mjs +0 -463
  208. package/dist/artifactRetention-CFEprwPw.mjs +0 -591
  209. package/dist/artifacts-Bk2-_uPq.mjs +0 -59
  210. package/dist/betterSqlite3-0pqusHHH.mjs +0 -74
  211. package/dist/binary-instrument-CXfpx6fT.mjs +0 -979
  212. package/dist/bind-helpers-xFfRF-qm.mjs +0 -22
  213. package/dist/boringssl-inspector-BH2D3VKc.mjs +0 -180
  214. package/dist/browser-BpOr5PEx.mjs +0 -4082
  215. package/dist/chunk-CjcI7cDX.mjs +0 -15
  216. package/dist/concurrency-Bt0yv1kJ.mjs +0 -41
  217. package/dist/constants-B0OANIBL.mjs +0 -519
  218. package/dist/coordination-qUbyF8KU.mjs +0 -259
  219. package/dist/debugger-gnKxRSN0.mjs +0 -1271
  220. package/dist/definitions-6M-eejaT.mjs +0 -53
  221. package/dist/definitions-B18eyf0B.mjs +0 -18
  222. package/dist/definitions-B3QdlrHv.mjs +0 -34
  223. package/dist/definitions-B4rAvHNZ.mjs +0 -63
  224. package/dist/definitions-BB_4jnmy.mjs +0 -37
  225. package/dist/definitions-BMfYXoNC.mjs +0 -43
  226. package/dist/definitions-Beid2EB3.mjs +0 -27
  227. package/dist/definitions-C1UvM5Iy.mjs +0 -126
  228. package/dist/definitions-CXEI7QC72.mjs +0 -216
  229. package/dist/definitions-C_4r7Fo-2.mjs +0 -14
  230. package/dist/definitions-CkFDALoa.mjs +0 -26
  231. package/dist/definitions-Cke7zEb8.mjs +0 -94
  232. package/dist/definitions-ClJLzsJQ.mjs +0 -25
  233. package/dist/definitions-Cq-zroAU.mjs +0 -28
  234. package/dist/definitions-Cy3Sl6gV.mjs +0 -34
  235. package/dist/definitions-D3VsGcvz.mjs +0 -47
  236. package/dist/definitions-DVGfrn7y.mjs +0 -96
  237. package/dist/definitions-LKpC3-nL.mjs +0 -9
  238. package/dist/definitions-bAhHQJq9.mjs +0 -359
  239. package/dist/encoding-Bvz5jLRv.mjs +0 -1065
  240. package/dist/evidence-graph-bridge-C_fv9PuC.mjs +0 -135
  241. package/dist/factory-DxlGh9Xf.mjs +0 -575
  242. package/dist/formatAddress-DVkj9kpI.mjs +0 -17
  243. package/dist/graphql-DYWzJ29s.mjs +0 -1026
  244. package/dist/handlers-9sAbfIg-.mjs +0 -2552
  245. package/dist/handlers-C67ktuRN.mjs +0 -710
  246. package/dist/handlers-C87g8oCe.mjs +0 -276
  247. package/dist/handlers-CTsDAO6p.mjs +0 -681
  248. package/dist/handlers-Cgyg6c0U.mjs +0 -645
  249. package/dist/handlers-D6j6yka7.mjs +0 -2124
  250. package/dist/handlers-DdFzXLvF.mjs +0 -446
  251. package/dist/handlers-DeLOCd5m.mjs +0 -799
  252. package/dist/handlers-DlCJN4Td.mjs +0 -757
  253. package/dist/handlers-DxGIq15_2.mjs +0 -917
  254. package/dist/handlers-U6L4xhuF.mjs +0 -585
  255. package/dist/handlers-tB9Mp9ZK.mjs +0 -84
  256. package/dist/handlers-tiy7EIBp.mjs +0 -572
  257. package/dist/handlers.impl-DS0d9fUw.mjs +0 -761
  258. package/dist/hooks-CzCWByww.mjs +0 -898
  259. package/dist/logger-Dh_xb7_2.mjs +0 -93
  260. package/dist/maintenance-P7ePRXQC.mjs +0 -830
  261. package/dist/manifest-2ToTpjv8.mjs +0 -106
  262. package/dist/manifest-3g71z6Bg.mjs +0 -79
  263. package/dist/manifest-82baTv4U.mjs +0 -45
  264. package/dist/manifest-B3QVVeBS.mjs +0 -82
  265. package/dist/manifest-BB2J8IMJ.mjs +0 -149
  266. package/dist/manifest-BKbgbSiY.mjs +0 -60
  267. package/dist/manifest-Bcf-TJzH.mjs +0 -848
  268. package/dist/manifest-BmtZzQiQ2.mjs +0 -45
  269. package/dist/manifest-Bnd7kqEY.mjs +0 -55
  270. package/dist/manifest-BqQX6OQC2.mjs +0 -65
  271. package/dist/manifest-BqrQ4Tpj.mjs +0 -81
  272. package/dist/manifest-Br4RPFt5.mjs +0 -370
  273. package/dist/manifest-C5qDjysN.mjs +0 -107
  274. package/dist/manifest-C9RT5nk32.mjs +0 -34
  275. package/dist/manifest-CAhOuvSl.mjs +0 -204
  276. package/dist/manifest-CBYWCUBJ.mjs +0 -51
  277. package/dist/manifest-CFADCRa1.mjs +0 -37
  278. package/dist/manifest-CQVhavRF.mjs +0 -114
  279. package/dist/manifest-CT7zZBV1.mjs +0 -48
  280. package/dist/manifest-CV12bcrF.mjs +0 -121
  281. package/dist/manifest-CXsRWjjI.mjs +0 -224
  282. package/dist/manifest-CZLUCfG02.mjs +0 -95
  283. package/dist/manifest-D6phHKFd.mjs +0 -131
  284. package/dist/manifest-DCyjf4n2.mjs +0 -294
  285. package/dist/manifest-DHsnKgP6.mjs +0 -60
  286. package/dist/manifest-Df_dliIe.mjs +0 -55
  287. package/dist/manifest-Dh8WBmEW.mjs +0 -129
  288. package/dist/manifest-DhKRAT8_.mjs +0 -92
  289. package/dist/manifest-DlpTj4ic2.mjs +0 -193
  290. package/dist/manifest-DrbmZcFl2.mjs +0 -253
  291. package/dist/manifest-DuwHjUa5.mjs +0 -70
  292. package/dist/manifest-DzwvxPJX.mjs +0 -38
  293. package/dist/manifest-NXctwWQq.mjs +0 -68
  294. package/dist/manifest-Sc_0JQ13.mjs +0 -418
  295. package/dist/manifest-gZ4s_UtG.mjs +0 -96
  296. package/dist/manifest-qSleDqdO.mjs +0 -1023
  297. package/dist/modules-C184v-S9.mjs +0 -11365
  298. package/dist/mojo-ipc-B_H61Afw.mjs +0 -525
  299. package/dist/network-671Cw6hV.mjs +0 -3346
  300. package/dist/outputPaths-B1uGmrWZ.mjs +0 -1145
  301. package/dist/parse-args-BlRjqlkL.mjs +0 -39
  302. package/dist/platform-WmNn8Sxb.mjs +0 -2070
  303. package/dist/process-QcbIy5Zq.mjs +0 -1401
  304. package/dist/proxy-DqNs0bAd.mjs +0 -170
  305. package/dist/registry-D-6e18lB.mjs +0 -34
  306. package/dist/response-BQVP-xUn.mjs +0 -28
  307. package/dist/shared-state-board-DV-dpHFJ.mjs +0 -586
  308. package/dist/sourcemap-Dq8ez8vS.mjs +0 -650
  309. package/dist/ssrf-policy-ZaUfvhq7.mjs +0 -166
  310. package/dist/streaming-BUQ0VJsg.mjs +0 -725
  311. package/dist/tool-builder-DCbIC5Eo.mjs +0 -186
  312. package/dist/transform-CiYJfNX0.mjs +0 -1007
  313. package/dist/types-Bx92KJfT.mjs +0 -4
  314. package/dist/types-CPhOReNX.mjs +0 -37
  315. package/dist/wasm-DQTnHDs4.mjs +0 -531
  316. package/dist/workflow-f3xJOcjx.mjs +0 -725
@@ -1,425 +0,0 @@
1
- import { _n as SCAN_UNKNOWN_INITIAL_MAX_ADDRESSES, dn as SCAN_DISPLAY_RESULTS_LIMIT, fn as SCAN_GROUP_MAX_PATTERN_SIZE, mn as SCAN_POINTER_MAX_RESULTS, pn as SCAN_MAX_RESULTS_PER_SCAN } from "./constants-B0OANIBL.mjs";
2
- import { t as createPlatformProvider } from "./factory-DxlGh9Xf.mjs";
3
- import { i as parsePattern } from "./NativeMemoryManager.utils-B-FjA2mJ.mjs";
4
- import { t as nativeMemoryManager } from "./NativeMemoryManager.impl-dZtA1ZGn.mjs";
5
- import { n as parseAddress, t as formatAddress } from "./formatAddress-DVkj9kpI.mjs";
6
- import { n as getDefaultAlignment, r as getValueSize, scanSessionManager, t as compareScanValues } from "./MemoryScanSession-BsDZbLYm.mjs";
7
- //#region src/native/MemoryScanner.ts
8
- /**
9
- * Memory Scanner — orchestrates iterative scan workflows.
10
- *
11
- * Provides CE-style scanning: first-scan → next-scan → narrow down → find target.
12
- * Plus AI-native features: pointer scan, group scan, unknown initial value scan.
13
- *
14
- * Uses PlatformMemoryAPI for cross-platform memory operations.
15
- *
16
- * Performance: addresses stored as bigint internally; only converted to hex
17
- * strings at API boundaries. This eliminates ~40K+ short-lived string objects
18
- * and repeated BigInt↔string round-trips during next-scan operations.
19
- *
20
- * @module MemoryScanner
21
- */
22
- var MemoryScanner = class {
23
- nmm;
24
- _provider = null;
25
- get provider() {
26
- if (!this._provider) this._provider = createPlatformProvider();
27
- return this._provider;
28
- }
29
- constructor(nmm) {
30
- this.nmm = nmm;
31
- }
32
- /**
33
- * First scan: scan entire process memory for a value.
34
- * Creates a new session, stores matching addresses + values.
35
- */
36
- async firstScan(pid, value, options) {
37
- const start = performance.now();
38
- const valueType = options.valueType;
39
- const valueSize = getValueSize(valueType);
40
- const alignment = options.alignment ?? getDefaultAlignment(valueType);
41
- const maxResults = options.maxResults ?? SCAN_MAX_RESULTS_PER_SCAN;
42
- if (valueSize === 0) return this.patternFirstScan(pid, value, valueType, options);
43
- const { patternBytes } = parsePattern(value, valueType === "pointer" ? "uint64" : valueType);
44
- if (patternBytes.length === 0) throw new Error(`Invalid pattern for type ${valueType}: "${value}"`);
45
- const targetBuf = Buffer.from(patternBytes);
46
- const sessionId = scanSessionManager.createSession(pid, options);
47
- const addresses = [];
48
- const values = /* @__PURE__ */ new Map();
49
- const handle = this.provider.openProcess(pid, false);
50
- try {
51
- const regions = this.getFilteredRegions(handle, options);
52
- const totalRegions = regions.length;
53
- let regionsProcessed = 0;
54
- for (const region of regions) {
55
- if (options.onProgress) options.onProgress(regionsProcessed, totalRegions);
56
- regionsProcessed++;
57
- if (addresses.length >= maxResults) break;
58
- const regionBase = region.baseAddress;
59
- const regionSize = region.size;
60
- const chunkSize = 16 * 1024 * 1024;
61
- for (let offset = 0; offset < regionSize && addresses.length < maxResults; offset += chunkSize) {
62
- const readSize = Math.min(chunkSize, regionSize - offset);
63
- const chunkAddr = regionBase + BigInt(offset);
64
- let chunk;
65
- try {
66
- chunk = this.provider.readMemory(handle, chunkAddr, readSize).data;
67
- } catch {
68
- break;
69
- }
70
- if (alignment === valueSize && valueSize > 0) {
71
- const alignStep = this.getAlignStep(alignment);
72
- let searchFrom = this.getAlignedChunkStart(chunkAddr, alignStep);
73
- while (searchFrom <= chunk.length - valueSize && addresses.length < maxResults) {
74
- const hit = chunk.indexOf(targetBuf, searchFrom);
75
- if (hit === -1) break;
76
- if (!this.isAlignedAddress(chunkAddr + BigInt(hit), alignStep)) {
77
- searchFrom = hit + 1;
78
- continue;
79
- }
80
- const addr = chunkAddr + BigInt(hit);
81
- addresses.push(addr);
82
- values.set(addr, Buffer.from(chunk.subarray(hit, hit + valueSize)));
83
- searchFrom = hit + alignStep;
84
- }
85
- } else {
86
- const alignStep = this.getAlignStep(alignment);
87
- const chunkStart = this.getAlignedChunkStart(chunkAddr, alignStep);
88
- for (let i = chunkStart; i <= chunk.length - valueSize; i += alignStep) if (Buffer.compare(chunk.subarray(i, i + valueSize), targetBuf) === 0) {
89
- const addr = chunkAddr + BigInt(i);
90
- addresses.push(addr);
91
- values.set(addr, Buffer.from(chunk.subarray(i, i + valueSize)));
92
- if (addresses.length >= maxResults) break;
93
- }
94
- }
95
- }
96
- }
97
- } finally {
98
- this.provider.closeProcess(handle);
99
- }
100
- scanSessionManager.updateSession(sessionId, addresses, values);
101
- const elapsed = `${(performance.now() - start).toFixed(1)}ms`;
102
- const displayAddresses = addresses.slice(0, SCAN_DISPLAY_RESULTS_LIMIT).map(formatAddress);
103
- return {
104
- sessionId,
105
- matchCount: addresses.length,
106
- scanNumber: 1,
107
- addresses: displayAddresses,
108
- totalMatches: addresses.length,
109
- truncated: addresses.length > SCAN_DISPLAY_RESULTS_LIMIT,
110
- elapsed
111
- };
112
- }
113
- /**
114
- * Next scan: re-read stored addresses, filter using comparator.
115
- */
116
- async nextScan(sessionId, mode, value, value2) {
117
- const start = performance.now();
118
- const session = scanSessionManager.getSession(sessionId);
119
- const { pid, valueType, addresses: prevAddresses, previousValues } = session;
120
- const valueSize = getValueSize(valueType);
121
- if (valueSize === 0) throw new Error("Next-scan is not supported for variable-length types (hex/string)");
122
- let targetBuf = null;
123
- let target2Buf = null;
124
- if (value !== void 0) {
125
- const { patternBytes } = parsePattern(value, valueType === "pointer" ? "uint64" : valueType);
126
- targetBuf = Buffer.from(patternBytes);
127
- }
128
- if (value2 !== void 0) {
129
- const { patternBytes } = parsePattern(value2, valueType === "pointer" ? "uint64" : valueType);
130
- target2Buf = Buffer.from(patternBytes);
131
- }
132
- const newAddresses = [];
133
- const newValues = /* @__PURE__ */ new Map();
134
- const handle = this.provider.openProcess(pid, false);
135
- try {
136
- for (const addr of prevAddresses) {
137
- let currentBuf;
138
- try {
139
- currentBuf = this.provider.readMemory(handle, addr, valueSize).data;
140
- } catch {
141
- continue;
142
- }
143
- const prevBuf = previousValues.get(addr) ?? null;
144
- if (compareScanValues(currentBuf, prevBuf, targetBuf, target2Buf, mode, valueType)) {
145
- newAddresses.push(addr);
146
- newValues.set(addr, Buffer.from(currentBuf));
147
- }
148
- }
149
- } finally {
150
- this.provider.closeProcess(handle);
151
- }
152
- scanSessionManager.updateSession(sessionId, newAddresses, newValues);
153
- const elapsed = `${(performance.now() - start).toFixed(1)}ms`;
154
- const displayAddresses = newAddresses.slice(0, SCAN_DISPLAY_RESULTS_LIMIT).map(formatAddress);
155
- return {
156
- sessionId,
157
- matchCount: newAddresses.length,
158
- scanNumber: session.scanCount,
159
- addresses: displayAddresses,
160
- totalMatches: newAddresses.length,
161
- truncated: newAddresses.length > SCAN_DISPLAY_RESULTS_LIMIT,
162
- elapsed
163
- };
164
- }
165
- /**
166
- * Unknown initial value scan: captures all readable memory addresses
167
- * of the given type, then next-scan narrows.
168
- */
169
- async unknownInitialScan(pid, options) {
170
- const start = performance.now();
171
- const valueType = options.valueType;
172
- const valueSize = getValueSize(valueType);
173
- const alignment = options.alignment ?? getDefaultAlignment(valueType);
174
- const maxAddresses = options.maxResults ?? SCAN_UNKNOWN_INITIAL_MAX_ADDRESSES;
175
- if (valueSize === 0) throw new Error("Unknown initial scan is not supported for variable-length types");
176
- const sessionId = scanSessionManager.createSession(pid, options);
177
- const addresses = [];
178
- const values = /* @__PURE__ */ new Map();
179
- const handle = this.provider.openProcess(pid, false);
180
- try {
181
- const regions = this.getFilteredRegions(handle, options);
182
- const totalRegions = regions.length;
183
- let regionsProcessed = 0;
184
- for (const region of regions) {
185
- if (options.onProgress) options.onProgress(regionsProcessed, totalRegions);
186
- regionsProcessed++;
187
- if (addresses.length >= maxAddresses) break;
188
- const regionBase = region.baseAddress;
189
- const regionSize = region.size;
190
- const chunkSize = 16 * 1024 * 1024;
191
- for (let offset = 0; offset < regionSize && addresses.length < maxAddresses; offset += chunkSize) {
192
- const readSize = Math.min(chunkSize, regionSize - offset);
193
- const chunkAddr = regionBase + BigInt(offset);
194
- let chunk;
195
- try {
196
- chunk = this.provider.readMemory(handle, chunkAddr, readSize).data;
197
- } catch {
198
- break;
199
- }
200
- const alignStep = this.getAlignStep(alignment);
201
- const chunkStart = this.getAlignedChunkStart(chunkAddr, alignStep);
202
- for (let i = chunkStart; i <= chunk.length - valueSize; i += alignStep) {
203
- const addr = chunkAddr + BigInt(i);
204
- addresses.push(addr);
205
- values.set(addr, Buffer.from(chunk.subarray(i, i + valueSize)));
206
- if (addresses.length >= maxAddresses) break;
207
- }
208
- }
209
- }
210
- } finally {
211
- this.provider.closeProcess(handle);
212
- }
213
- scanSessionManager.updateSession(sessionId, addresses, values);
214
- const elapsed = `${(performance.now() - start).toFixed(1)}ms`;
215
- return {
216
- sessionId,
217
- matchCount: addresses.length,
218
- scanNumber: 1,
219
- addresses: addresses.slice(0, SCAN_DISPLAY_RESULTS_LIMIT).map(formatAddress),
220
- totalMatches: addresses.length,
221
- truncated: addresses.length > SCAN_DISPLAY_RESULTS_LIMIT,
222
- elapsed
223
- };
224
- }
225
- /**
226
- * Pointer scan: find addresses whose value points to a valid target address.
227
- */
228
- async pointerScan(pid, targetAddress, options = {}) {
229
- const start = performance.now();
230
- const maxResults = options.maxResults ?? SCAN_POINTER_MAX_RESULTS;
231
- const targetAddr = parseAddress(targetAddress);
232
- const scanOptions = {
233
- valueType: "pointer",
234
- alignment: 8,
235
- regionFilter: { moduleOnly: options.moduleOnly }
236
- };
237
- const sessionId = scanSessionManager.createSession(pid, scanOptions);
238
- const pointers = [];
239
- const handle = this.provider.openProcess(pid, false);
240
- try {
241
- const regions = this.getFilteredRegions(handle, scanOptions);
242
- for (const region of regions) {
243
- if (options.moduleOnly) {}
244
- if (pointers.length >= maxResults) break;
245
- const regionBase = region.baseAddress;
246
- const regionSize = region.size;
247
- const chunkSize = 16 * 1024 * 1024;
248
- for (let offset = 0; offset < regionSize && pointers.length < maxResults; offset += chunkSize) {
249
- const readSize = Math.min(chunkSize, regionSize - offset);
250
- const chunkAddr = regionBase + BigInt(offset);
251
- let chunk;
252
- try {
253
- chunk = this.provider.readMemory(handle, chunkAddr, readSize).data;
254
- } catch {
255
- break;
256
- }
257
- for (let i = 0; i <= chunk.length - 8; i += 8) {
258
- const ptrValue = chunk.readBigUInt64LE(i);
259
- if ((ptrValue > targetAddr ? Number(ptrValue - targetAddr) : Number(targetAddr - ptrValue)) <= 4096) {
260
- const addr = chunkAddr + BigInt(i);
261
- const offsetFromTarget = ptrValue >= targetAddr ? Number(ptrValue - targetAddr) : -Number(targetAddr - ptrValue);
262
- pointers.push({
263
- address: formatAddress(addr),
264
- value: formatAddress(ptrValue),
265
- offsetFromTarget
266
- });
267
- if (pointers.length >= maxResults) break;
268
- }
269
- }
270
- }
271
- }
272
- } finally {
273
- this.provider.closeProcess(handle);
274
- }
275
- const addresses = pointers.map((p) => parseAddress(p.address));
276
- scanSessionManager.updateSession(sessionId, addresses, /* @__PURE__ */ new Map());
277
- const elapsed = `${(performance.now() - start).toFixed(1)}ms`;
278
- return {
279
- sessionId,
280
- pointers: pointers.slice(0, SCAN_DISPLAY_RESULTS_LIMIT),
281
- totalFound: pointers.length,
282
- elapsed
283
- };
284
- }
285
- /**
286
- * Group scan: search for N values at known offsets simultaneously.
287
- */
288
- async groupScan(pid, pattern, options) {
289
- const start = performance.now();
290
- if (pattern.length === 0) throw new Error("Group scan requires at least one value pattern");
291
- const maxOffset = Math.max(...pattern.map((p) => p.offset + getValueSize(p.type)));
292
- if (maxOffset > SCAN_GROUP_MAX_PATTERN_SIZE) throw new Error(`Group pattern too large: ${maxOffset} bytes (max ${SCAN_GROUP_MAX_PATTERN_SIZE})`);
293
- const compositePattern = Array.from({ length: maxOffset }, () => 0);
294
- const compositeMask = Array.from({ length: maxOffset }, () => 0);
295
- for (const entry of pattern) {
296
- const effectiveType = entry.type === "pointer" ? "uint64" : entry.type;
297
- const { patternBytes, mask } = parsePattern(entry.value, effectiveType);
298
- for (let i = 0; i < patternBytes.length; i++) {
299
- compositePattern[entry.offset + i] = patternBytes[i];
300
- compositeMask[entry.offset + i] = mask[i];
301
- }
302
- }
303
- const alignment = options?.alignment ?? 4;
304
- const maxResults = options?.maxResults ?? SCAN_MAX_RESULTS_PER_SCAN;
305
- const scanOptions = {
306
- valueType: "int32",
307
- alignment
308
- };
309
- const sessionId = scanSessionManager.createSession(pid, scanOptions);
310
- const addresses = [];
311
- const handle = this.provider.openProcess(pid, false);
312
- try {
313
- const regions = this.getFilteredRegions(handle, scanOptions);
314
- for (const region of regions) {
315
- if (addresses.length >= maxResults) break;
316
- const regionBase = region.baseAddress;
317
- const regionSize = region.size;
318
- const chunkSize = 16 * 1024 * 1024;
319
- const overlap = maxOffset - 1;
320
- for (let chunkOffset = 0; chunkOffset < regionSize && addresses.length < maxResults; chunkOffset += chunkSize) {
321
- const readSize = Math.min(chunkSize + overlap, regionSize - chunkOffset);
322
- const chunkAddr = regionBase + BigInt(chunkOffset);
323
- let chunk;
324
- try {
325
- chunk = this.provider.readMemory(handle, chunkAddr, readSize).data;
326
- } catch {
327
- break;
328
- }
329
- const alignStep = this.getAlignStep(alignment);
330
- const chunkStart = this.getAlignedChunkStart(chunkAddr, alignStep);
331
- for (let i = chunkStart; i <= chunk.length - maxOffset; i += alignStep) {
332
- let match = true;
333
- for (let j = 0; j < maxOffset; j++) if (compositeMask[j] === 1 && chunk[i + j] !== compositePattern[j]) {
334
- match = false;
335
- break;
336
- }
337
- if (match) {
338
- const addr = chunkAddr + BigInt(i);
339
- addresses.push(addr);
340
- if (addresses.length >= maxResults) break;
341
- }
342
- }
343
- }
344
- }
345
- } finally {
346
- this.provider.closeProcess(handle);
347
- }
348
- scanSessionManager.updateSession(sessionId, addresses, /* @__PURE__ */ new Map());
349
- const elapsed = `${(performance.now() - start).toFixed(1)}ms`;
350
- return {
351
- sessionId,
352
- matchCount: addresses.length,
353
- scanNumber: 1,
354
- addresses: addresses.slice(0, SCAN_DISPLAY_RESULTS_LIMIT).map(formatAddress),
355
- totalMatches: addresses.length,
356
- truncated: addresses.length > SCAN_DISPLAY_RESULTS_LIMIT,
357
- elapsed
358
- };
359
- }
360
- getAlignStep(alignment) {
361
- return alignment > 0 ? alignment : 1;
362
- }
363
- getAlignedChunkStart(chunkAddr, alignStep) {
364
- const align = BigInt(alignStep);
365
- const remainder = chunkAddr % align;
366
- return remainder === 0n ? 0 : Number(align - remainder);
367
- }
368
- isAlignedAddress(address, alignStep) {
369
- return address % BigInt(alignStep) === 0n;
370
- }
371
- /**
372
- * Pattern-based first scan for variable-length types (hex/string).
373
- * Delegates to existing NativeMemoryManager.scanMemory.
374
- */
375
- async patternFirstScan(pid, value, valueType, options) {
376
- const start = performance.now();
377
- const patternType = valueType === "pointer" ? "uint64" : valueType;
378
- const result = await this.nmm.scanMemory(pid, value, patternType);
379
- if (!result.success) throw new Error(result.error ?? "Scan failed");
380
- const sessionId = scanSessionManager.createSession(pid, options);
381
- const maxResultCount = options.maxResults ?? SCAN_MAX_RESULTS_PER_SCAN;
382
- const addresses = result.addresses.slice(0, maxResultCount).map(parseAddress);
383
- scanSessionManager.updateSession(sessionId, addresses, /* @__PURE__ */ new Map());
384
- const elapsed = `${(performance.now() - start).toFixed(1)}ms`;
385
- return {
386
- sessionId,
387
- matchCount: addresses.length,
388
- scanNumber: 1,
389
- addresses: addresses.slice(0, SCAN_DISPLAY_RESULTS_LIMIT).map(formatAddress),
390
- totalMatches: result.addresses.length,
391
- truncated: addresses.length > SCAN_DISPLAY_RESULTS_LIMIT,
392
- elapsed
393
- };
394
- }
395
- /**
396
- * Get readable memory regions, applying region filters.
397
- * Uses PlatformMemoryAPI.queryRegion() for cross-platform support.
398
- */
399
- getFilteredRegions(handle, options) {
400
- const regions = [];
401
- let address = 0n;
402
- const maxAddress = BigInt("0x7FFFFFFF0000");
403
- const filter = options.regionFilter;
404
- while (address < maxAddress) {
405
- const regionInfo = this.provider.queryRegion(handle, address);
406
- if (!regionInfo) break;
407
- const regionSize = regionInfo.size;
408
- if (regionInfo.isReadable && regionSize > 0 && regionSize <= Number.MAX_SAFE_INTEGER) {
409
- let include = true;
410
- if (filter?.writable && !regionInfo.isWritable) include = false;
411
- if (filter?.executable && !regionInfo.isExecutable) include = false;
412
- if (filter?.moduleOnly && regionInfo.type !== "image") include = false;
413
- if (include) regions.push({
414
- baseAddress: regionInfo.baseAddress,
415
- size: regionSize
416
- });
417
- }
418
- address = regionInfo.baseAddress + BigInt(regionInfo.size);
419
- }
420
- return regions;
421
- }
422
- };
423
- const memoryScanner = new MemoryScanner(nativeMemoryManager);
424
- //#endregion
425
- export { MemoryScanner, memoryScanner };