@jshookmcp/jshook 0.3.0 → 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.
- package/README.md +25 -50
- package/README.zh.md +25 -48
- package/dist/AntiCheatDetector-CGVGNfy5.mjs +1 -0
- package/dist/CacheAdapters-CdAxBmVW.mjs +1 -0
- package/dist/CodeInjector-BlgyqTOk.mjs +1 -0
- package/dist/ConsoleMonitor-Dkqc0HNi.mjs +490 -0
- package/dist/DOMInspector-BYY_EJ0C.mjs +95 -0
- package/dist/DarwinAPI-DC4HGGLl.mjs +1 -0
- package/dist/DetailedDataManager-BniBJlVv.mjs +1 -0
- package/dist/EventBus-DgciURGg.mjs +1 -0
- package/dist/EvidenceGraphBridge-BIfgB7HP.mjs +1 -0
- package/dist/ExtensionManager-erMpqcLk.mjs +1 -0
- package/dist/FingerprintManager-N7BZqjxP.mjs +1 -0
- package/dist/HardwareBreakpoint-OcJqNFVc.mjs +1 -0
- package/dist/HeapAnalyzer-CqAxZzeS.mjs +1 -0
- package/dist/{HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs → HookGeneratorBuilders.core.generators.storage-Bf1fbrNK.mjs} +66 -101
- package/dist/InstrumentationSession-DxXs0sCp.mjs +1 -0
- package/dist/MCPServer.search.handlers.domain-DVbWL1bT.mjs +1 -0
- package/dist/MemoryController-BaqstM5w.mjs +2 -0
- package/dist/MemoryScanSession-CaxAjZJf.mjs +1 -0
- package/dist/MemoryScanner-BLYnMJy6.mjs +1 -0
- package/dist/NativeMemoryManager.impl-CI554XbY.mjs +1 -0
- package/dist/NativeMemoryManager.utils-DM4NC3FE.mjs +1 -0
- package/dist/PEAnalyzer-DJyaJTQJ.mjs +1 -0
- package/dist/PageController-D9jVkH0i.mjs +1 -0
- package/dist/PointerChainEngine-5nF9eNlu.mjs +1 -0
- package/dist/PrerequisiteError-Bl3dK8XA.mjs +1 -0
- package/dist/ProcessRegistry-Hf12LlR9.mjs +1 -0
- package/dist/ResponseBuilder-B2lu4KEl.mjs +1 -0
- package/dist/ReverseEvidenceGraph-B931HeoW.mjs +2 -0
- package/dist/ScriptManager-fgqiALgj.mjs +7 -0
- package/dist/Speedhack-l6s8L2Qw.mjs +1 -0
- package/dist/StealthVerifier-Dhbj4B4P.mjs +1 -0
- package/dist/StructureAnalyzer-A-WamfYE.mjs +2 -0
- package/dist/ToolCatalog-D_IKl1Hu.mjs +1 -0
- package/dist/ToolError-DWU_z7gp.mjs +1 -0
- package/dist/ToolProbe-xsfALmN3.mjs +1 -0
- package/dist/ToolRegistry-B0Zs-phN.mjs +1 -0
- package/dist/ToolRouter.policy-CFHoN_Lw.mjs +4 -0
- package/dist/TraceRecorder-Dd8jLXpi.mjs +272 -0
- package/dist/VersionDetector-DMoUWyNm.mjs +9 -0
- package/dist/Win32API-Bhi5xFBe.mjs +1 -0
- package/dist/Win32Debug-CQteFL4F.mjs +1 -0
- package/dist/WorkflowEngine-CxEp2WXH.mjs +1 -0
- package/dist/analysis-BuR-NgX8.mjs +5 -0
- package/dist/{antidebug-BRKeyt27.mjs → antidebug-BOTZH6-0.mjs} +8 -259
- package/dist/artifactRetention-NBdncOEW.mjs +1 -0
- package/dist/artifacts-B5xQuEa_.mjs +1 -0
- package/dist/authorization-schema-B40obG1A.mjs +1 -0
- package/dist/betterSqlite3-CGaxz4AX.mjs +1 -0
- package/dist/binary-instrument-Cf9qqLlM.mjs +7 -0
- package/dist/bind-helpers-BlAOQrFQ.mjs +1 -0
- package/dist/boringssl-inspector-BST5vtKx.mjs +2 -0
- package/dist/browser-C4Le3xqA.mjs +11 -0
- package/dist/capabilities-DbYCv-HF.mjs +1 -0
- package/dist/chunk-C_pMuVsO.mjs +1 -0
- package/dist/collector-CKO8RPK8.mjs +1 -0
- package/dist/concurrency-CcK46d0h.mjs +1 -0
- package/dist/constants-Cp6hBrrx.mjs +1 -0
- package/dist/coordination-BbijHEHH.mjs +1 -0
- package/dist/debugger-CRJq_krh.mjs +1 -0
- package/dist/definitions-BGobEDQa.mjs +1 -0
- package/dist/definitions-BGwNSkVm.mjs +1 -0
- package/dist/definitions-BbxOUiP-.mjs +1 -0
- package/dist/definitions-CCP9gphV.mjs +1 -0
- package/dist/definitions-CIO9O-Sw.mjs +1 -0
- package/dist/definitions-CYFbewnd.mjs +1 -0
- package/dist/definitions-CdWEuIkI.mjs +1 -0
- package/dist/definitions-CoQFbggH.mjs +1 -0
- package/dist/definitions-CuJRsJ6N.mjs +1 -0
- package/dist/definitions-DI9YXsJk.mjs +1 -0
- package/dist/definitions-DJklW2sS.mjs +1 -0
- package/dist/definitions-DZ8uKusP.mjs +1 -0
- package/dist/definitions-Dds_zrWx.mjs +1 -0
- package/dist/definitions-Dgrg7f3D.mjs +1 -0
- package/dist/definitions-DtE0XLrT.mjs +1 -0
- package/dist/definitions-LaYTuwQd.mjs +26 -0
- package/dist/definitions-NoVp_9Pm.mjs +1 -0
- package/dist/definitions-OvGsfxdt.mjs +1 -0
- package/dist/definitions-jXPaVy4P.mjs +1 -0
- package/dist/encoding-DGcr6Aj_.mjs +2 -0
- package/dist/ensure-browser-core-Buls24LQ.mjs +1 -0
- package/dist/evidence-graph-bridge-B0yhGPcs.mjs +1 -0
- package/dist/factory-Cx_1LorX.mjs +1 -0
- package/dist/flat-target-session-CO5g78k3.mjs +1 -0
- package/dist/formatAddress-C7j2fDlM.mjs +1 -0
- package/dist/graphql-HLf3MS8H.mjs +62 -0
- package/dist/handlers-BLMa4X7l.mjs +54 -0
- package/dist/handlers-BP12ZsWc.mjs +4 -0
- package/dist/handlers-BZoPla6E.mjs +1 -0
- package/dist/handlers-BggKiVx9.mjs +2 -0
- package/dist/handlers-D3iev8g1.mjs +1 -0
- package/dist/handlers-D49r1-1P.mjs +1 -0
- package/dist/handlers-DCE45Ww8.mjs +2 -0
- package/dist/handlers-DW5AbYs5.mjs +5 -0
- package/dist/handlers-De5u62Ga2.mjs +1 -0
- package/dist/handlers-DmQzIc44.mjs +31 -0
- package/dist/handlers-DnJRGp7t.mjs +302 -0
- package/dist/handlers-Dv_runVv.mjs +2 -0
- package/dist/handlers-S9Ws0IGy.mjs +2 -0
- package/dist/{handlers-Dz9PYsCa.mjs → handlers-pVNpaw4A.mjs} +118 -904
- package/dist/handlers.impl-CD2_kOcC.mjs +1 -0
- package/dist/hooks-DDKppogd.mjs +600 -0
- package/dist/index.mjs +12 -5235
- package/dist/logger-sBC6IdRT.mjs +1 -0
- package/dist/maintenance-CutEO84j.mjs +1 -0
- package/dist/manifest-BFGxlDRh.mjs +123 -0
- package/dist/manifest-BPuE6oH2.mjs +1 -0
- package/dist/manifest-BXry5N09.mjs +1 -0
- package/dist/manifest-BeP_zJGb2.mjs +1 -0
- package/dist/manifest-C0g67k6U.mjs +1 -0
- package/dist/manifest-C1nZkTkO.mjs +1 -0
- package/dist/manifest-C7qV1z7F.mjs +1 -0
- package/dist/manifest-CDeUZGUZ.mjs +1 -0
- package/dist/manifest-CDiCtaQT.mjs +1 -0
- package/dist/manifest-CFn0359q2.mjs +1 -0
- package/dist/manifest-CGq4NpqH2.mjs +1 -0
- package/dist/manifest-CJMGt7Qy.mjs +1 -0
- package/dist/manifest-CRIJq4Hs.mjs +1 -0
- package/dist/manifest-C_hEIjSx.mjs +1 -0
- package/dist/manifest-CeQmtQOY.mjs +1 -0
- package/dist/manifest-Cq0j7GZt.mjs +1 -0
- package/dist/manifest-CtPmHAdn.mjs +1 -0
- package/dist/manifest-Cx2IVMUY.mjs +1 -0
- package/dist/manifest-D16xPXro.mjs +1 -0
- package/dist/manifest-D44TaRJU.mjs +1 -0
- package/dist/manifest-D610kxZr.mjs +2 -0
- package/dist/manifest-DC-SMF6b.mjs +1 -0
- package/dist/manifest-DD3rtxvV.mjs +1 -0
- package/dist/manifest-DKUorv5M.mjs +1 -0
- package/dist/manifest-DMJlcsTR.mjs +1 -0
- package/dist/manifest-DWUUWBz0.mjs +1 -0
- package/dist/manifest-De-6Wf2R.mjs +1 -0
- package/dist/manifest-Dgh0uDW-.mjs +1 -0
- package/dist/manifest-Dm0o3i2U.mjs +1 -0
- package/dist/manifest-DsVh7Y4U.mjs +1 -0
- package/dist/manifest-DtEFSRaq.mjs +1 -0
- package/dist/manifest-H-EpAyZQ.mjs +1 -0
- package/dist/manifest-ais9Afrw.mjs +1 -0
- package/dist/manifest-tmb54wmA.mjs +1 -0
- package/dist/manifest-yu2xiQqe.mjs +1 -0
- package/dist/manifest-zrbrpKCC.mjs +1 -0
- package/dist/matchesWildcardPattern-BGqLSmEs.mjs +1 -0
- package/dist/modules-p-PUNv9r.mjs +332 -0
- package/dist/mojo-ipc-VGlv3Qyp.mjs +9 -0
- package/dist/network-BjZ1Y-GB.mjs +7 -0
- package/dist/outputPaths-BonGThuc.mjs +2 -0
- package/dist/parse-args-Cuk7-xUt.mjs +1 -0
- package/dist/platform-C446Lf97.mjs +93 -0
- package/dist/playwright-cdp-fallback-BwVR-_T3.mjs +1 -0
- package/dist/process-C9f2A5zk.mjs +962 -0
- package/dist/proxy-CvRepxgV.mjs +1 -0
- package/dist/registry-DUHIPE-v.mjs +1 -0
- package/dist/response-C7rKQst4.mjs +1 -0
- package/dist/search-defaults-D2bY-rzH.mjs +1 -0
- package/dist/server/plugin-api.mjs +1 -293
- package/dist/shared-state-board-Cyg-xh_k.mjs +1 -0
- package/dist/sourcemap-D6Q1UuAp.mjs +1 -0
- package/dist/ssrf-policy-T96MR3r6.mjs +1 -0
- package/dist/streaming-CTX58tbb.mjs +1 -0
- package/dist/tool-builder-CI9914Tf.mjs +1 -0
- package/dist/transform-Cv9P2vVD.mjs +103 -0
- package/dist/types-CuyefmGT.mjs +1 -0
- package/dist/types-DtThH00r.mjs +1 -0
- package/dist/wasm-DaJa8J0V.mjs +174 -0
- package/dist/webcrack-CsLLJIs9.mjs +46 -0
- package/dist/workflow-CYIXtrWD.mjs +101 -0
- package/package.json +50 -78
- package/dist/AntiCheatDetector-CqGDXmfc.mjs +0 -350
- package/dist/CacheAdapters-jJFy20G-.mjs +0 -80
- package/dist/CodeInjector-BdjRfNx7.mjs +0 -150
- package/dist/ConsoleMonitor-DykL3IAw.mjs +0 -2269
- package/dist/DarwinAPI-ETyy0xyo.mjs +0 -363
- package/dist/DetailedDataManager-HT49OrvF.mjs +0 -217
- package/dist/EventBus-DFKvADm3.mjs +0 -141
- package/dist/EvidenceGraphBridge-318Oi0Lf.mjs +0 -153
- package/dist/ExtensionManager-BDMsY2Dz.mjs +0 -721
- package/dist/FingerprintManager-BN4UQWnX.mjs +0 -96
- package/dist/HardwareBreakpoint-Cc2AFq1Y.mjs +0 -239
- package/dist/HeapAnalyzer-DruMgsgj.mjs +0 -284
- package/dist/InstrumentationSession-DLH0vd-z.mjs +0 -244
- package/dist/MemoryController-CMtviNW_.mjs +0 -167
- package/dist/MemoryScanSession-ITgb_NMi.mjs +0 -278
- package/dist/MemoryScanner-CiL7Z3ey.mjs +0 -428
- package/dist/NativeMemoryManager.impl-D9Lkovvn.mjs +0 -485
- package/dist/NativeMemoryManager.utils-BBlAixF5.mjs +0 -165
- package/dist/PEAnalyzer-DMQ44gen.mjs +0 -385
- package/dist/PageController-BPJNqqBN.mjs +0 -431
- package/dist/PointerChainEngine-K7wN8Z-w.mjs +0 -325
- package/dist/PrerequisiteError-TuyZIs6n.mjs +0 -20
- package/dist/ProcessRegistry-zGg12QbE.mjs +0 -74
- package/dist/ResponseBuilder-CJXWmWNw.mjs +0 -143
- package/dist/ReverseEvidenceGraph-C02-gXOh.mjs +0 -269
- package/dist/ScriptManager-ZuWD-0Jg.mjs +0 -3003
- package/dist/Speedhack-D-z0umeT.mjs +0 -156
- package/dist/StealthVerifier-BWmPgQsv.mjs +0 -135
- package/dist/StructureAnalyzer-Cav5AVSL.mjs +0 -429
- package/dist/ToolCatalog-5OJdMiF0.mjs +0 -582
- package/dist/ToolError-jh9whhMd.mjs +0 -15
- package/dist/ToolProbe-DbCFGyrg.mjs +0 -45
- package/dist/ToolRegistry-B9krbTtI.mjs +0 -180
- package/dist/ToolRouter.policy-BGDAGyeH.mjs +0 -344
- package/dist/TraceRecorder-B41Z5XBj.mjs +0 -1286
- package/dist/VersionDetector-K3V4vGsw.mjs +0 -104
- package/dist/Win32API-C2kjj0ze.mjs +0 -346
- package/dist/Win32Debug-CKrGOTpo.mjs +0 -274
- package/dist/WorkflowEngine-DJ6M4opp.mjs +0 -569
- package/dist/analysis-BHeJW2Nb.mjs +0 -1234
- package/dist/artifactRetention-CPXkUJXp.mjs +0 -598
- package/dist/artifacts-DkfosXH3.mjs +0 -59
- package/dist/authorization-schema-DRqyJMSk.mjs +0 -31
- package/dist/betterSqlite3-DLSBZodi.mjs +0 -74
- package/dist/binary-instrument--V3MAhJ4.mjs +0 -971
- package/dist/bind-helpers-ClV34xdn.mjs +0 -42
- package/dist/boringssl-inspector-Bo_LOLaS.mjs +0 -180
- package/dist/browser-Dx3_S2cG.mjs +0 -4369
- package/dist/capabilities-CcHlvWgK.mjs +0 -33
- package/dist/chunk-CjcI7cDX.mjs +0 -15
- package/dist/concurrency-Drev_Vz9.mjs +0 -41
- package/dist/constants-CDZLOoVv.mjs +0 -534
- package/dist/coordination-DgItD9DL.mjs +0 -259
- package/dist/debugger-RS3RSAqs.mjs +0 -1288
- package/dist/definitions-BEoYofW5.mjs +0 -47
- package/dist/definitions-BRaefg3u.mjs +0 -365
- package/dist/definitions-BbkvZkiv.mjs +0 -96
- package/dist/definitions-BtWSHJ3o.mjs +0 -17
- package/dist/definitions-C1gCHO0i.mjs +0 -43
- package/dist/definitions-CDOg_b-l.mjs +0 -138
- package/dist/definitions-CVPD9hzZ.mjs +0 -54
- package/dist/definitions-Cea8Lgl7.mjs +0 -94
- package/dist/definitions-DAgIyjxM.mjs +0 -10
- package/dist/definitions-DJA27nsL.mjs +0 -66
- package/dist/definitions-DKPFU3LW.mjs +0 -25
- package/dist/definitions-DPRpZQ96.mjs +0 -47
- package/dist/definitions-DUE5gmdn.mjs +0 -18
- package/dist/definitions-DYVjOtxa.mjs +0 -26
- package/dist/definitions-DcYLVLCo.mjs +0 -37
- package/dist/definitions-Pp5LI2H4.mjs +0 -27
- package/dist/definitions-j9KdHVNR.mjs +0 -14
- package/dist/definitions-uzkjBwa7.mjs +0 -258
- package/dist/definitions-va-AnLuQ.mjs +0 -28
- package/dist/encoding-DJeqHmpd.mjs +0 -1079
- package/dist/evidence-graph-bridge-DcYizFk2.mjs +0 -136
- package/dist/factory-C90tBff6.mjs +0 -575
- package/dist/flat-target-session-Dgax2Cy3.mjs +0 -29
- package/dist/formatAddress-nnMvEohD.mjs +0 -17
- package/dist/graphql-CoHrhweh.mjs +0 -1197
- package/dist/handlers-4jmR0nMs.mjs +0 -898
- package/dist/handlers-BAHPxcch.mjs +0 -789
- package/dist/handlers-BOs9b907.mjs +0 -2600
- package/dist/handlers-BWXEy6ef.mjs +0 -917
- package/dist/handlers-Bndn6QvE.mjs +0 -111
- package/dist/handlers-BqC4bD4s.mjs +0 -681
- package/dist/handlers-BtYq60bM2.mjs +0 -276
- package/dist/handlers-BzgcB4iv.mjs +0 -799
- package/dist/handlers-CRyRWj2b.mjs +0 -859
- package/dist/handlers-CVv2H1uq.mjs +0 -592
- package/dist/handlers-Dl5a7JS4.mjs +0 -572
- package/dist/handlers-Dx2d7jt7.mjs +0 -2537
- package/dist/handlers-HujRKC3b.mjs +0 -661
- package/dist/handlers.impl-XWXkQfyi.mjs +0 -807
- package/dist/hooks-B1B8NRHL.mjs +0 -898
- package/dist/logger-Dh_xb7_2.mjs +0 -93
- package/dist/maintenance-PRMkLVRW.mjs +0 -835
- package/dist/manifest-67Bok-Si.mjs +0 -58
- package/dist/manifest-6lNTMZAB2.mjs +0 -87
- package/dist/manifest-B2duEHiH.mjs +0 -90
- package/dist/manifest-B6EY9Vm8.mjs +0 -57
- package/dist/manifest-B6nKSbyY.mjs +0 -95
- package/dist/manifest-BL8AQNPF.mjs +0 -106
- package/dist/manifest-BSZvJJmV.mjs +0 -47
- package/dist/manifest-BU7qzUyX.mjs +0 -418
- package/dist/manifest-Bl62e8WK.mjs +0 -49
- package/dist/manifest-Bo5cXjdt.mjs +0 -82
- package/dist/manifest-BpS4gtUK.mjs +0 -1347
- package/dist/manifest-Bv65_e2W.mjs +0 -101
- package/dist/manifest-BytNIF4Z.mjs +0 -117
- package/dist/manifest-C-xtsjS3.mjs +0 -81
- package/dist/manifest-CDYl7OhA.mjs +0 -66
- package/dist/manifest-CRZ3xmkD.mjs +0 -61
- package/dist/manifest-CoW6u4Tp.mjs +0 -132
- package/dist/manifest-Cq5zN_8A.mjs +0 -50
- package/dist/manifest-D7YZM_2e.mjs +0 -194
- package/dist/manifest-DE_VrAeQ.mjs +0 -314
- package/dist/manifest-DGsXSCpT.mjs +0 -39
- package/dist/manifest-DJ2vfEuW.mjs +0 -156
- package/dist/manifest-DPXDYhEu.mjs +0 -80
- package/dist/manifest-Dd4fQb0a.mjs +0 -322
- package/dist/manifest-Deq6opGg.mjs +0 -223
- package/dist/manifest-DfJTafJK.mjs +0 -37
- package/dist/manifest-DgOdgN_j.mjs +0 -50
- package/dist/manifest-DlbMW4v4.mjs +0 -47
- package/dist/manifest-DmVfbH0w.mjs +0 -374
- package/dist/manifest-Dog6Ddjr.mjs +0 -109
- package/dist/manifest-DvgU5FWb.mjs +0 -58
- package/dist/manifest-HsfDBs7j.mjs +0 -50
- package/dist/manifest-I8oQHvCG.mjs +0 -186
- package/dist/manifest-NvH_a-av.mjs +0 -786
- package/dist/manifest-cEJU1v0Z.mjs +0 -129
- package/dist/manifest-wOl5XLB12.mjs +0 -112
- package/dist/modules-tZozf0LQ.mjs +0 -10635
- package/dist/mojo-ipc-DXNEXEqb.mjs +0 -640
- package/dist/network-CPVvwvFg.mjs +0 -3852
- package/dist/outputPaths-um7lCRY3.mjs +0 -1141
- package/dist/parse-args-B4cY5Vx5.mjs +0 -39
- package/dist/platform-CYeFoTWp.mjs +0 -2161
- package/dist/process-BTbgcVc6.mjs +0 -1306
- package/dist/proxy-r8YN6nP1.mjs +0 -192
- package/dist/registry-Bl8ZQW61.mjs +0 -34
- package/dist/response-CWhh2aLo.mjs +0 -34
- package/dist/shared-state-board-BoZnSoj-.mjs +0 -586
- package/dist/sourcemap-BIDHUVXy.mjs +0 -934
- package/dist/ssrf-policy-Dsqd-DTX.mjs +0 -166
- package/dist/streaming-Dal6utPp.mjs +0 -725
- package/dist/tool-builder-BHJp32mV.mjs +0 -186
- package/dist/transform-DRVgGG90.mjs +0 -1011
- package/dist/types-Bx92KJfT.mjs +0 -4
- package/dist/types-DDBWs9UP.mjs +0 -37
- package/dist/wasm-BYx5UOeG.mjs +0 -1044
- package/dist/webcrack-Be0_FccV.mjs +0 -747
- package/dist/workflow-BpuKEtvn.mjs +0 -725
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
import { t as logger } from "./logger-Dh_xb7_2.mjs";
|
|
2
|
-
import { r as GetLastError, t as CloseHandle } from "./Win32API-C2kjj0ze.mjs";
|
|
3
|
-
import koffi from "koffi";
|
|
4
|
-
//#region src/native/Win32Debug.ts
|
|
5
|
-
/**
|
|
6
|
-
* Win32 Debug API Bindings using koffi FFI.
|
|
7
|
-
*
|
|
8
|
-
* Thread management, debug registers, debug events, and instruction cache.
|
|
9
|
-
* These extend Win32API.ts with debug-specific functionality needed for
|
|
10
|
-
* hardware breakpoints and code injection.
|
|
11
|
-
*
|
|
12
|
-
* @module Win32Debug
|
|
13
|
-
*/
|
|
14
|
-
const THREAD_ACCESS = {
|
|
15
|
-
TERMINATE: 1,
|
|
16
|
-
SUSPEND_RESUME: 2,
|
|
17
|
-
GET_CONTEXT: 8,
|
|
18
|
-
SET_CONTEXT: 16,
|
|
19
|
-
SET_INFORMATION: 32,
|
|
20
|
-
QUERY_INFORMATION: 64,
|
|
21
|
-
SET_THREAD_TOKEN: 128,
|
|
22
|
-
IMPERSONATE: 256,
|
|
23
|
-
DIRECT_IMPERSONATION: 512,
|
|
24
|
-
ALL_ACCESS: 2032639
|
|
25
|
-
};
|
|
26
|
-
/** CONTEXT flags for GetThreadContext / SetThreadContext */
|
|
27
|
-
const CONTEXT_FLAGS = {
|
|
28
|
-
AMD64: 1048576,
|
|
29
|
-
CONTROL: 1048577,
|
|
30
|
-
INTEGER: 1048578,
|
|
31
|
-
SEGMENTS: 1048580,
|
|
32
|
-
FLOATING_POINT: 1048584,
|
|
33
|
-
DEBUG_REGISTERS: 1048592,
|
|
34
|
-
FULL: 1048587,
|
|
35
|
-
ALL: 1048607
|
|
36
|
-
};
|
|
37
|
-
/** Debug event codes */
|
|
38
|
-
const DEBUG_EVENT_CODE = {
|
|
39
|
-
EXCEPTION_DEBUG_EVENT: 1,
|
|
40
|
-
CREATE_THREAD_DEBUG_EVENT: 2,
|
|
41
|
-
CREATE_PROCESS_DEBUG_EVENT: 3,
|
|
42
|
-
EXIT_THREAD_DEBUG_EVENT: 4,
|
|
43
|
-
EXIT_PROCESS_DEBUG_EVENT: 5,
|
|
44
|
-
LOAD_DLL_DEBUG_EVENT: 6,
|
|
45
|
-
UNLOAD_DLL_DEBUG_EVENT: 7,
|
|
46
|
-
OUTPUT_DEBUG_STRING_EVENT: 8,
|
|
47
|
-
RIP_EVENT: 9
|
|
48
|
-
};
|
|
49
|
-
/** Exception codes */
|
|
50
|
-
const EXCEPTION_CODE = {
|
|
51
|
-
SINGLE_STEP: 2147483652,
|
|
52
|
-
BREAKPOINT: 2147483651,
|
|
53
|
-
ACCESS_VIOLATION: 3221225477
|
|
54
|
-
};
|
|
55
|
-
/** Continue status for ContinueDebugEvent */
|
|
56
|
-
const DBG = {
|
|
57
|
-
CONTINUE: 65538,
|
|
58
|
-
EXCEPTION_NOT_HANDLED: 2147549185,
|
|
59
|
-
REPLY_LATER: 1073807361
|
|
60
|
-
};
|
|
61
|
-
/** TH32CS flags for CreateToolhelp32Snapshot */
|
|
62
|
-
const TH32CS = {
|
|
63
|
-
SNAPHEAPLIST: 1,
|
|
64
|
-
SNAPTHREAD: 4,
|
|
65
|
-
SNAPMODULE: 8
|
|
66
|
-
};
|
|
67
|
-
const CONTEXT_SIZE = 1232;
|
|
68
|
-
/** Parse x64 CONTEXT from raw buffer */
|
|
69
|
-
function parseContext(buf) {
|
|
70
|
-
return {
|
|
71
|
-
contextFlags: buf.readUInt32LE(48),
|
|
72
|
-
eflags: buf.readUInt32LE(68),
|
|
73
|
-
dr0: buf.readBigUInt64LE(72),
|
|
74
|
-
dr1: buf.readBigUInt64LE(80),
|
|
75
|
-
dr2: buf.readBigUInt64LE(88),
|
|
76
|
-
dr3: buf.readBigUInt64LE(96),
|
|
77
|
-
dr6: buf.readBigUInt64LE(104),
|
|
78
|
-
dr7: buf.readBigUInt64LE(112),
|
|
79
|
-
rax: buf.readBigUInt64LE(120),
|
|
80
|
-
rcx: buf.readBigUInt64LE(128),
|
|
81
|
-
rdx: buf.readBigUInt64LE(136),
|
|
82
|
-
rbx: buf.readBigUInt64LE(144),
|
|
83
|
-
rsp: buf.readBigUInt64LE(152),
|
|
84
|
-
rbp: buf.readBigUInt64LE(160),
|
|
85
|
-
rsi: buf.readBigUInt64LE(168),
|
|
86
|
-
rdi: buf.readBigUInt64LE(176),
|
|
87
|
-
r8: buf.readBigUInt64LE(184),
|
|
88
|
-
r9: buf.readBigUInt64LE(192),
|
|
89
|
-
r10: buf.readBigUInt64LE(200),
|
|
90
|
-
r11: buf.readBigUInt64LE(208),
|
|
91
|
-
r12: buf.readBigUInt64LE(216),
|
|
92
|
-
r13: buf.readBigUInt64LE(224),
|
|
93
|
-
r14: buf.readBigUInt64LE(232),
|
|
94
|
-
r15: buf.readBigUInt64LE(240),
|
|
95
|
-
rip: buf.readBigUInt64LE(248)
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
/** Write x64 CONTEXT fields into a raw buffer */
|
|
99
|
-
function writeContext(buf, ctx) {
|
|
100
|
-
if (ctx.contextFlags !== void 0) buf.writeUInt32LE(ctx.contextFlags, 48);
|
|
101
|
-
if (ctx.eflags !== void 0) buf.writeUInt32LE(ctx.eflags, 68);
|
|
102
|
-
if (ctx.dr0 !== void 0) buf.writeBigUInt64LE(ctx.dr0, 72);
|
|
103
|
-
if (ctx.dr1 !== void 0) buf.writeBigUInt64LE(ctx.dr1, 80);
|
|
104
|
-
if (ctx.dr2 !== void 0) buf.writeBigUInt64LE(ctx.dr2, 88);
|
|
105
|
-
if (ctx.dr3 !== void 0) buf.writeBigUInt64LE(ctx.dr3, 96);
|
|
106
|
-
if (ctx.dr6 !== void 0) buf.writeBigUInt64LE(ctx.dr6, 104);
|
|
107
|
-
if (ctx.dr7 !== void 0) buf.writeBigUInt64LE(ctx.dr7, 112);
|
|
108
|
-
if (ctx.rip !== void 0) buf.writeBigUInt64LE(ctx.rip, 248);
|
|
109
|
-
}
|
|
110
|
-
let kernel32Debug = null;
|
|
111
|
-
function getKernel32() {
|
|
112
|
-
if (!kernel32Debug) {
|
|
113
|
-
kernel32Debug = koffi.load("kernel32.dll");
|
|
114
|
-
logger.debug("Loaded kernel32.dll for debug APIs");
|
|
115
|
-
}
|
|
116
|
-
return kernel32Debug;
|
|
117
|
-
}
|
|
118
|
-
/** Open a thread handle */
|
|
119
|
-
function OpenThread(dwDesiredAccess, bInheritHandle, dwThreadId) {
|
|
120
|
-
return getKernel32().func("void * OpenThread(uint32, int, uint32)")(dwDesiredAccess, bInheritHandle ? 1 : 0, dwThreadId);
|
|
121
|
-
}
|
|
122
|
-
/** Suspend a thread, returns previous suspend count */
|
|
123
|
-
function SuspendThread(hThread) {
|
|
124
|
-
const result = getKernel32().func("uint32 SuspendThread(void *)")(hThread);
|
|
125
|
-
if (result === 4294967295) throw new Error(`SuspendThread failed. Error: 0x${GetLastError().toString(16)}`);
|
|
126
|
-
return result;
|
|
127
|
-
}
|
|
128
|
-
/** Resume a thread, returns previous suspend count */
|
|
129
|
-
function ResumeThread(hThread) {
|
|
130
|
-
const result = getKernel32().func("uint32 ResumeThread(void *)")(hThread);
|
|
131
|
-
if (result === 4294967295) throw new Error(`ResumeThread failed. Error: 0x${GetLastError().toString(16)}`);
|
|
132
|
-
return result;
|
|
133
|
-
}
|
|
134
|
-
/** Get thread context (CPU registers including debug registers) */
|
|
135
|
-
function GetThreadContext(hThread, contextFlags) {
|
|
136
|
-
const fn = getKernel32().func("int GetThreadContext(void *, _Inout_ uint8_t[1232])");
|
|
137
|
-
const buf = Buffer.alloc(CONTEXT_SIZE);
|
|
138
|
-
buf.writeUInt32LE(contextFlags, 48);
|
|
139
|
-
if (fn(hThread, buf) === 0) throw new Error(`GetThreadContext failed. Error: 0x${GetLastError().toString(16)}`);
|
|
140
|
-
return buf;
|
|
141
|
-
}
|
|
142
|
-
/** Set thread context (CPU registers including debug registers) */
|
|
143
|
-
function SetThreadContext(hThread, contextBuf) {
|
|
144
|
-
if (getKernel32().func("int SetThreadContext(void *, uint8_t[1232])")(hThread, contextBuf) === 0) throw new Error(`SetThreadContext failed. Error: 0x${GetLastError().toString(16)}`);
|
|
145
|
-
}
|
|
146
|
-
/** Attach as debugger to a process */
|
|
147
|
-
function DebugActiveProcess(dwProcessId) {
|
|
148
|
-
if (getKernel32().func("int DebugActiveProcess(uint32)")(dwProcessId) === 0) throw new Error(`DebugActiveProcess failed for pid ${dwProcessId}. Error: 0x${GetLastError().toString(16)}`);
|
|
149
|
-
}
|
|
150
|
-
/** Detach debugger from process */
|
|
151
|
-
function DebugActiveProcessStop(dwProcessId) {
|
|
152
|
-
if (getKernel32().func("int DebugActiveProcessStop(uint32)")(dwProcessId) === 0) throw new Error(`DebugActiveProcessStop failed. Error: 0x${GetLastError().toString(16)}`);
|
|
153
|
-
}
|
|
154
|
-
/** Don't kill the process when debugger detaches */
|
|
155
|
-
function DebugSetProcessKillOnExit(killOnExit) {
|
|
156
|
-
getKernel32().func("int DebugSetProcessKillOnExit(int)")(killOnExit ? 1 : 0);
|
|
157
|
-
}
|
|
158
|
-
function WaitForDebugEvent(timeoutMs) {
|
|
159
|
-
const fn = getKernel32().func("int WaitForDebugEvent(_Out_ uint8_t *, uint32)");
|
|
160
|
-
const buf = Buffer.alloc(176);
|
|
161
|
-
if (fn(buf, timeoutMs) === 0) return null;
|
|
162
|
-
const info = {
|
|
163
|
-
debugEventCode: buf.readUInt32LE(0),
|
|
164
|
-
processId: buf.readUInt32LE(4),
|
|
165
|
-
threadId: buf.readUInt32LE(8)
|
|
166
|
-
};
|
|
167
|
-
if (info.debugEventCode === DEBUG_EVENT_CODE.EXCEPTION_DEBUG_EVENT) {
|
|
168
|
-
info.exceptionCode = buf.readUInt32LE(16);
|
|
169
|
-
info.exceptionAddress = buf.readBigUInt64LE(32);
|
|
170
|
-
info.firstChance = buf.readUInt32LE(20) === 0;
|
|
171
|
-
}
|
|
172
|
-
return info;
|
|
173
|
-
}
|
|
174
|
-
/** Continue after handling a debug event */
|
|
175
|
-
function ContinueDebugEvent(dwProcessId, dwThreadId, dwContinueStatus) {
|
|
176
|
-
if (getKernel32().func("int ContinueDebugEvent(uint32, uint32, uint32)")(dwProcessId, dwThreadId, dwContinueStatus) === 0) throw new Error(`ContinueDebugEvent failed. Error: 0x${GetLastError().toString(16)}`);
|
|
177
|
-
}
|
|
178
|
-
/** Flush instruction cache after writing code */
|
|
179
|
-
function FlushInstructionCache(hProcess, lpBaseAddress, dwSize) {
|
|
180
|
-
getKernel32().func("int FlushInstructionCache(void *, void *, size_t)")(hProcess, lpBaseAddress, BigInt(dwSize));
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Enumerate all thread IDs of a process using CreateToolhelp32Snapshot.
|
|
184
|
-
*
|
|
185
|
-
* THREADENTRY32 layout (28 bytes):
|
|
186
|
-
* +0x00: dwSize (uint32)
|
|
187
|
-
* +0x04: cntUsage (uint32)
|
|
188
|
-
* +0x08: th32ThreadID (uint32)
|
|
189
|
-
* +0x0C: th32OwnerProcessID (uint32)
|
|
190
|
-
* +0x10: tpBasePri (int32)
|
|
191
|
-
* +0x14: tpDeltaPri (int32)
|
|
192
|
-
* +0x18: dwFlags (uint32)
|
|
193
|
-
*/
|
|
194
|
-
function EnumerateProcessThreads(pid) {
|
|
195
|
-
const fnSnapshot = getKernel32().func("void * CreateToolhelp32Snapshot(uint32, uint32)");
|
|
196
|
-
const fnFirst = getKernel32().func("int Thread32First(void *, _Inout_ uint8_t[28])");
|
|
197
|
-
const fnNext = getKernel32().func("int Thread32Next(void *, _Inout_ uint8_t[28])");
|
|
198
|
-
const snapshot = fnSnapshot(TH32CS.SNAPTHREAD, 0);
|
|
199
|
-
if (snapshot === 0n || snapshot === BigInt("0xFFFFFFFFFFFFFFFF")) throw new Error(`CreateToolhelp32Snapshot failed. Error: 0x${GetLastError().toString(16)}`);
|
|
200
|
-
const threads = [];
|
|
201
|
-
const entry = Buffer.alloc(28);
|
|
202
|
-
entry.writeUInt32LE(28, 0);
|
|
203
|
-
try {
|
|
204
|
-
if (fnFirst(snapshot, entry) !== 0) do {
|
|
205
|
-
if (entry.readUInt32LE(12) === pid) threads.push(entry.readUInt32LE(8));
|
|
206
|
-
entry.writeUInt32LE(28, 0);
|
|
207
|
-
} while (fnNext(snapshot, entry) !== 0);
|
|
208
|
-
CloseHandle(snapshot);
|
|
209
|
-
} catch (e) {
|
|
210
|
-
console.error("[EnumerateProcessThreads] cleanup error:", e);
|
|
211
|
-
}
|
|
212
|
-
return threads;
|
|
213
|
-
}
|
|
214
|
-
/** Open a thread with debug-appropriate access rights */
|
|
215
|
-
function openThreadForDebug(threadId) {
|
|
216
|
-
const handle = OpenThread(THREAD_ACCESS.SUSPEND_RESUME | THREAD_ACCESS.GET_CONTEXT | THREAD_ACCESS.SET_CONTEXT | THREAD_ACCESS.QUERY_INFORMATION, false, threadId);
|
|
217
|
-
if (handle === 0n) throw new Error(`Failed to open thread ${threadId}. Error: 0x${GetLastError().toString(16)}`);
|
|
218
|
-
return handle;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Encode DR7 breakpoint configuration.
|
|
222
|
-
*
|
|
223
|
-
* DR7 layout (x64):
|
|
224
|
-
* Bits 0-7: Local/Global enable for DR0-DR3 (L0, G0, L1, G1, ...)
|
|
225
|
-
* Bits 16-17: DR0 condition (00=exec, 01=write, 11=readwrite)
|
|
226
|
-
* Bits 18-19: DR0 size (00=1byte, 01=2byte, 11=4byte, 10=8byte)
|
|
227
|
-
* Bits 20-21: DR1 condition
|
|
228
|
-
* Bits 22-23: DR1 size
|
|
229
|
-
* Bits 24-25: DR2 condition
|
|
230
|
-
* Bits 26-27: DR2 size
|
|
231
|
-
* Bits 28-29: DR3 condition
|
|
232
|
-
* Bits 30-31: DR3 size
|
|
233
|
-
*/
|
|
234
|
-
function encodeDR7(entries) {
|
|
235
|
-
let dr7 = 0n;
|
|
236
|
-
for (const entry of entries) {
|
|
237
|
-
if (!entry.enabled) continue;
|
|
238
|
-
const { drIndex, access, size } = entry;
|
|
239
|
-
dr7 |= 1n << BigInt(drIndex * 2);
|
|
240
|
-
let condition = 0;
|
|
241
|
-
switch (access) {
|
|
242
|
-
case "execute":
|
|
243
|
-
condition = 0;
|
|
244
|
-
break;
|
|
245
|
-
case "write":
|
|
246
|
-
condition = 1;
|
|
247
|
-
break;
|
|
248
|
-
case "readwrite":
|
|
249
|
-
case "read":
|
|
250
|
-
condition = 3;
|
|
251
|
-
break;
|
|
252
|
-
}
|
|
253
|
-
dr7 |= BigInt(condition) << BigInt(16 + drIndex * 4);
|
|
254
|
-
let sizeCode = 0;
|
|
255
|
-
switch (size) {
|
|
256
|
-
case 1:
|
|
257
|
-
sizeCode = 0;
|
|
258
|
-
break;
|
|
259
|
-
case 2:
|
|
260
|
-
sizeCode = 1;
|
|
261
|
-
break;
|
|
262
|
-
case 4:
|
|
263
|
-
sizeCode = 3;
|
|
264
|
-
break;
|
|
265
|
-
case 8:
|
|
266
|
-
sizeCode = 2;
|
|
267
|
-
break;
|
|
268
|
-
}
|
|
269
|
-
dr7 |= BigInt(sizeCode) << BigInt(18 + drIndex * 4);
|
|
270
|
-
}
|
|
271
|
-
return dr7;
|
|
272
|
-
}
|
|
273
|
-
//#endregion
|
|
274
|
-
export { openThreadForDebug as _, DebugActiveProcessStop as a, EnumerateProcessThreads as c, ResumeThread as d, SetThreadContext as f, encodeDR7 as g, WaitForDebugEvent as h, DebugActiveProcess as i, FlushInstructionCache as l, TH32CS as m, ContinueDebugEvent as n, DebugSetProcessKillOnExit as o, SuspendThread as p, DBG as r, EXCEPTION_CODE as s, CONTEXT_FLAGS as t, GetThreadContext as u, parseContext as v, writeContext as y };
|