@jshookmcp/jshook 0.2.9 → 0.3.0
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 +2 -2
- package/README.zh.md +2 -2
- package/dist/{AntiCheatDetector-BNk-EoBt.mjs → AntiCheatDetector-CqGDXmfc.mjs} +159 -53
- package/dist/{CodeInjector-Cq8q01kp.mjs → CodeInjector-BdjRfNx7.mjs} +5 -5
- package/dist/{ConsoleMonitor-CPVQW1Y-.mjs → ConsoleMonitor-DykL3IAw.mjs} +85 -17
- package/dist/{DetailedDataManager-BQQcxh64.mjs → DetailedDataManager-HT49OrvF.mjs} +1 -1
- package/dist/{ExtensionManager-CWYgw0YW.mjs → ExtensionManager-BDMsY2Dz.mjs} +15 -8
- package/dist/{HardwareBreakpoint-B9gZCdFP.mjs → HardwareBreakpoint-Cc2AFq1Y.mjs} +3 -3
- package/dist/{HeapAnalyzer-BLDH0dCv.mjs → HeapAnalyzer-DruMgsgj.mjs} +20 -20
- package/dist/{HookGeneratorBuilders.core.generators.storage-CtcdK78Q.mjs → HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs} +1 -74
- package/dist/{InstrumentationSession-CvPC7Jwy.mjs → InstrumentationSession-DLH0vd-z.mjs} +2 -2
- package/dist/{MemoryController-CbVdCIJF.mjs → MemoryController-CMtviNW_.mjs} +3 -3
- package/dist/{MemoryScanSession-BsDZbLYm.mjs → MemoryScanSession-ITgb_NMi.mjs} +2 -2
- package/dist/{MemoryScanner-Bcpml6II.mjs → MemoryScanner-CiL7Z3ey.mjs} +12 -9
- package/dist/{NativeMemoryManager.impl-dZtA1ZGn.mjs → NativeMemoryManager.impl-D9Lkovvn.mjs} +13 -10
- package/dist/{NativeMemoryManager.utils-B-FjA2mJ.mjs → NativeMemoryManager.utils-BBlAixF5.mjs} +1 -1
- package/dist/{PEAnalyzer-D1lzJ_VG.mjs → PEAnalyzer-DMQ44gen.mjs} +15 -15
- package/dist/{PageController-Bqm2kZ_X.mjs → PageController-BPJNqqBN.mjs} +18 -4
- package/dist/{PointerChainEngine-BOhyVsjx.mjs → PointerChainEngine-K7wN8Z-w.mjs} +10 -7
- package/dist/ProcessRegistry-zGg12QbE.mjs +74 -0
- package/dist/{ResponseBuilder-D3iFYx2N.mjs → ResponseBuilder-CJXWmWNw.mjs} +10 -10
- package/dist/{ScriptManager-aHHq0X7U.mjs → ScriptManager-ZuWD-0Jg.mjs} +195 -192
- package/dist/{Speedhack-CqdIFlQl.mjs → Speedhack-D-z0umeT.mjs} +2 -2
- package/dist/{StructureAnalyzer-DhFaPvRO.mjs → StructureAnalyzer-Cav5AVSL.mjs} +9 -6
- package/dist/{ToolCatalog-C0JGZoOm.mjs → ToolCatalog-5OJdMiF0.mjs} +81 -81
- package/dist/{ToolProbe-oC7aPrkv.mjs → ToolProbe-DbCFGyrg.mjs} +1 -1
- package/dist/{ToolRegistry-BjaF4oNz.mjs → ToolRegistry-B9krbTtI.mjs} +51 -2
- package/dist/{ToolRouter.policy-BWV67ZK-.mjs → ToolRouter.policy-BGDAGyeH.mjs} +60 -20
- package/dist/TraceRecorder-B41Z5XBj.mjs +1286 -0
- package/dist/{Win32API-CePkipZY.mjs → Win32API-C2kjj0ze.mjs} +18 -12
- package/dist/{Win32Debug-BvKs-gxc.mjs → Win32Debug-CKrGOTpo.mjs} +2 -2
- package/dist/{WorkflowEngine-CuvkZtWu.mjs → WorkflowEngine-DJ6M4opp.mjs} +226 -255
- package/dist/analysis-BHeJW2Nb.mjs +1234 -0
- package/dist/{antidebug-CqDTB_uk.mjs → antidebug-BRKeyt27.mjs} +3 -3
- package/dist/{artifactRetention-CFEprwPw.mjs → artifactRetention-CPXkUJXp.mjs} +13 -6
- package/dist/{artifacts-Bk2-_uPq.mjs → artifacts-DkfosXH3.mjs} +1 -1
- package/dist/authorization-schema-DRqyJMSk.mjs +31 -0
- package/dist/{binary-instrument-CXfpx6fT.mjs → binary-instrument--V3MAhJ4.mjs} +19 -27
- package/dist/bind-helpers-ClV34xdn.mjs +42 -0
- package/dist/{boringssl-inspector-BH2D3VKc.mjs → boringssl-inspector-Bo_LOLaS.mjs} +1 -1
- package/dist/{browser-BpOr5PEx.mjs → browser-Dx3_S2cG.mjs} +324 -37
- package/dist/capabilities-CcHlvWgK.mjs +33 -0
- package/dist/{constants-B0OANIBL.mjs → constants-CDZLOoVv.mjs} +18 -3
- package/dist/{coordination-qUbyF8KU.mjs → coordination-DgItD9DL.mjs} +2 -2
- package/dist/{debugger-gnKxRSN0.mjs → debugger-RS3RSAqs.mjs} +30 -13
- package/dist/definitions-BEoYofW5.mjs +47 -0
- package/dist/{definitions-bAhHQJq9.mjs → definitions-BRaefg3u.mjs} +11 -5
- package/dist/{definitions-DVGfrn7y.mjs → definitions-BbkvZkiv.mjs} +2 -2
- package/dist/definitions-BtWSHJ3o.mjs +17 -0
- package/dist/{definitions-BMfYXoNC.mjs → definitions-C1gCHO0i.mjs} +1 -1
- package/dist/{definitions-C1UvM5Iy.mjs → definitions-CDOg_b-l.mjs} +14 -2
- package/dist/definitions-CVPD9hzZ.mjs +54 -0
- package/dist/{definitions-Cke7zEb8.mjs → definitions-Cea8Lgl7.mjs} +1 -1
- package/dist/definitions-DAgIyjxM.mjs +10 -0
- package/dist/{definitions-B4rAvHNZ.mjs → definitions-DJA27nsL.mjs} +12 -9
- package/dist/{definitions-ClJLzsJQ.mjs → definitions-DKPFU3LW.mjs} +1 -1
- package/dist/{definitions-D3VsGcvz.mjs → definitions-DPRpZQ96.mjs} +7 -7
- package/dist/{definitions-B18eyf0B.mjs → definitions-DUE5gmdn.mjs} +1 -1
- package/dist/definitions-DYVjOtxa.mjs +26 -0
- package/dist/{definitions-BB_4jnmy.mjs → definitions-DcYLVLCo.mjs} +1 -1
- package/dist/{definitions-Beid2EB3.mjs → definitions-Pp5LI2H4.mjs} +1 -1
- package/dist/definitions-j9KdHVNR.mjs +14 -0
- package/dist/definitions-uzkjBwa7.mjs +258 -0
- package/dist/{definitions-Cq-zroAU.mjs → definitions-va-AnLuQ.mjs} +4 -4
- package/dist/{encoding-Bvz5jLRv.mjs → encoding-DJeqHmpd.mjs} +18 -4
- package/dist/{evidence-graph-bridge-C_fv9PuC.mjs → evidence-graph-bridge-DcYizFk2.mjs} +1 -0
- package/dist/{factory-DxlGh9Xf.mjs → factory-C90tBff6.mjs} +6 -6
- package/dist/flat-target-session-Dgax2Cy3.mjs +29 -0
- package/dist/{graphql-DYWzJ29s.mjs → graphql-CoHrhweh.mjs} +205 -34
- package/dist/{handlers-C67ktuRN.mjs → handlers-4jmR0nMs.mjs} +220 -32
- package/dist/{handlers-DlCJN4Td.mjs → handlers-BAHPxcch.mjs} +122 -90
- package/dist/{handlers-9sAbfIg-.mjs → handlers-BOs9b907.mjs} +849 -801
- package/dist/{handlers-DxGIq15_2.mjs → handlers-BWXEy6ef.mjs} +16 -16
- package/dist/{handlers-tB9Mp9ZK.mjs → handlers-Bndn6QvE.mjs} +31 -4
- package/dist/{handlers-CTsDAO6p.mjs → handlers-BqC4bD4s.mjs} +1 -1
- package/dist/{handlers-C87g8oCe.mjs → handlers-BtYq60bM2.mjs} +1 -1
- package/dist/{handlers-DeLOCd5m.mjs → handlers-BzgcB4iv.mjs} +17 -17
- package/dist/{handlers-Cgyg6c0U.mjs → handlers-CRyRWj2b.mjs} +237 -23
- package/dist/{handlers-U6L4xhuF.mjs → handlers-CVv2H1uq.mjs} +24 -17
- package/dist/{handlers-tiy7EIBp.mjs → handlers-Dl5a7JS4.mjs} +3 -3
- package/dist/{handlers-D6j6yka7.mjs → handlers-Dx2d7jt7.mjs} +1893 -1480
- package/dist/{handlers-Bl8zkwz1.mjs → handlers-Dz9PYsCa.mjs} +95 -6
- package/dist/handlers-HujRKC3b.mjs +661 -0
- package/dist/{handlers.impl-DS0d9fUw.mjs → handlers.impl-XWXkQfyi.mjs} +70 -24
- package/dist/{hooks-CzCWByww.mjs → hooks-B1B8NRHL.mjs} +3 -3
- package/dist/index.mjs +154 -144
- package/dist/{maintenance-P7ePRXQC.mjs → maintenance-PRMkLVRW.mjs} +35 -30
- package/dist/manifest-67Bok-Si.mjs +58 -0
- package/dist/{manifest-B3QVVeBS.mjs → manifest-6lNTMZAB2.mjs} +33 -28
- package/dist/manifest-B2duEHiH.mjs +90 -0
- package/dist/manifest-B6EY9Vm8.mjs +57 -0
- package/dist/{manifest-gZ4s_UtG.mjs → manifest-B6nKSbyY.mjs} +32 -33
- package/dist/{manifest-2ToTpjv8.mjs → manifest-BL8AQNPF.mjs} +31 -31
- package/dist/{manifest-DzwvxPJX.mjs → manifest-BSZvJJmV.mjs} +23 -14
- package/dist/{manifest-Sc_0JQ13.mjs → manifest-BU7qzUyX.mjs} +23 -23
- package/dist/{manifest-CT7zZBV1.mjs → manifest-Bl62e8WK.mjs} +24 -23
- package/dist/manifest-Bo5cXjdt.mjs +82 -0
- package/dist/manifest-BpS4gtUK.mjs +1347 -0
- package/dist/manifest-Bv65_e2W.mjs +101 -0
- package/dist/manifest-BytNIF4Z.mjs +117 -0
- package/dist/{manifest-BqrQ4Tpj.mjs → manifest-C-xtsjS3.mjs} +23 -23
- package/dist/{manifest-NXctwWQq.mjs → manifest-CDYl7OhA.mjs} +36 -38
- package/dist/manifest-CRZ3xmkD.mjs +61 -0
- package/dist/manifest-CoW6u4Tp.mjs +132 -0
- package/dist/manifest-Cq5zN_8A.mjs +50 -0
- package/dist/{manifest-CAhOuvSl.mjs → manifest-D7YZM_2e.mjs} +75 -85
- package/dist/{manifest-DCyjf4n2.mjs → manifest-DE_VrAeQ.mjs} +27 -7
- package/dist/manifest-DGsXSCpT.mjs +39 -0
- package/dist/{manifest-BB2J8IMJ.mjs → manifest-DJ2vfEuW.mjs} +48 -41
- package/dist/{manifest-3g71z6Bg.mjs → manifest-DPXDYhEu.mjs} +26 -25
- package/dist/manifest-Dd4fQb0a.mjs +322 -0
- package/dist/{manifest-CXsRWjjI.mjs → manifest-Deq6opGg.mjs} +95 -96
- package/dist/{manifest-C9RT5nk32.mjs → manifest-DfJTafJK.mjs} +14 -11
- package/dist/manifest-DgOdgN_j.mjs +50 -0
- package/dist/{manifest-BmtZzQiQ2.mjs → manifest-DlbMW4v4.mjs} +17 -15
- package/dist/{manifest-DrbmZcFl2.mjs → manifest-DmVfbH0w.mjs} +212 -91
- package/dist/manifest-Dog6Ddjr.mjs +109 -0
- package/dist/manifest-DvgU5FWb.mjs +58 -0
- package/dist/manifest-HsfDBs7j.mjs +50 -0
- package/dist/manifest-I8oQHvCG.mjs +186 -0
- package/dist/manifest-NvH_a-av.mjs +786 -0
- package/dist/{manifest-Dh8WBmEW.mjs → manifest-cEJU1v0Z.mjs} +24 -24
- package/dist/manifest-wOl5XLB12.mjs +112 -0
- package/dist/{modules-C184v-S9.mjs → modules-tZozf0LQ.mjs} +130 -860
- package/dist/{mojo-ipc-B_H61Afw.mjs → mojo-ipc-DXNEXEqb.mjs} +141 -26
- package/dist/{network-671Cw6hV.mjs → network-CPVvwvFg.mjs} +1329 -823
- package/dist/{outputPaths-B1uGmrWZ.mjs → outputPaths-um7lCRY3.mjs} +4 -8
- package/dist/{platform-WmNn8Sxb.mjs → platform-CYeFoTWp.mjs} +101 -10
- package/dist/{process-QcbIy5Zq.mjs → process-BTbgcVc6.mjs} +251 -346
- package/dist/{proxy-DqNs0bAd.mjs → proxy-r8YN6nP1.mjs} +30 -8
- package/dist/{registry-D-6e18lB.mjs → registry-Bl8ZQW61.mjs} +3 -3
- package/dist/{response-BQVP-xUn.mjs → response-CWhh2aLo.mjs} +7 -1
- package/dist/{shared-state-board-DV-dpHFJ.mjs → shared-state-board-BoZnSoj-.mjs} +2 -2
- package/dist/{sourcemap-Dq8ez8vS.mjs → sourcemap-BIDHUVXy.mjs} +350 -66
- package/dist/{streaming-BUQ0VJsg.mjs → streaming-Dal6utPp.mjs} +13 -13
- package/dist/{tool-builder-DCbIC5Eo.mjs → tool-builder-BHJp32mV.mjs} +1 -1
- package/dist/{transform-CiYJfNX0.mjs → transform-DRVgGG90.mjs} +18 -14
- package/dist/wasm-BYx5UOeG.mjs +1044 -0
- package/dist/webcrack-Be0_FccV.mjs +747 -0
- package/dist/{workflow-f3xJOcjx.mjs → workflow-BpuKEtvn.mjs} +8 -8
- package/package.json +76 -43
- package/dist/TraceRecorder-DgxyVbdQ.mjs +0 -519
- package/dist/analysis-CL9uACt9.mjs +0 -463
- package/dist/bind-helpers-xFfRF-qm.mjs +0 -22
- package/dist/definitions-6M-eejaT.mjs +0 -53
- package/dist/definitions-B3QdlrHv.mjs +0 -34
- package/dist/definitions-CXEI7QC72.mjs +0 -216
- package/dist/definitions-C_4r7Fo-2.mjs +0 -14
- package/dist/definitions-CkFDALoa.mjs +0 -26
- package/dist/definitions-Cy3Sl6gV.mjs +0 -34
- package/dist/definitions-LKpC3-nL.mjs +0 -9
- package/dist/handlers-DdFzXLvF.mjs +0 -446
- package/dist/manifest-82baTv4U.mjs +0 -45
- package/dist/manifest-BKbgbSiY.mjs +0 -60
- package/dist/manifest-Bcf-TJzH.mjs +0 -848
- package/dist/manifest-Bnd7kqEY.mjs +0 -55
- package/dist/manifest-BqQX6OQC2.mjs +0 -65
- package/dist/manifest-Br4RPFt5.mjs +0 -370
- package/dist/manifest-C5qDjysN.mjs +0 -107
- package/dist/manifest-CBYWCUBJ.mjs +0 -51
- package/dist/manifest-CFADCRa1.mjs +0 -37
- package/dist/manifest-CQVhavRF.mjs +0 -114
- package/dist/manifest-CV12bcrF.mjs +0 -121
- package/dist/manifest-CZLUCfG02.mjs +0 -95
- package/dist/manifest-D6phHKFd.mjs +0 -131
- package/dist/manifest-DHsnKgP6.mjs +0 -60
- package/dist/manifest-Df_dliIe.mjs +0 -55
- package/dist/manifest-DhKRAT8_.mjs +0 -92
- package/dist/manifest-DlpTj4ic2.mjs +0 -193
- package/dist/manifest-DuwHjUa5.mjs +0 -70
- package/dist/manifest-qSleDqdO.mjs +0 -1023
- package/dist/wasm-DQTnHDs4.mjs +0 -531
- /package/dist/{CacheAdapters-CDe5WPSV.mjs → CacheAdapters-jJFy20G-.mjs} +0 -0
- /package/dist/{DarwinAPI-BNPxu0RH.mjs → DarwinAPI-ETyy0xyo.mjs} +0 -0
- /package/dist/{EventBus-DgPmwpeu.mjs → EventBus-DFKvADm3.mjs} +0 -0
- /package/dist/{EvidenceGraphBridge-SFesNera.mjs → EvidenceGraphBridge-318Oi0Lf.mjs} +0 -0
- /package/dist/{FingerprintManager-gzWtkKuf.mjs → FingerprintManager-BN4UQWnX.mjs} +0 -0
- /package/dist/{PrerequisiteError-Dl33Svkz.mjs → PrerequisiteError-TuyZIs6n.mjs} +0 -0
- /package/dist/{ReverseEvidenceGraph-Dlsk94LC.mjs → ReverseEvidenceGraph-C02-gXOh.mjs} +0 -0
- /package/dist/{StealthVerifier-Bo4T3bz8.mjs → StealthVerifier-BWmPgQsv.mjs} +0 -0
- /package/dist/{VersionDetector-CwVLVdDM.mjs → VersionDetector-K3V4vGsw.mjs} +0 -0
- /package/dist/{betterSqlite3-0pqusHHH.mjs → betterSqlite3-DLSBZodi.mjs} +0 -0
- /package/dist/{concurrency-Bt0yv1kJ.mjs → concurrency-Drev_Vz9.mjs} +0 -0
- /package/dist/{formatAddress-DVkj9kpI.mjs → formatAddress-nnMvEohD.mjs} +0 -0
- /package/dist/{parse-args-BlRjqlkL.mjs → parse-args-B4cY5Vx5.mjs} +0 -0
- /package/dist/{ssrf-policy-ZaUfvhq7.mjs → ssrf-policy-Dsqd-DTX.mjs} +0 -0
- /package/dist/{types-CPhOReNX.mjs → types-DDBWs9UP.mjs} +0 -0
|
@@ -0,0 +1,786 @@
|
|
|
1
|
+
import { i as asToolResponse } from "./response-CWhh2aLo.mjs";
|
|
2
|
+
import { n as toolLookup } from "./registry-Bl8ZQW61.mjs";
|
|
3
|
+
import { n as defineMethodRegistrations } from "./bind-helpers-ClV34xdn.mjs";
|
|
4
|
+
//#region src/server/domains/boringssl-inspector/definitions/support.ts
|
|
5
|
+
const TLS_VERSION_VALUES = [
|
|
6
|
+
"TLSv1",
|
|
7
|
+
"TLSv1.1",
|
|
8
|
+
"TLSv1.2",
|
|
9
|
+
"TLSv1.3"
|
|
10
|
+
];
|
|
11
|
+
function objectTool(name, description, properties = {}, required = []) {
|
|
12
|
+
return {
|
|
13
|
+
name,
|
|
14
|
+
description,
|
|
15
|
+
inputSchema: {
|
|
16
|
+
type: "object",
|
|
17
|
+
properties,
|
|
18
|
+
required
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/server/domains/boringssl-inspector/definitions/frida-tools.ts
|
|
24
|
+
const fridaTools = [objectTool("tls_cert_pin_bypass_frida", "Bypass certificate pinning via Frida injection (supports BoringSSL, Chrome, OkHttp).")];
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/server/domains/boringssl-inspector/definitions/raw-socket-tools.ts
|
|
27
|
+
const rawSocketTools = [
|
|
28
|
+
objectTool("net_raw_tcp_send", "Send raw TCP data to a remote host; accepts hex or text input.", {
|
|
29
|
+
host: {
|
|
30
|
+
type: "string",
|
|
31
|
+
default: "127.0.0.1",
|
|
32
|
+
description: "Target host address"
|
|
33
|
+
},
|
|
34
|
+
port: {
|
|
35
|
+
type: "number",
|
|
36
|
+
description: "Target port number (1-65535)"
|
|
37
|
+
},
|
|
38
|
+
dataHex: {
|
|
39
|
+
type: "string",
|
|
40
|
+
description: "Hex-encoded data to send"
|
|
41
|
+
},
|
|
42
|
+
dataText: {
|
|
43
|
+
type: "string",
|
|
44
|
+
description: "Text data to send (alternative to dataHex)"
|
|
45
|
+
},
|
|
46
|
+
timeout: {
|
|
47
|
+
type: "number",
|
|
48
|
+
default: 5e3,
|
|
49
|
+
description: "Connection timeout in ms"
|
|
50
|
+
}
|
|
51
|
+
}, ["port"]),
|
|
52
|
+
objectTool("net_raw_tcp_listen", "Listen on a local TCP port for one incoming connection.", {
|
|
53
|
+
port: {
|
|
54
|
+
type: "number",
|
|
55
|
+
description: "Local port to listen on (1-65535)"
|
|
56
|
+
},
|
|
57
|
+
timeout: {
|
|
58
|
+
type: "number",
|
|
59
|
+
default: 1e4,
|
|
60
|
+
description: "Listen timeout in ms"
|
|
61
|
+
}
|
|
62
|
+
}, ["port"]),
|
|
63
|
+
objectTool("net_raw_udp_send", "Send a raw UDP datagram and wait for a response.", {
|
|
64
|
+
host: {
|
|
65
|
+
type: "string",
|
|
66
|
+
default: "127.0.0.1",
|
|
67
|
+
description: "Target host address"
|
|
68
|
+
},
|
|
69
|
+
port: {
|
|
70
|
+
type: "number",
|
|
71
|
+
description: "Target port number (1-65535)"
|
|
72
|
+
},
|
|
73
|
+
dataHex: {
|
|
74
|
+
type: "string",
|
|
75
|
+
description: "Hex-encoded data to send"
|
|
76
|
+
},
|
|
77
|
+
dataText: {
|
|
78
|
+
type: "string",
|
|
79
|
+
description: "Text data to send (alternative to dataHex)"
|
|
80
|
+
},
|
|
81
|
+
timeout: {
|
|
82
|
+
type: "number",
|
|
83
|
+
default: 5e3,
|
|
84
|
+
description: "Response timeout in ms"
|
|
85
|
+
}
|
|
86
|
+
}, ["port"]),
|
|
87
|
+
objectTool("net_raw_udp_listen", "Listen on a local UDP port for an incoming datagram.", {
|
|
88
|
+
port: {
|
|
89
|
+
type: "number",
|
|
90
|
+
description: "Local port to listen on (1-65535)"
|
|
91
|
+
},
|
|
92
|
+
timeout: {
|
|
93
|
+
type: "number",
|
|
94
|
+
default: 1e4,
|
|
95
|
+
description: "Listen timeout in ms"
|
|
96
|
+
}
|
|
97
|
+
}, ["port"])
|
|
98
|
+
];
|
|
99
|
+
//#endregion
|
|
100
|
+
//#region src/server/domains/boringssl-inspector/definitions/session-tools.ts
|
|
101
|
+
const sessionTools = [
|
|
102
|
+
objectTool("tcp_open", "Open a TCP session.", {
|
|
103
|
+
host: {
|
|
104
|
+
type: "string",
|
|
105
|
+
default: "127.0.0.1",
|
|
106
|
+
description: "Target host name or IP address"
|
|
107
|
+
},
|
|
108
|
+
port: {
|
|
109
|
+
type: "number",
|
|
110
|
+
description: "Target TCP port"
|
|
111
|
+
},
|
|
112
|
+
timeoutMs: {
|
|
113
|
+
type: "number",
|
|
114
|
+
default: 5e3,
|
|
115
|
+
description: "Connection timeout in milliseconds"
|
|
116
|
+
},
|
|
117
|
+
noDelay: {
|
|
118
|
+
type: "boolean",
|
|
119
|
+
default: true,
|
|
120
|
+
description: "Enable TCP_NODELAY on the socket after connect"
|
|
121
|
+
}
|
|
122
|
+
}, ["port"]),
|
|
123
|
+
objectTool("tcp_write", "Write data to an open TCP session.", {
|
|
124
|
+
sessionId: {
|
|
125
|
+
type: "string",
|
|
126
|
+
description: "TCP session ID"
|
|
127
|
+
},
|
|
128
|
+
dataHex: {
|
|
129
|
+
type: "string",
|
|
130
|
+
description: "Hex-encoded payload to write"
|
|
131
|
+
},
|
|
132
|
+
dataText: {
|
|
133
|
+
type: "string",
|
|
134
|
+
description: "UTF-8 text payload to write"
|
|
135
|
+
},
|
|
136
|
+
timeoutMs: {
|
|
137
|
+
type: "number",
|
|
138
|
+
default: 5e3,
|
|
139
|
+
description: "Write timeout in milliseconds"
|
|
140
|
+
}
|
|
141
|
+
}, ["sessionId"]),
|
|
142
|
+
objectTool("tcp_read_until", "Read from an open TCP session until a delimiter or byte limit is reached.", {
|
|
143
|
+
sessionId: {
|
|
144
|
+
type: "string",
|
|
145
|
+
description: "TCP session ID"
|
|
146
|
+
},
|
|
147
|
+
delimiterHex: {
|
|
148
|
+
type: "string",
|
|
149
|
+
description: "Hex-encoded delimiter to stop at"
|
|
150
|
+
},
|
|
151
|
+
delimiterText: {
|
|
152
|
+
type: "string",
|
|
153
|
+
description: "UTF-8 delimiter to stop at"
|
|
154
|
+
},
|
|
155
|
+
includeDelimiter: {
|
|
156
|
+
type: "boolean",
|
|
157
|
+
default: true,
|
|
158
|
+
description: "Include the delimiter bytes in the returned payload"
|
|
159
|
+
},
|
|
160
|
+
maxBytes: {
|
|
161
|
+
type: "number",
|
|
162
|
+
description: "Optional maximum number of bytes to return even if no delimiter matches"
|
|
163
|
+
},
|
|
164
|
+
timeoutMs: {
|
|
165
|
+
type: "number",
|
|
166
|
+
default: 5e3,
|
|
167
|
+
description: "Read timeout in milliseconds"
|
|
168
|
+
}
|
|
169
|
+
}, ["sessionId"]),
|
|
170
|
+
objectTool("tcp_close", "Close an open TCP session.", {
|
|
171
|
+
sessionId: {
|
|
172
|
+
type: "string",
|
|
173
|
+
description: "TCP session ID"
|
|
174
|
+
},
|
|
175
|
+
force: {
|
|
176
|
+
type: "boolean",
|
|
177
|
+
default: false,
|
|
178
|
+
description: "Destroy the socket immediately instead of sending FIN first"
|
|
179
|
+
},
|
|
180
|
+
timeoutMs: {
|
|
181
|
+
type: "number",
|
|
182
|
+
default: 1e3,
|
|
183
|
+
description: "Close wait timeout in milliseconds before forcing socket destruction"
|
|
184
|
+
}
|
|
185
|
+
}, ["sessionId"]),
|
|
186
|
+
objectTool("tls_open", "Open a TLS session.", {
|
|
187
|
+
host: {
|
|
188
|
+
type: "string",
|
|
189
|
+
description: "Target host name or IP address"
|
|
190
|
+
},
|
|
191
|
+
port: {
|
|
192
|
+
type: "number",
|
|
193
|
+
default: 443,
|
|
194
|
+
description: "Target TLS port"
|
|
195
|
+
},
|
|
196
|
+
servername: {
|
|
197
|
+
type: "string",
|
|
198
|
+
description: "Optional SNI and hostname validation override"
|
|
199
|
+
},
|
|
200
|
+
alpnProtocols: {
|
|
201
|
+
type: "array",
|
|
202
|
+
items: { type: "string" },
|
|
203
|
+
description: "Optional ALPN protocols to offer"
|
|
204
|
+
},
|
|
205
|
+
timeoutMs: {
|
|
206
|
+
type: "number",
|
|
207
|
+
default: 5e3,
|
|
208
|
+
description: "Connection timeout in milliseconds"
|
|
209
|
+
},
|
|
210
|
+
minVersion: {
|
|
211
|
+
type: "string",
|
|
212
|
+
enum: [...TLS_VERSION_VALUES],
|
|
213
|
+
description: "Optional minimum TLS version"
|
|
214
|
+
},
|
|
215
|
+
maxVersion: {
|
|
216
|
+
type: "string",
|
|
217
|
+
enum: [...TLS_VERSION_VALUES],
|
|
218
|
+
description: "Optional maximum TLS version"
|
|
219
|
+
},
|
|
220
|
+
caPem: {
|
|
221
|
+
type: "string",
|
|
222
|
+
description: "Optional PEM-encoded CA bundle"
|
|
223
|
+
},
|
|
224
|
+
caPath: {
|
|
225
|
+
type: "string",
|
|
226
|
+
description: "Optional path to a PEM-encoded CA bundle"
|
|
227
|
+
},
|
|
228
|
+
allowInvalidCertificates: {
|
|
229
|
+
type: "boolean",
|
|
230
|
+
default: false,
|
|
231
|
+
description: "Allow untrusted certificate chains while still reporting the failure"
|
|
232
|
+
},
|
|
233
|
+
skipHostnameCheck: {
|
|
234
|
+
type: "boolean",
|
|
235
|
+
default: false,
|
|
236
|
+
description: "Skip hostname verification while still reporting the requested target"
|
|
237
|
+
}
|
|
238
|
+
}, ["host"]),
|
|
239
|
+
objectTool("tls_write", "Write data to an open TLS session.", {
|
|
240
|
+
sessionId: {
|
|
241
|
+
type: "string",
|
|
242
|
+
description: "TLS session ID"
|
|
243
|
+
},
|
|
244
|
+
dataHex: {
|
|
245
|
+
type: "string",
|
|
246
|
+
description: "Hex-encoded payload to write"
|
|
247
|
+
},
|
|
248
|
+
dataText: {
|
|
249
|
+
type: "string",
|
|
250
|
+
description: "UTF-8 text payload to write"
|
|
251
|
+
},
|
|
252
|
+
timeoutMs: {
|
|
253
|
+
type: "number",
|
|
254
|
+
default: 5e3,
|
|
255
|
+
description: "Write timeout in milliseconds"
|
|
256
|
+
}
|
|
257
|
+
}, ["sessionId"]),
|
|
258
|
+
objectTool("tls_read_until", "Read from an open TLS session until a delimiter or byte limit is reached.", {
|
|
259
|
+
sessionId: {
|
|
260
|
+
type: "string",
|
|
261
|
+
description: "TLS session ID"
|
|
262
|
+
},
|
|
263
|
+
delimiterHex: {
|
|
264
|
+
type: "string",
|
|
265
|
+
description: "Hex-encoded delimiter to stop at"
|
|
266
|
+
},
|
|
267
|
+
delimiterText: {
|
|
268
|
+
type: "string",
|
|
269
|
+
description: "UTF-8 delimiter to stop at"
|
|
270
|
+
},
|
|
271
|
+
includeDelimiter: {
|
|
272
|
+
type: "boolean",
|
|
273
|
+
default: true,
|
|
274
|
+
description: "Include the delimiter bytes in the returned payload"
|
|
275
|
+
},
|
|
276
|
+
maxBytes: {
|
|
277
|
+
type: "number",
|
|
278
|
+
description: "Optional maximum number of bytes to return even if no delimiter matches"
|
|
279
|
+
},
|
|
280
|
+
timeoutMs: {
|
|
281
|
+
type: "number",
|
|
282
|
+
default: 5e3,
|
|
283
|
+
description: "Read timeout in milliseconds"
|
|
284
|
+
}
|
|
285
|
+
}, ["sessionId"]),
|
|
286
|
+
objectTool("tls_close", "Close an open TLS session.", {
|
|
287
|
+
sessionId: {
|
|
288
|
+
type: "string",
|
|
289
|
+
description: "TLS session ID"
|
|
290
|
+
},
|
|
291
|
+
force: {
|
|
292
|
+
type: "boolean",
|
|
293
|
+
default: false,
|
|
294
|
+
description: "Destroy the TLS socket immediately instead of sending close_notify/FIN first"
|
|
295
|
+
},
|
|
296
|
+
timeoutMs: {
|
|
297
|
+
type: "number",
|
|
298
|
+
default: 1e3,
|
|
299
|
+
description: "Close wait timeout in milliseconds before forcing socket destruction"
|
|
300
|
+
}
|
|
301
|
+
}, ["sessionId"])
|
|
302
|
+
];
|
|
303
|
+
//#endregion
|
|
304
|
+
//#region src/server/domains/boringssl-inspector/definitions/tls-analysis-tools.ts
|
|
305
|
+
const tlsAnalysisTools = [
|
|
306
|
+
objectTool("tls_keylog_enable", "Enable SSLKEYLOGFILE output for BoringSSL-compatible clients."),
|
|
307
|
+
objectTool("tls_keylog_parse", "Parse an SSLKEYLOGFILE and summarize available key material.", { path: {
|
|
308
|
+
type: "string",
|
|
309
|
+
description: "Path to SSLKEYLOGFILE"
|
|
310
|
+
} }),
|
|
311
|
+
objectTool("tls_keylog_disable", "Disable SSLKEYLOGFILE capture and unset the environment variable.", { path: {
|
|
312
|
+
type: "string",
|
|
313
|
+
description: "Path to disable"
|
|
314
|
+
} }),
|
|
315
|
+
objectTool("tls_decrypt_payload", "Decrypt a TLS payload using a provided key, nonce, and algorithm.", {
|
|
316
|
+
encryptedHex: {
|
|
317
|
+
type: "string",
|
|
318
|
+
description: "Hex-encoded encrypted payload"
|
|
319
|
+
},
|
|
320
|
+
keyHex: {
|
|
321
|
+
type: "string",
|
|
322
|
+
description: "Hex-encoded decryption key"
|
|
323
|
+
},
|
|
324
|
+
nonceHex: {
|
|
325
|
+
type: "string",
|
|
326
|
+
description: "Hex-encoded nonce/IV"
|
|
327
|
+
},
|
|
328
|
+
algorithm: {
|
|
329
|
+
type: "string",
|
|
330
|
+
description: "Cipher algorithm",
|
|
331
|
+
default: "aes-256-gcm"
|
|
332
|
+
},
|
|
333
|
+
authTagHex: {
|
|
334
|
+
type: "string",
|
|
335
|
+
description: "Hex-encoded authentication tag"
|
|
336
|
+
}
|
|
337
|
+
}, [
|
|
338
|
+
"encryptedHex",
|
|
339
|
+
"keyHex",
|
|
340
|
+
"nonceHex"
|
|
341
|
+
]),
|
|
342
|
+
objectTool("tls_keylog_summarize", "Summarize the contents of an SSLKEYLOGFILE by label distribution.", { content: {
|
|
343
|
+
type: "string",
|
|
344
|
+
description: "Inline keylog content to summarize"
|
|
345
|
+
} }),
|
|
346
|
+
objectTool("tls_keylog_lookup_secret", "Look up a TLS secret by client random hex from the parsed keylog.", {
|
|
347
|
+
clientRandom: {
|
|
348
|
+
type: "string",
|
|
349
|
+
description: "Hex-encoded client random"
|
|
350
|
+
},
|
|
351
|
+
label: {
|
|
352
|
+
type: "string",
|
|
353
|
+
description: "Optional label filter"
|
|
354
|
+
}
|
|
355
|
+
}, ["clientRandom"]),
|
|
356
|
+
objectTool("tls_cert_pin_bypass", "Return a certificate pinning bypass strategy for the selected platform.", { target: {
|
|
357
|
+
type: "string",
|
|
358
|
+
enum: [
|
|
359
|
+
"android",
|
|
360
|
+
"ios",
|
|
361
|
+
"desktop"
|
|
362
|
+
],
|
|
363
|
+
description: "Target platform for bypass strategy"
|
|
364
|
+
} }, ["target"]),
|
|
365
|
+
objectTool("tls_parse_handshake", "Parse TLS handshake metadata from raw hex.", {
|
|
366
|
+
rawHex: {
|
|
367
|
+
type: "string",
|
|
368
|
+
description: "Hex-encoded TLS handshake record"
|
|
369
|
+
},
|
|
370
|
+
decrypt: {
|
|
371
|
+
type: "boolean",
|
|
372
|
+
description: "Attempt payload decryption using the loaded keylog"
|
|
373
|
+
}
|
|
374
|
+
}, ["rawHex"]),
|
|
375
|
+
objectTool("tls_cipher_suites", "List TLS cipher suites.", { filter: {
|
|
376
|
+
type: "string",
|
|
377
|
+
description: "Keyword filter for cipher suite names"
|
|
378
|
+
} }),
|
|
379
|
+
objectTool("tls_parse_certificate", "Parse a TLS Certificate message from raw hex and extract fingerprints.", { rawHex: {
|
|
380
|
+
type: "string",
|
|
381
|
+
description: "Hex-encoded certificate data"
|
|
382
|
+
} }, ["rawHex"]),
|
|
383
|
+
objectTool("tls_probe_endpoint", "Probe a TLS endpoint and report handshake and certificate details.", {
|
|
384
|
+
host: {
|
|
385
|
+
type: "string",
|
|
386
|
+
description: "Target host name or IP address"
|
|
387
|
+
},
|
|
388
|
+
port: {
|
|
389
|
+
type: "number",
|
|
390
|
+
default: 443,
|
|
391
|
+
description: "Target TLS port"
|
|
392
|
+
},
|
|
393
|
+
servername: {
|
|
394
|
+
type: "string",
|
|
395
|
+
description: "Optional SNI and hostname validation override"
|
|
396
|
+
},
|
|
397
|
+
alpnProtocols: {
|
|
398
|
+
type: "array",
|
|
399
|
+
items: { type: "string" },
|
|
400
|
+
description: "Optional ALPN protocols to offer"
|
|
401
|
+
},
|
|
402
|
+
timeoutMs: {
|
|
403
|
+
type: "number",
|
|
404
|
+
default: 5e3,
|
|
405
|
+
description: "Probe timeout in milliseconds"
|
|
406
|
+
},
|
|
407
|
+
minVersion: {
|
|
408
|
+
type: "string",
|
|
409
|
+
enum: [...TLS_VERSION_VALUES],
|
|
410
|
+
description: "Optional minimum TLS version"
|
|
411
|
+
},
|
|
412
|
+
maxVersion: {
|
|
413
|
+
type: "string",
|
|
414
|
+
enum: [...TLS_VERSION_VALUES],
|
|
415
|
+
description: "Optional maximum TLS version"
|
|
416
|
+
},
|
|
417
|
+
caPem: {
|
|
418
|
+
type: "string",
|
|
419
|
+
description: "Optional PEM-encoded CA bundle"
|
|
420
|
+
},
|
|
421
|
+
caPath: {
|
|
422
|
+
type: "string",
|
|
423
|
+
description: "Optional path to a PEM-encoded CA bundle"
|
|
424
|
+
},
|
|
425
|
+
allowInvalidCertificates: {
|
|
426
|
+
type: "boolean",
|
|
427
|
+
default: false,
|
|
428
|
+
description: "Allow untrusted certificate chains while still reporting the failure"
|
|
429
|
+
},
|
|
430
|
+
skipHostnameCheck: {
|
|
431
|
+
type: "boolean",
|
|
432
|
+
default: false,
|
|
433
|
+
description: "Skip hostname verification while still reporting the requested target"
|
|
434
|
+
}
|
|
435
|
+
}, ["host"])
|
|
436
|
+
];
|
|
437
|
+
//#endregion
|
|
438
|
+
//#region src/server/domains/boringssl-inspector/definitions/websocket-tools.ts
|
|
439
|
+
const websocketTools = [
|
|
440
|
+
objectTool("websocket_open", "Open a WebSocket session.", {
|
|
441
|
+
url: {
|
|
442
|
+
type: "string",
|
|
443
|
+
description: "WebSocket URL"
|
|
444
|
+
},
|
|
445
|
+
scheme: {
|
|
446
|
+
type: "string",
|
|
447
|
+
enum: ["ws", "wss"],
|
|
448
|
+
default: "ws",
|
|
449
|
+
description: "WebSocket transport scheme"
|
|
450
|
+
},
|
|
451
|
+
host: {
|
|
452
|
+
type: "string",
|
|
453
|
+
description: "Target host name or IP address"
|
|
454
|
+
},
|
|
455
|
+
port: {
|
|
456
|
+
type: "number",
|
|
457
|
+
description: "Target port"
|
|
458
|
+
},
|
|
459
|
+
path: {
|
|
460
|
+
type: "string",
|
|
461
|
+
default: "/",
|
|
462
|
+
description: "Request path"
|
|
463
|
+
},
|
|
464
|
+
subprotocols: {
|
|
465
|
+
type: "array",
|
|
466
|
+
items: { type: "string" },
|
|
467
|
+
description: "Optional subprotocols to offer"
|
|
468
|
+
},
|
|
469
|
+
timeoutMs: {
|
|
470
|
+
type: "number",
|
|
471
|
+
default: 5e3,
|
|
472
|
+
description: "Handshake timeout in milliseconds"
|
|
473
|
+
},
|
|
474
|
+
servername: {
|
|
475
|
+
type: "string",
|
|
476
|
+
description: "Optional SNI and hostname validation override"
|
|
477
|
+
},
|
|
478
|
+
alpnProtocols: {
|
|
479
|
+
type: "array",
|
|
480
|
+
items: { type: "string" },
|
|
481
|
+
description: "Optional ALPN protocols to offer"
|
|
482
|
+
},
|
|
483
|
+
minVersion: {
|
|
484
|
+
type: "string",
|
|
485
|
+
enum: [...TLS_VERSION_VALUES],
|
|
486
|
+
description: "Optional minimum TLS version"
|
|
487
|
+
},
|
|
488
|
+
maxVersion: {
|
|
489
|
+
type: "string",
|
|
490
|
+
enum: [...TLS_VERSION_VALUES],
|
|
491
|
+
description: "Optional maximum TLS version"
|
|
492
|
+
},
|
|
493
|
+
caPem: {
|
|
494
|
+
type: "string",
|
|
495
|
+
description: "Optional PEM-encoded CA bundle"
|
|
496
|
+
},
|
|
497
|
+
caPath: {
|
|
498
|
+
type: "string",
|
|
499
|
+
description: "Optional path to a PEM-encoded CA bundle"
|
|
500
|
+
},
|
|
501
|
+
allowInvalidCertificates: {
|
|
502
|
+
type: "boolean",
|
|
503
|
+
default: false,
|
|
504
|
+
description: "Allow untrusted certificate chains"
|
|
505
|
+
},
|
|
506
|
+
skipHostnameCheck: {
|
|
507
|
+
type: "boolean",
|
|
508
|
+
default: false,
|
|
509
|
+
description: "Skip hostname verification"
|
|
510
|
+
}
|
|
511
|
+
}),
|
|
512
|
+
objectTool("websocket_send_frame", "Send a WebSocket frame.", {
|
|
513
|
+
sessionId: {
|
|
514
|
+
type: "string",
|
|
515
|
+
description: "WebSocket session ID"
|
|
516
|
+
},
|
|
517
|
+
frameType: {
|
|
518
|
+
type: "string",
|
|
519
|
+
enum: [
|
|
520
|
+
"text",
|
|
521
|
+
"binary",
|
|
522
|
+
"ping",
|
|
523
|
+
"pong",
|
|
524
|
+
"close"
|
|
525
|
+
],
|
|
526
|
+
description: "Outgoing frame opcode"
|
|
527
|
+
},
|
|
528
|
+
dataText: {
|
|
529
|
+
type: "string",
|
|
530
|
+
description: "UTF-8 payload for text/ping/pong/close frames"
|
|
531
|
+
},
|
|
532
|
+
dataHex: {
|
|
533
|
+
type: "string",
|
|
534
|
+
description: "Hex-encoded payload for binary/ping/pong/close frames"
|
|
535
|
+
},
|
|
536
|
+
closeCode: {
|
|
537
|
+
type: "number",
|
|
538
|
+
description: "Optional close status code"
|
|
539
|
+
},
|
|
540
|
+
closeReason: {
|
|
541
|
+
type: "string",
|
|
542
|
+
description: "Optional close reason"
|
|
543
|
+
},
|
|
544
|
+
timeoutMs: {
|
|
545
|
+
type: "number",
|
|
546
|
+
default: 5e3,
|
|
547
|
+
description: "Write timeout in milliseconds"
|
|
548
|
+
}
|
|
549
|
+
}, ["sessionId", "frameType"]),
|
|
550
|
+
objectTool("websocket_read_frame", "Read the next queued WebSocket frame from an open session.", {
|
|
551
|
+
sessionId: {
|
|
552
|
+
type: "string",
|
|
553
|
+
description: "WebSocket session ID"
|
|
554
|
+
},
|
|
555
|
+
timeoutMs: {
|
|
556
|
+
type: "number",
|
|
557
|
+
default: 5e3,
|
|
558
|
+
description: "Read timeout in milliseconds"
|
|
559
|
+
}
|
|
560
|
+
}, ["sessionId"]),
|
|
561
|
+
objectTool("websocket_close", "Close an open WebSocket session.", {
|
|
562
|
+
sessionId: {
|
|
563
|
+
type: "string",
|
|
564
|
+
description: "WebSocket session ID"
|
|
565
|
+
},
|
|
566
|
+
force: {
|
|
567
|
+
type: "boolean",
|
|
568
|
+
default: false,
|
|
569
|
+
description: "Destroy the underlying socket immediately without sending a close frame first"
|
|
570
|
+
},
|
|
571
|
+
closeCode: {
|
|
572
|
+
type: "number",
|
|
573
|
+
description: "Optional close status code"
|
|
574
|
+
},
|
|
575
|
+
closeReason: {
|
|
576
|
+
type: "string",
|
|
577
|
+
description: "Optional close reason"
|
|
578
|
+
},
|
|
579
|
+
timeoutMs: {
|
|
580
|
+
type: "number",
|
|
581
|
+
default: 1e3,
|
|
582
|
+
description: "Close wait timeout in milliseconds before forcing socket destruction"
|
|
583
|
+
}
|
|
584
|
+
}, ["sessionId"])
|
|
585
|
+
];
|
|
586
|
+
//#endregion
|
|
587
|
+
//#region src/server/domains/boringssl-inspector/definitions.ts
|
|
588
|
+
const boringsslInspectorTools = [
|
|
589
|
+
...tlsAnalysisTools,
|
|
590
|
+
...sessionTools,
|
|
591
|
+
...websocketTools,
|
|
592
|
+
...fridaTools,
|
|
593
|
+
...rawSocketTools
|
|
594
|
+
];
|
|
595
|
+
//#endregion
|
|
596
|
+
//#region src/server/domains/boringssl-inspector/manifest.ts
|
|
597
|
+
const DOMAIN = "boringssl-inspector";
|
|
598
|
+
const DEP_KEY = "boringsslInspectorHandlers";
|
|
599
|
+
const PROFILES = ["workflow", "full"];
|
|
600
|
+
const registrations = defineMethodRegistrations({
|
|
601
|
+
domain: DOMAIN,
|
|
602
|
+
depKey: DEP_KEY,
|
|
603
|
+
lookup: toolLookup(boringsslInspectorTools),
|
|
604
|
+
wrapResult: asToolResponse,
|
|
605
|
+
entries: [
|
|
606
|
+
{
|
|
607
|
+
tool: "tls_keylog_enable",
|
|
608
|
+
method: "handleTlsKeylogEnable"
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
tool: "tls_keylog_parse",
|
|
612
|
+
method: "handleTlsKeylogParse"
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
tool: "tls_keylog_disable",
|
|
616
|
+
method: "handleTlsKeylogDisable"
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
tool: "tls_decrypt_payload",
|
|
620
|
+
method: "handleTlsDecryptPayload"
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
tool: "tls_keylog_summarize",
|
|
624
|
+
method: "handleTlsKeylogSummarize"
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
tool: "tls_keylog_lookup_secret",
|
|
628
|
+
method: "handleTlsKeylogLookupSecret"
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
tool: "tls_cert_pin_bypass",
|
|
632
|
+
method: "handleTlsCertPinBypass"
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
tool: "tls_parse_handshake",
|
|
636
|
+
method: "handleParseHandshake"
|
|
637
|
+
},
|
|
638
|
+
{
|
|
639
|
+
tool: "tls_cipher_suites",
|
|
640
|
+
method: "handleCipherSuites"
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
tool: "tls_parse_certificate",
|
|
644
|
+
method: "handleParseCertificate"
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
tool: "tls_probe_endpoint",
|
|
648
|
+
method: "handleTlsProbeEndpoint"
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
tool: "tcp_open",
|
|
652
|
+
method: "handleTcpOpen"
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
tool: "tcp_write",
|
|
656
|
+
method: "handleTcpWrite"
|
|
657
|
+
},
|
|
658
|
+
{
|
|
659
|
+
tool: "tcp_read_until",
|
|
660
|
+
method: "handleTcpReadUntil"
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
tool: "tcp_close",
|
|
664
|
+
method: "handleTcpClose"
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
tool: "tls_open",
|
|
668
|
+
method: "handleTlsOpen"
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
tool: "tls_write",
|
|
672
|
+
method: "handleTlsWrite"
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
tool: "tls_read_until",
|
|
676
|
+
method: "handleTlsReadUntil"
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
tool: "tls_close",
|
|
680
|
+
method: "handleTlsClose"
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
tool: "websocket_open",
|
|
684
|
+
method: "handleWebSocketOpen"
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
tool: "websocket_send_frame",
|
|
688
|
+
method: "handleWebSocketSendFrame"
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
tool: "websocket_read_frame",
|
|
692
|
+
method: "handleWebSocketReadFrame"
|
|
693
|
+
},
|
|
694
|
+
{
|
|
695
|
+
tool: "websocket_close",
|
|
696
|
+
method: "handleWebSocketClose"
|
|
697
|
+
},
|
|
698
|
+
{
|
|
699
|
+
tool: "tls_cert_pin_bypass_frida",
|
|
700
|
+
method: "handleBypassCertPinning"
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
tool: "net_raw_tcp_send",
|
|
704
|
+
method: "handleRawTcpSend"
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
tool: "net_raw_tcp_listen",
|
|
708
|
+
method: "handleRawTcpListen"
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
tool: "net_raw_udp_send",
|
|
712
|
+
method: "handleRawUdpSend"
|
|
713
|
+
},
|
|
714
|
+
{
|
|
715
|
+
tool: "net_raw_udp_listen",
|
|
716
|
+
method: "handleRawUdpListen"
|
|
717
|
+
}
|
|
718
|
+
]
|
|
719
|
+
});
|
|
720
|
+
async function ensure(ctx) {
|
|
721
|
+
const { BoringsslInspectorHandlers } = await import("./handlers-BOs9b907.mjs");
|
|
722
|
+
const { TLSKeyLogExtractor } = await import("./boringssl-inspector-Bo_LOLaS.mjs").then((n) => n.t);
|
|
723
|
+
const existing = ctx.getDomainInstance(DEP_KEY);
|
|
724
|
+
if (existing) return existing;
|
|
725
|
+
const handlers = new BoringsslInspectorHandlers(new TLSKeyLogExtractor());
|
|
726
|
+
handlers.setExtensionInvoke(async (args) => {
|
|
727
|
+
try {
|
|
728
|
+
const binaryInstrument = ctx.getDomainInstance("binaryInstrumentHandlers");
|
|
729
|
+
if (binaryInstrument && typeof binaryInstrument.handleFridaRunScript === "function") return binaryInstrument.handleFridaRunScript(args);
|
|
730
|
+
} catch {}
|
|
731
|
+
return null;
|
|
732
|
+
});
|
|
733
|
+
handlers.setEventBus(ctx.eventBus);
|
|
734
|
+
ctx.setDomainInstance(DEP_KEY, handlers);
|
|
735
|
+
return handlers;
|
|
736
|
+
}
|
|
737
|
+
const manifest = {
|
|
738
|
+
kind: "domain-manifest",
|
|
739
|
+
version: 1,
|
|
740
|
+
domain: DOMAIN,
|
|
741
|
+
depKey: DEP_KEY,
|
|
742
|
+
profiles: PROFILES,
|
|
743
|
+
registrations,
|
|
744
|
+
ensure,
|
|
745
|
+
workflowRule: {
|
|
746
|
+
patterns: [/\b(tls|ssl|boringssl|cert(ificate)?|pinning|handshake|keylog|websocket)\b/i, /(tls|ssl|cert|pinning|websocket).*(hook|bypass|intercept|dump|log|frame|session)/i],
|
|
747
|
+
priority: 80,
|
|
748
|
+
tools: [
|
|
749
|
+
"tls_probe_endpoint",
|
|
750
|
+
"websocket_open",
|
|
751
|
+
"websocket_send_frame",
|
|
752
|
+
"websocket_read_frame",
|
|
753
|
+
"tls_keylog_enable",
|
|
754
|
+
"tls_keylog_parse",
|
|
755
|
+
"tls_decrypt_payload",
|
|
756
|
+
"tls_cert_pin_bypass"
|
|
757
|
+
],
|
|
758
|
+
hint: "TLS/WebSocket analysis: probe endpoint → open ws/wss session → exchange frames → inspect trust/cipher/ALPN → enable keylog or bypass pinning when needed."
|
|
759
|
+
},
|
|
760
|
+
prerequisites: {
|
|
761
|
+
tls_probe_endpoint: [{
|
|
762
|
+
condition: "Target scope must be explicitly authorized and routable from the MCP host",
|
|
763
|
+
fix: "Verify target authorization, port reachability, and provide servername/custom CA options when needed"
|
|
764
|
+
}],
|
|
765
|
+
tls_keylog_enable: [{
|
|
766
|
+
condition: "Target process must allow SSLKEYLOGFILE or be attachable by Frida",
|
|
767
|
+
fix: "Launch the target with SSLKEYLOGFILE env set, or enable Frida-based hooking"
|
|
768
|
+
}],
|
|
769
|
+
tls_decrypt_payload: [{
|
|
770
|
+
condition: "A keylog session must be active with captured secrets",
|
|
771
|
+
fix: "Run tls_keylog_enable and reproduce TLS traffic before decrypting"
|
|
772
|
+
}],
|
|
773
|
+
tls_cert_pin_bypass_frida: [{
|
|
774
|
+
condition: "Frida must be available on PATH and attached to the target",
|
|
775
|
+
fix: "Install Frida and attach via binary-instrument:frida_attach before running the bypass"
|
|
776
|
+
}]
|
|
777
|
+
},
|
|
778
|
+
toolDependencies: [{
|
|
779
|
+
from: "network",
|
|
780
|
+
to: "boringssl-inspector",
|
|
781
|
+
relation: "uses",
|
|
782
|
+
weight: .8
|
|
783
|
+
}]
|
|
784
|
+
};
|
|
785
|
+
//#endregion
|
|
786
|
+
export { manifest as default };
|