@remnux/mcp-server 0.1.54 → 0.1.55

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 (65) hide show
  1. package/README.md +7 -1
  2. package/dist/analysis/behavior-prerequisites.d.ts +65 -0
  3. package/dist/analysis/behavior-prerequisites.d.ts.map +1 -0
  4. package/dist/analysis/behavior-prerequisites.js +186 -0
  5. package/dist/analysis/behavior-prerequisites.js.map +1 -0
  6. package/dist/analysis/file-diff.d.ts +59 -0
  7. package/dist/analysis/file-diff.d.ts.map +1 -0
  8. package/dist/analysis/file-diff.js +55 -0
  9. package/dist/analysis/file-diff.js.map +1 -0
  10. package/dist/analysis/index.d.ts +1 -1
  11. package/dist/analysis/index.d.ts.map +1 -1
  12. package/dist/analysis/index.js +1 -1
  13. package/dist/analysis/index.js.map +1 -1
  14. package/dist/analysis/string-usage.d.ts +77 -0
  15. package/dist/analysis/string-usage.d.ts.map +1 -0
  16. package/dist/analysis/string-usage.js +130 -0
  17. package/dist/analysis/string-usage.js.map +1 -0
  18. package/dist/analysis/summarizer.d.ts +22 -0
  19. package/dist/analysis/summarizer.d.ts.map +1 -1
  20. package/dist/analysis/summarizer.js +41 -0
  21. package/dist/analysis/summarizer.js.map +1 -1
  22. package/dist/handlers/analyze-file.d.ts.map +1 -1
  23. package/dist/handlers/analyze-file.js +14 -2
  24. package/dist/handlers/analyze-file.js.map +1 -1
  25. package/dist/handlers/check-behavior-prerequisites.d.ts +16 -0
  26. package/dist/handlers/check-behavior-prerequisites.d.ts.map +1 -0
  27. package/dist/handlers/check-behavior-prerequisites.js +132 -0
  28. package/dist/handlers/check-behavior-prerequisites.js.map +1 -0
  29. package/dist/handlers/compare-files.d.ts +10 -0
  30. package/dist/handlers/compare-files.d.ts.map +1 -0
  31. package/dist/handlers/compare-files.js +147 -0
  32. package/dist/handlers/compare-files.js.map +1 -0
  33. package/dist/handlers/report.d.ts.map +1 -1
  34. package/dist/handlers/report.js +11 -0
  35. package/dist/handlers/report.js.map +1 -1
  36. package/dist/handlers/verify-string-usage.d.ts +10 -0
  37. package/dist/handlers/verify-string-usage.d.ts.map +1 -0
  38. package/dist/handlers/verify-string-usage.js +166 -0
  39. package/dist/handlers/verify-string-usage.js.map +1 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +47 -8
  42. package/dist/index.js.map +1 -1
  43. package/dist/parsers/capa.d.ts +8 -1
  44. package/dist/parsers/capa.d.ts.map +1 -1
  45. package/dist/parsers/capa.js +138 -0
  46. package/dist/parsers/capa.js.map +1 -1
  47. package/dist/parsers/imports.d.ts +36 -0
  48. package/dist/parsers/imports.d.ts.map +1 -0
  49. package/dist/parsers/imports.js +67 -0
  50. package/dist/parsers/imports.js.map +1 -0
  51. package/dist/parsers/r2.d.ts +73 -0
  52. package/dist/parsers/r2.d.ts.map +1 -0
  53. package/dist/parsers/r2.js +161 -0
  54. package/dist/parsers/r2.js.map +1 -0
  55. package/dist/parsers/types.d.ts +19 -0
  56. package/dist/parsers/types.d.ts.map +1 -1
  57. package/dist/report/triage-discipline.d.ts +28 -0
  58. package/dist/report/triage-discipline.d.ts.map +1 -0
  59. package/dist/report/triage-discipline.js +49 -0
  60. package/dist/report/triage-discipline.js.map +1 -0
  61. package/dist/schemas/tools.d.ts +45 -3
  62. package/dist/schemas/tools.d.ts.map +1 -1
  63. package/dist/schemas/tools.js +22 -2
  64. package/dist/schemas/tools.js.map +1 -1
  65. package/package.json +1 -1
@@ -0,0 +1,147 @@
1
+ import { validateFilePath } from "../security/blocklist.js";
2
+ import { formatResponse, formatError } from "../response.js";
3
+ import { REMnuxError } from "../errors/remnux-error.js";
4
+ import { toREMnuxError } from "../errors/error-mapper.js";
5
+ import { resolveSamplePath } from "../utils/resolve-sample-path.js";
6
+ import { checkFileExists } from "../utils/check-file-exists.js";
7
+ import { parsePeImports } from "../parsers/imports.js";
8
+ import { parseDiecOutput } from "../parsers/diec.js";
9
+ import { parseCapaOutput } from "../parsers/capa.js";
10
+ import { parseR2Sections } from "../parsers/r2.js";
11
+ import { diffFileMeta } from "../analysis/file-diff.js";
12
+ /** Shannon entropy of the file's bytes, via a one-shot python helper. */
13
+ const ENTROPY_PY = "import sys,math,collections\n" +
14
+ "b=open(sys.argv[1],'rb').read()\n" +
15
+ "n=len(b) or 1\n" +
16
+ "c=collections.Counter(b)\n" +
17
+ "print(round(-sum((v/n)*math.log2(v/n) for v in c.values()),4))";
18
+ function archFromFileType(ft) {
19
+ if (/PE32\+|x86-64|x86_64|64-bit/i.test(ft))
20
+ return "x64";
21
+ if (/PE32\b|Intel 80386|80386|32-bit/i.test(ft))
22
+ return "x86";
23
+ return undefined;
24
+ }
25
+ /** Pull the value after "Type: name" from a diec finding for a given category. */
26
+ function diecValue(diecRaw, category) {
27
+ const parsed = parseDiecOutput(diecRaw);
28
+ const f = parsed.findings.find((x) => x.category === category);
29
+ if (!f)
30
+ return undefined;
31
+ const idx = f.description.indexOf(": ");
32
+ return idx >= 0 ? f.description.slice(idx + 2) : f.description;
33
+ }
34
+ async function num(connector, cmd) {
35
+ try {
36
+ const r = await connector.execute(cmd, { timeout: 30000 });
37
+ const n = parseFloat((r.stdout || "").trim().split(/\s+/)[0]);
38
+ return Number.isFinite(n) ? n : undefined;
39
+ }
40
+ catch {
41
+ return undefined;
42
+ }
43
+ }
44
+ async function gatherFileMeta(connector, filePath, fileArg, runCapa) {
45
+ let fileType = "";
46
+ let sha256 = "";
47
+ try {
48
+ fileType = (await connector.execute(["file", filePath], { timeout: 30000 })).stdout?.trim() ?? "";
49
+ }
50
+ catch { /* best effort */ }
51
+ try {
52
+ sha256 = ((await connector.execute(["sha256sum", filePath], { timeout: 30000 })).stdout || "").trim().split(/\s+/)[0] || "";
53
+ }
54
+ catch { /* best effort */ }
55
+ const size_bytes = (await num(connector, ["stat", "-c", "%s", filePath])) ?? 0;
56
+ const entropy = await (async () => {
57
+ try {
58
+ const r = await connector.execute(["python3", "-c", ENTROPY_PY, filePath], { timeout: 30000 });
59
+ const n = parseFloat((r.stdout || "").trim());
60
+ return Number.isFinite(n) ? n : undefined;
61
+ }
62
+ catch {
63
+ return undefined;
64
+ }
65
+ })();
66
+ let compiler;
67
+ let packer;
68
+ try {
69
+ const diec = (await connector.execute(["diec", "-j", filePath], { timeout: 60000 })).stdout || "";
70
+ compiler = diecValue(diec, "compiler");
71
+ packer = diecValue(diec, "packer") ?? diecValue(diec, "protector");
72
+ }
73
+ catch { /* best effort */ }
74
+ let imports = [];
75
+ try {
76
+ const imp = parsePeImports((await connector.execute(["readpe", "-i", "-f", "json", filePath], { timeout: 60000 })).stdout || "");
77
+ imports = imp.dlls.flatMap((d) => d.functions);
78
+ }
79
+ catch { /* non-PE or failure */ }
80
+ let sections = [];
81
+ try {
82
+ const sec = parseR2Sections((await connector.execute(["r2", "-2", "-q", "-N", "-e", "scr.color=0", "-c", "iSj", filePath], { timeout: 30000 })).stdout || "");
83
+ sections = sec.map((s) => s.name).filter((n) => n.length > 0);
84
+ }
85
+ catch { /* best effort */ }
86
+ let capabilities = [];
87
+ if (runCapa) {
88
+ try {
89
+ const capa = parseCapaOutput((await connector.execute(["capa", "-j", filePath], { timeout: 300000 })).stdout || "");
90
+ capabilities = capa.findings.map((f) => f.description);
91
+ }
92
+ catch { /* best effort */ }
93
+ }
94
+ return {
95
+ file: fileArg,
96
+ file_type: fileType,
97
+ sha256,
98
+ size_bytes,
99
+ arch: archFromFileType(fileType),
100
+ entropy,
101
+ compiler,
102
+ packer,
103
+ imports,
104
+ import_count: imports.length,
105
+ capabilities,
106
+ capa_run: runCapa,
107
+ sections,
108
+ };
109
+ }
110
+ export async function handleCompareFiles(deps, args) {
111
+ const startTime = Date.now();
112
+ try {
113
+ const { connector, config } = deps;
114
+ const depth = args.depth ?? "standard";
115
+ for (const f of [args.file_a, args.file_b]) {
116
+ if (!config.noSandbox) {
117
+ const v = validateFilePath(f, config.samplesDir);
118
+ if (!v.safe) {
119
+ return formatError("compare_files", new REMnuxError(v.error || "Invalid file path", "INVALID_PATH", "validation", "Use a relative path within the samples directory"), startTime);
120
+ }
121
+ }
122
+ }
123
+ const pa = resolveSamplePath(args.file_a, config.samplesDir, config.mode);
124
+ const pb = resolveSamplePath(args.file_b, config.samplesDir, config.mode);
125
+ const ea = await checkFileExists(connector, pa.filePath);
126
+ if (ea)
127
+ return formatError("compare_files", ea, startTime);
128
+ const eb = await checkFileExists(connector, pb.filePath);
129
+ if (eb)
130
+ return formatError("compare_files", eb, startTime);
131
+ const runCapa = depth === "standard";
132
+ const metaA = await gatherFileMeta(connector, pa.filePath, args.file_a, runCapa);
133
+ const metaB = await gatherFileMeta(connector, pb.filePath, args.file_b, runCapa);
134
+ const diff = diffFileMeta(metaA, metaB);
135
+ return formatResponse("compare_files", {
136
+ depth,
137
+ basis: "Structured diff of two files' static properties (size, entropy, architecture, compiler, packer, imports, capabilities, sections). Reuses readpe/diec/capa/radare2; capability diff requires depth='standard'.",
138
+ file_a: { ...diff.file_a, file_type: metaA.file_type, size_bytes: metaA.size_bytes, import_count: metaA.import_count },
139
+ file_b: { ...diff.file_b, file_type: metaB.file_type, size_bytes: metaB.size_bytes, import_count: metaB.import_count },
140
+ diff,
141
+ }, startTime);
142
+ }
143
+ catch (error) {
144
+ return formatError("compare_files", toREMnuxError(error, deps.config.mode), startTime);
145
+ }
146
+ }
147
+ //# sourceMappingURL=compare-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-files.js","sourceRoot":"","sources":["../../src/handlers/compare-files.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/handlers/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAyCjE,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,WAAW;;;;;;GAgB/D;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB;;;;;;GAkB5F"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/handlers/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AA0CjE,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,WAAW;;;;;;GAgB/D;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB;;;;;;GAmC5F"}
@@ -1,6 +1,7 @@
1
1
  import { formatResponse, formatError } from "../response.js";
2
2
  import { toREMnuxError } from "../errors/error-mapper.js";
3
3
  import { REPORT_TEMPLATE, GUIDELINES_DIGEST, ATTRIBUTION, SOURCE_META, } from "../report/content.generated.js";
4
+ import { TRIAGE_DISCIPLINE } from "../report/triage-discipline.js";
4
5
  const NOTES = "This report template and writing guidance are bundled with the server and work offline — no network required. " +
5
6
  `The canonical, continuously updated source is ${SOURCE_META.fallbackArticleUrl}. ` +
6
7
  "When online, the zeltser-website MCP server offers richer tools — malware_get_template, malware_get_guidelines, " +
@@ -47,6 +48,16 @@ export async function handleGetReportGuidance(_deps, args) {
47
48
  const startTime = Date.now();
48
49
  try {
49
50
  const topic = args.topic ?? "all";
51
+ // The triage-discipline checklist is server-authored operational guidance,
52
+ // not part of the synced report-writing digest — return it on its own.
53
+ if (topic === "triage_checklist") {
54
+ return formatResponse("get_report_guidance", {
55
+ topic,
56
+ triage_discipline: TRIAGE_DISCIPLINE,
57
+ notes: "Server-authored, bundled, offline operational guidance — distinct from the report-writing " +
58
+ "guidelines (use any other topic, or 'all', for those).",
59
+ }, startTime);
60
+ }
50
61
  return formatResponse("get_report_guidance", {
51
62
  topic,
52
63
  guidelines: selectGuidelines(topic),
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/handlers/report.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,WAAW,GACZ,MAAM,gCAAgC,CAAC;AAExC,MAAM,KAAK,GACT,gHAAgH;IAChH,iDAAiD,WAAW,CAAC,kBAAkB,IAAI;IACnF,kHAAkH;IAClH,uFAAuF,CAAC;AAE1F,0FAA0F;AAC1F,MAAM,UAAU,GAA6B;IAC3C,QAAQ,EAAE,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB,CAAC;IAC1F,UAAU,EAAE,CAAC,YAAY,CAAC;IAC1B,YAAY,EAAE,CAAC,iBAAiB,CAAC;IACjC,eAAe,EAAE,CAAC,eAAe,CAAC;IAClC,aAAa,EAAE,CAAC,cAAc,CAAC;IAC/B,MAAM,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,0BAA0B,CAAC;IAChG,OAAO,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;IACnG,UAAU,EAAE,CAAC,YAAY,CAAC;IAC1B,QAAQ,EAAE,CAAC,uBAAuB,CAAC;CACpC,CAAC;AAEF,+GAA+G;AAC/G,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,GAAG,IAAI,iBAAiB;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAAkB;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,cAAc,CACnB,qBAAqB,EACrB;YACE,QAAQ,EAAE,eAAe;YACzB,WAAW,EAAE,WAAW,CAAC,QAAQ;YACjC,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,KAAK;SACb,EACD,SAAS,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,qBAAqB,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAAkB,EAAE,IAA2B;IAC3F,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;QAClC,OAAO,cAAc,CACnB,qBAAqB,EACrB;YACE,KAAK;YACL,UAAU,EAAE,gBAAgB,CAAC,KAAK,CAAC;YACnC,WAAW,EAAE,WAAW,CAAC,UAAU;YACnC,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,KAAK;SACb,EACD,SAAS,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,qBAAqB,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/handlers/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { HandlerDeps } from "./types.js";
2
+ import type { VerifyStringUsageArgs } from "../schemas/tools.js";
3
+ export declare function handleVerifyStringUsage(deps: HandlerDeps, args: VerifyStringUsageArgs): Promise<{
4
+ content: Array<{
5
+ type: "text";
6
+ text: string;
7
+ }>;
8
+ isError?: boolean;
9
+ }>;
10
+ //# sourceMappingURL=verify-string-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-string-usage.d.ts","sourceRoot":"","sources":["../../src/handlers/verify-string-usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AA+BjE,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB;;;;;;GAuL3F"}
@@ -0,0 +1,166 @@
1
+ import { validateFilePath } from "../security/blocklist.js";
2
+ import { formatResponse, formatError } from "../response.js";
3
+ import { REMnuxError } from "../errors/remnux-error.js";
4
+ import { toREMnuxError } from "../errors/error-mapper.js";
5
+ import { resolveSamplePath } from "../utils/resolve-sample-path.js";
6
+ import { checkFileExists } from "../utils/check-file-exists.js";
7
+ import { looksObscured } from "./check-behavior-prerequisites.js";
8
+ import { parseR2Strings, parseR2Sections, parseR2Functions, parseR2Xrefs, splitMarkedR2Output, R2_MARKERS, } from "../parsers/r2.js";
9
+ import { selectMatches, classifyMatch } from "../analysis/string-usage.js";
10
+ const BASIS = "Static string enumeration (radare2 izj) plus code cross-reference analysis (aa; aar; axt). 'referenced_from_code' " +
11
+ "means an instruction references the string; 'no_code_xrefs_detected' is a complete-analysis null result and is " +
12
+ "NOT proof the string is unused; 'unknown' means analysis was incomplete/unreliable (packed, timed out, version " +
13
+ "drift) and is never a negative. This is a static check — confirm runtime behavior dynamically.";
14
+ /** Base, non-interactive, hermetic r2 invocation flags. */
15
+ const R2_FLAGS = ["-2", "-q", "-N", "-e", "scr.color=0", "-e", "log.quiet=true"];
16
+ /** Total distinct string addresses fed to the (expensive) xref pass. */
17
+ const VADDR_CAP = 40;
18
+ export async function handleVerifyStringUsage(deps, args) {
19
+ const startTime = Date.now();
20
+ try {
21
+ const { connector, config } = deps;
22
+ if (!args.query) {
23
+ return formatError("verify_string_usage", new REMnuxError("A non-empty 'query' string is required.", "INVALID_ARGUMENT", "validation", "Pass the string to look for."), startTime);
24
+ }
25
+ if (!config.noSandbox) {
26
+ const validation = validateFilePath(args.file, config.samplesDir);
27
+ if (!validation.safe) {
28
+ return formatError("verify_string_usage", new REMnuxError(validation.error || "Invalid file path", "INVALID_PATH", "validation", "Use a relative path within the samples directory"), startTime);
29
+ }
30
+ }
31
+ const { filePath } = resolveSamplePath(args.file, config.samplesDir, config.mode);
32
+ const fileError = await checkFileExists(connector, filePath);
33
+ if (fileError)
34
+ return formatError("verify_string_usage", fileError, startTime);
35
+ let fileType = "";
36
+ try {
37
+ const r = await connector.execute(["file", filePath], { timeout: 30000 });
38
+ fileType = r.stdout?.trim() ?? "";
39
+ }
40
+ catch (error) {
41
+ const mapped = toREMnuxError(error, config.mode);
42
+ if (mapped.code === "CONNECTION_FAILED")
43
+ return formatError("verify_string_usage", mapped, startTime);
44
+ }
45
+ const isCodeFile = /\bPE32\+?\b|\bELF\b|Mach-O|MS Windows|executable/i.test(fileType);
46
+ // Pass 1 — enumerate strings (cheap, no analysis). Try izj (mapped sections),
47
+ // fall back to izzj (whole file). r2 absence is detected here.
48
+ let r2Available = true;
49
+ let strings = parseR2Strings("");
50
+ try {
51
+ const r = await connector.execute([...["r2"], ...R2_FLAGS, "-c", "izj", filePath], { timeout: 30000 });
52
+ if (r.exitCode === 127 || /not found|No such file/i.test(r.stderr || "")) {
53
+ r2Available = false;
54
+ }
55
+ else {
56
+ strings = parseR2Strings(r.stdout || "");
57
+ if (strings.length === 0) {
58
+ const rz = await connector.execute([...["r2"], ...R2_FLAGS, "-c", "izzj", filePath], { timeout: 30000 });
59
+ strings = parseR2Strings(rz.stdout || "");
60
+ }
61
+ }
62
+ }
63
+ catch {
64
+ r2Available = false;
65
+ }
66
+ if (!r2Available) {
67
+ return formatResponse("verify_string_usage", {
68
+ file: args.file, query: args.query, file_type: fileType, engine: "radare2", engine_available: false, basis: BASIS,
69
+ match_count: 0, matches: [],
70
+ note: "radare2 is unavailable on this system; string cross-reference analysis could not run. Status is UNKNOWN — not a 'no xref' result.",
71
+ }, startTime);
72
+ }
73
+ const maxMatches = args.max_matches ?? 50;
74
+ const { groups, truncated } = selectMatches(strings, args.query, maxMatches);
75
+ if (groups.length === 0) {
76
+ return formatResponse("verify_string_usage", {
77
+ file: args.file, query: args.query, file_type: fileType, is_code_file: isCodeFile, engine: "radare2", basis: BASIS,
78
+ match_count: 0, matches: [],
79
+ note: "The query was not found among this file's strings (radare2 izj/izzj). It is not embedded as a contiguous string — it could still be built at runtime or stored encoded/obfuscated.",
80
+ }, startTime);
81
+ }
82
+ // Non-code file: nothing can reference the string in code.
83
+ if (!isCodeFile) {
84
+ const ctx = { isCodeFile: false, fileType, schemaKnown: false, analysisComplete: false, obscured: false, initializerFunctionAddrs: new Set() };
85
+ const matches = groups.map((g) => classifyMatch(g, [], [], ctx));
86
+ return formatResponse("verify_string_usage", { file: args.file, query: args.query, file_type: fileType, is_code_file: false, engine: "radare2", basis: BASIS, match_count: groups.length, matches_truncated: truncated, matches }, startTime);
87
+ }
88
+ // Detect packing (reused from check_behavior_prerequisites) — a gate for the invariant.
89
+ let obscured = false;
90
+ try {
91
+ const d = await connector.execute(["diec", "-j", filePath], { timeout: 60000 });
92
+ obscured = looksObscured(d.stdout || "");
93
+ }
94
+ catch {
95
+ /* best effort */
96
+ }
97
+ // Select the groups we can afford to xref (bounded), keeping every classified
98
+ // group fully covered so a non-queried vaddr is never read as a negative.
99
+ const queried = new Set();
100
+ const groupsToClassify = [];
101
+ for (const g of groups) {
102
+ const vs = g.vaddrs.map((v) => v.vaddr);
103
+ if (queried.size + vs.length > VADDR_CAP && groupsToClassify.length > 0)
104
+ break;
105
+ vs.forEach((v) => queried.add(v));
106
+ groupsToClassify.push(g);
107
+ }
108
+ const matchesTruncated = truncated || groupsToClassify.length < groups.length;
109
+ // Pass 2 — one analyzed session: version, sections, functions, per-vaddr xrefs.
110
+ const deep = args.depth === "deep";
111
+ const analysisCmd = deep ? "aaa" : "aa; aar";
112
+ const parts = ["?V", analysisCmd, `?e ${R2_MARKERS.sections}`, "iSj", `?e ${R2_MARKERS.functions}`, "aflj"];
113
+ for (const v of queried) {
114
+ const h = "0x" + v.toString(16);
115
+ parts.push(`?e ${R2_MARKERS.xref} ${h}`, `axtj @ ${h}`);
116
+ }
117
+ const soft = deep ? 60 : 20;
118
+ let split;
119
+ try {
120
+ const r = await connector.execute([...["r2"], ...R2_FLAGS, "-e", `anal.timeout=${soft}`, "-c", parts.join("; "), filePath], { timeout: deep ? 120000 : 45000 });
121
+ split = splitMarkedR2Output(r.stdout || "");
122
+ }
123
+ catch {
124
+ /* timeout / kill → unknown below */
125
+ }
126
+ if (!split) {
127
+ const ctx = { isCodeFile: true, fileType, schemaKnown: false, analysisComplete: false, obscured, initializerFunctionAddrs: new Set() };
128
+ const matches = groupsToClassify.map((g) => classifyMatch(g, [], [], ctx));
129
+ return formatResponse("verify_string_usage", { file: args.file, query: args.query, file_type: fileType, is_code_file: true, engine: "radare2", packer_detected: obscured, analysis_complete: false, timed_out: true, basis: BASIS, match_count: groupsToClassify.length, matches_truncated: matchesTruncated, matches }, startTime);
130
+ }
131
+ const sections = parseR2Sections(split.sectionsJson);
132
+ const functions = parseR2Functions(split.functionsJson);
133
+ const ctx = {
134
+ isCodeFile: true,
135
+ fileType,
136
+ schemaKnown: !!split.version,
137
+ analysisComplete: !split.truncated && functions.length > 0,
138
+ obscured,
139
+ initializerFunctionAddrs: new Set(),
140
+ };
141
+ const matches = groupsToClassify.map((g) => {
142
+ const xrefs = [];
143
+ let rawAnomaly = false;
144
+ for (const v of g.vaddrs) {
145
+ const raw = split.xrefsByVaddr.get("0x" + v.vaddr.toString(16));
146
+ if (raw === undefined)
147
+ continue;
148
+ const parsed = parseR2Xrefs(raw);
149
+ const t = raw.trim();
150
+ if (parsed.length === 0 && t !== "" && t !== "[]")
151
+ rawAnomaly = true;
152
+ xrefs.push(...parsed);
153
+ }
154
+ return classifyMatch(g, xrefs, sections, ctx, rawAnomaly);
155
+ });
156
+ return formatResponse("verify_string_usage", {
157
+ file: args.file, query: args.query, file_type: fileType, is_code_file: true, engine: "radare2",
158
+ r2_version: split.version, packer_detected: obscured, analysis_complete: ctx.analysisComplete,
159
+ basis: BASIS, match_count: groupsToClassify.length, matches_truncated: matchesTruncated, matches,
160
+ }, startTime);
161
+ }
162
+ catch (error) {
163
+ return formatError("verify_string_usage", toREMnuxError(error, deps.config.mode), startTime);
164
+ }
165
+ }
166
+ //# sourceMappingURL=verify-string-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-string-usage.js","sourceRoot":"","sources":["../../src/handlers/verify-string-usage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAOtF,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAoC9E,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,sBAqVtD;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,iBAqCrD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAOtF,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA0C9E,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,sBA2YtD;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,iBAqCrD"}
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/
6
6
  import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js";
7
7
  import { requireBearerAuth } from "@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js";
8
8
  import { createConnector } from "./connectors/index.js";
9
- import { runToolSchema, getFileInfoSchema, listFilesSchema, extractArchiveSchema, uploadFromHostSchema, downloadFromUrlSchema, downloadFileSchema, analyzeFileSchema, suggestToolsSchema, extractIOCsSchema, checkToolsSchema, getToolHelpSchema, getReportTemplateSchema, getReportGuidanceSchema, } from "./schemas/tools.js";
9
+ import { runToolSchema, getFileInfoSchema, listFilesSchema, extractArchiveSchema, uploadFromHostSchema, downloadFromUrlSchema, downloadFileSchema, analyzeFileSchema, suggestToolsSchema, extractIOCsSchema, checkToolsSchema, getToolHelpSchema, getReportTemplateSchema, getReportGuidanceSchema, checkBehaviorPrerequisitesSchema, verifyStringUsageSchema, compareFilesSchema, } from "./schemas/tools.js";
10
10
  import { SessionState, DEFAULT_ARCHIVE_PASSWORD } from "./state/session.js";
11
11
  import { handleRunTool } from "./handlers/run-tool.js";
12
12
  import { handleGetFileInfo } from "./handlers/get-file-info.js";
@@ -21,6 +21,9 @@ import { handleCheckTools } from "./handlers/check-tools.js";
21
21
  import { handleSuggestTools } from "./handlers/suggest-tools.js";
22
22
  import { handleGetToolHelp } from "./handlers/get-tool-help.js";
23
23
  import { handleGetReportTemplate, handleGetReportGuidance } from "./handlers/report.js";
24
+ import { handleCheckBehaviorPrerequisites } from "./handlers/check-behavior-prerequisites.js";
25
+ import { handleVerifyStringUsage } from "./handlers/verify-string-usage.js";
26
+ import { handleCompareFiles } from "./handlers/compare-files.js";
24
27
  import { toolRegistry } from "./tools/registry.js";
25
28
  import { REPORT_TEMPLATE, GUIDELINES_DIGEST, ATTRIBUTION, SOURCE_META } from "./report/content.generated.js";
26
29
  import { httpBindRequiresToken } from "./utils/loopback.js";
@@ -46,7 +49,11 @@ export async function createServer(config) {
46
49
  "cross-reference with behavioral analysis or threat intelligence before attributing to a specific family. " +
47
50
  "The sample's filename is attacker- or analyst-supplied metadata, not evidence: do not attribute a " +
48
51
  "malware family based on the filename. Treat any family name in the filename as an unverified lead to " +
49
- "check, not a finding, and confirm attribution only from analysis findings.",
52
+ "check, not a finding, and confirm attribution only from analysis findings. " +
53
+ "Distinguish static artifacts from executed behavior: a string, regex, constant, or capa pattern that " +
54
+ "is merely PRESENT in a file is an artifact, not proof the corresponding behavior runs. Do not restate " +
55
+ "an artifact-level finding as a behavior — confirm behavior via imported or dynamically resolved APIs, " +
56
+ "code cross-references, or dynamic analysis.",
50
57
  });
51
58
  const connector = await createConnector(config);
52
59
  const sessionState = new SessionState();
@@ -65,7 +72,10 @@ export async function createServer(config) {
65
72
  };
66
73
  // Tool: run_tool - Execute a command in REMnux
67
74
  server.tool("run_tool", "Execute a command in REMnux. Supports piped commands (e.g., 'oledump.py sample.doc | grep VBA'). " +
68
- "String extraction: For PE files use 'pestr'; for non-PE use 'strings' (ASCII) and 'strings -el' (Unicode).", runToolSchema.shape, (args) => handleRunTool(deps, args));
75
+ "String extraction: For PE files use 'pestr'; for non-PE use 'strings' (ASCII) and 'strings -el' (Unicode). " +
76
+ "Note: capa matches under namespaces like collection/* or data-manipulation/* can be artifact-level (matched " +
77
+ "on strings/data) rather than behavioral; a behavioral capability requires the corresponding APIs to be " +
78
+ "imported or dynamically resolved. analyze_file tags capa findings with evidence_types to make this explicit.", runToolSchema.shape, (args) => handleRunTool(deps, args));
69
79
  // Tool: get_file_info - Get basic file information
70
80
  server.tool("get_file_info", "Get file type, hashes, and basic metadata", getFileInfoSchema.shape, (args) => handleGetFileInfo(deps, args));
71
81
  // Tool: list_files - List files in samples or output directory
@@ -118,16 +128,43 @@ export async function createServer(config) {
118
128
  "Pass archive: false for harmless files like text reports. " +
119
129
  "Provide output_path to save directly to the host filesystem.", downloadFileSchema.shape, (args) => handleDownloadFile(deps, args));
120
130
  // Tool: analyze_file - Auto-analyze a file using appropriate REMnux tools
121
- server.tool("analyze_file", "Auto-analyze a file using REMnux tools appropriate for the detected file type. Runs `file` to detect type, then executes matching tools (e.g., PE → peframe/capa, PDF → pdfid/pdf-parser, Office → olevba/oleid). Use `depth` to control analysis intensity: 'quick' (triage only), 'standard' (default), 'deep' (includes expensive tools). Note: 'standard' is sufficient for most files; use 'deep' only when standard doesn't reveal enough.", analyzeFileSchema.shape, (args) => handleAnalyzeFile(deps, args));
131
+ server.tool("analyze_file", "Auto-analyze a file using REMnux tools appropriate for the detected file type. Runs `file` to detect type, then executes matching tools (e.g., PE → peframe/capa, PDF → pdfid/pdf-parser, Office → olevba/oleid). Use `depth` to control analysis intensity: 'quick' (triage only), 'standard' (default), 'deep' (includes expensive tools). Note: 'standard' is sufficient for most files; use 'deep' only when standard doesn't reveal enough. Output includes a capability_evidence field (behavior_capable vs artifact_only) and per-capa evidence_types tags so you can tell code-backed capabilities from data-only artifacts — an artifact_only match means the data is present, not that the behavior executes.", analyzeFileSchema.shape, (args) => handleAnalyzeFile(deps, args));
122
132
  // Tool: suggest_tools - Get tool recommendations for a file
123
133
  server.tool("suggest_tools", "Detect file type and return recommended REMnux analysis tools without executing them. " +
124
134
  "Use this to plan an analysis strategy, then run individual tools with run_tool. " +
125
- "Returns tool names, descriptions, depth tiers, and expert analysis hints.", suggestToolsSchema.shape, (args) => handleSuggestTools(deps, args));
135
+ "Returns tool names, descriptions, depth tiers, and expert analysis hints. " +
136
+ "For binaries, confirming a behavior (versus merely finding its artifacts) generally requires more than " +
137
+ "static analysis — plan for emulation (speakeasy) or sandbox detonation when a behavioral claim is needed.", suggestToolsSchema.shape, (args) => handleSuggestTools(deps, args));
126
138
  // Tool: extract_iocs - Extract IOCs from text
127
139
  server.tool("extract_iocs", "Extract IOCs (IPs, domains, URLs, hashes, registry keys, etc.) from text. " +
128
140
  "Pass output from run_tool or analyze_file to identify indicators. " +
129
141
  "Works well with Volatility 3 plugin output (netscan, cmdline, filescan). " +
130
- "Returns deduplicated IOCs with confidence scores.", extractIOCsSchema.shape, (args) => handleExtractIOCs(deps, args));
142
+ "Returns deduplicated IOCs with confidence scores. " +
143
+ "Note: an IOC extracted from a binary's strings is an artifact (present in the file) — not evidence the " +
144
+ "binary uses it at runtime. Cross-reference it against reachable code or dynamic analysis before treating " +
145
+ "it as an operational indicator.", extractIOCsSchema.shape, (args) => handleExtractIOCs(deps, args));
146
+ // Tool: check_behavior_prerequisites - Static gate before claiming a behavior
147
+ server.tool("check_behavior_prerequisites", "Before claiming a Windows PE performs a behavior (clipboard hijacking, HTTP/WinHTTP C2, process injection, " +
148
+ "registry/LNK persistence, browser-credential theft, screen capture, keylogging, network-share enumeration), " +
149
+ "check whether the prerequisite APIs are even accessible. Reads the static import table (readpe) and detects " +
150
+ "packing (diec), then reports a `static_capability` per behavior: capable_statically / incapable_statically / " +
151
+ "possibly_via_dynamic_resolution (GetProcAddress + loader present) / analysis_incomplete (packed, or a " +
152
+ "managed/.NET assembly whose native imports don't reflect its capability — don't read it as a clean negative) " +
153
+ "/ not_applicable (not a PE). This is a STATIC gate — it tells you whether the binary CAN call the required " +
154
+ "APIs, not whether it does. Omit `behavior` to scan all. Confirm any behavior with dynamic analysis.", checkBehaviorPrerequisitesSchema.shape, (args) => handleCheckBehaviorPrerequisites(deps, args));
155
+ // Tool: verify_string_usage - Is an embedded string referenced by code, or vestigial?
156
+ server.tool("verify_string_usage", "Check whether a string embedded in a binary is actually referenced by code, or is a vestigial artifact " +
157
+ "(e.g. a wallet address or C2 host sitting in .rdata). Uses radare2 to locate the string and find code " +
158
+ "cross-references to it. Returns a per-match `xref_status`: `referenced_from_code` (an instruction references " +
159
+ "it) / `no_code_xrefs_detected` (a COMPLETE-analysis null — NOT proof it is unused; the reference may be " +
160
+ "computed, indirect, or in code the analyzer missed) / `data_only` (non-code file) / `unknown` (analysis " +
161
+ "incomplete: packed, timed out, or version drift — never a negative). A static check: never concludes a " +
162
+ "string is 'unused', and confirm runtime use dynamically.", verifyStringUsageSchema.shape, (args) => handleVerifyStringUsage(deps, args));
163
+ // Tool: compare_files - Structured diff of two related samples
164
+ server.tool("compare_files", "Compare two related samples (e.g. a loader and its unpacked payload) and return a structured diff: size and " +
165
+ "entropy deltas, architecture, compiler, packer, imports added/removed, capabilities (capa) added/removed, and " +
166
+ "section changes. Reuses readpe/diec/capa/radare2. Use depth='quick' to skip the (slower) capa capability diff. " +
167
+ "Surfaces what each stage adds without re-running tools by hand.", compareFilesSchema.shape, (args) => handleCompareFiles(deps, args));
131
168
  // Tool: get_tool_help - Get usage help for a REMnux tool
132
169
  server.tool("get_tool_help", "Get usage help for a REMnux tool. Returns the tool's --help output " +
133
170
  "so you can understand available flags, options, and usage patterns.", getToolHelpSchema.shape, (args) => handleGetToolHelp(deps, args));
@@ -140,8 +177,10 @@ export async function createServer(config) {
140
177
  // Tool: get_report_guidance - Bundled malware analysis report writing guidelines (offline)
141
178
  server.tool("get_report_guidance", "Get malware analysis report writing guidelines bundled locally for offline use — report sections, " +
142
179
  "required fields, the MBC capability model, ICD-203 confidence, Pyramid-of-Pain IOC tiering, anti-patterns, " +
143
- "and review criteria. Use `topic` to narrow the full digest. For interactive review or numeric scoring, " +
144
- "the zeltser-website MCP server's malware_review_report / rating_score_writing offer more when connected.", getReportGuidanceSchema.shape, (args) => handleGetReportGuidance(deps, args));
180
+ "and review criteria. Use `topic` to narrow the full digest, or topic='triage_checklist' for the pre-claim " +
181
+ "triage discipline checklist (artifact-vs-behavior gates) to consult at the START of an analysis. For " +
182
+ "interactive review or numeric scoring, the zeltser-website MCP server's malware_review_report / " +
183
+ "rating_score_writing offer more when connected.", getReportGuidanceSchema.shape, (args) => handleGetReportGuidance(deps, args));
145
184
  // ── MCP Resources: Tool Registry ──────────────────────────────────────────
146
185
  // Static resource: all tools
147
186
  server.resource("tools", "remnux://tools", { description: "All registered REMnux analysis tools with metadata" }, () => ({
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gEAAgE,CAAC;AAGnG,OAAO,EAAE,eAAe,EAAwB,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,gCAAgC,EAChC,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC7G,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAe5D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAoB;IACrD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,iBAAiB,CAAwB,CAAC;IACnF,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,UAAU;KACpB,EACD;QACE,YAAY,EACV,kEAAkE;YAClE,0EAA0E;YAC1E,4EAA4E;YAC5E,iDAAiD;YACjD,8DAA8D;YAC9D,eAAe,wBAAwB,8CAA8C;YACrF,6DAA6D;YAC7D,uEAAuE;YACvE,iFAAiF;YACjF,mEAAmE;YACnE,oEAAoE;YACpE,6FAA6F;YAC7F,2GAA2G;YAC3G,oGAAoG;YACpG,uGAAuG;YACvG,6EAA6E;YAC7E,uGAAuG;YACvG,wGAAwG;YACxG,wGAAwG;YACxG,6CAA6C;KAChD,CACF,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IAEhD,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IAExC,MAAM,IAAI,GAAgB;QACxB,SAAS;QACT,MAAM,EAAE;YACN,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;YACpC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B;QACD,YAAY;KACb,CAAC;IAEF,+CAA+C;IAC/C,MAAM,CAAC,IAAI,CACT,UAAU,EACV,mGAAmG;QACnG,6GAA6G;QAC7G,8GAA8G;QAC9G,yGAAyG;QACzG,8GAA8G,EAC9G,aAAa,CAAC,KAAK,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CACpC,CAAC;IAEF,mDAAmD;IACnD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,2CAA2C,EAC3C,iBAAiB,CAAC,KAAK,EACvB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CACxC,CAAC;IAEF,+DAA+D;IAC/D,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,2CAA2C,EAC3C,eAAe,CAAC,KAAK,EACrB,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CACtC,CAAC;IAEF,iEAAiE;IACjE,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,gLAAgL,EAChL,oBAAoB,CAAC,KAAK,EAC1B,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAC3C,CAAC;IAEF,kEAAkE;IAClE,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM;YACjB,CAAC,CAAC,8GAA8G;gBAC9G,oGAAoG;gBACpG,2FAA2F;gBAC3F,+EAA+E;gBAC/E,4BAA4B;YAC9B,CAAC,CAAC,gFAAgF;gBAChF,0FAA0F;gBAC1F,4BAA4B,CAAC;QACjC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,OAAO;gBACV,OAAO,MAAM;oBACX,CAAC,CAAC,IAAI;wBACJ,qFAAqF;wBACrF,+BAA+B;oBACjC,CAAC,CAAC,IAAI;wBACJ,iGAAiG;wBACjG,0GAA0G,CAAC;YACjH,KAAK,KAAK;gBACR,OAAO,IAAI;oBACT,wDAAwD;oBACxD,gFAAgF;oBAChF,iCAAiC,CAAC;YACtC;gBACE,OAAO,IAAI;oBACT,wDAAwD;oBACxD,mCAAmC;oBACnC,yFAAyF;oBACzF,iGAAiG;oBACjG,iCAAiC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,CAAC,KAAK,EAC1B,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAC3C,CAAC;IAEF,oEAAoE;IACpE,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,sEAAsE;QACtE,2EAA2E;QAC3E,qEAAqE,EACrE,qBAAqB,CAAC,KAAK,EAC3B,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAC5C,CAAC;IAEF,kEAAkE;IAClE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,qHAAqH;QACrH,2FAA2F;QAC3F,4DAA4D;QAC5D,8DAA8D,EAC9D,kBAAkB,CAAC,KAAK,EACxB,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CACzC,CAAC;IAEF,0EAA0E;IAC1E,MAAM,CAAC,IAAI,CACT,cAAc,EACd,yrBAAyrB,EACzrB,iBAAiB,CAAC,KAAK,EACvB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CACxC,CAAC;IAEF,4DAA4D;IAC5D,MAAM,CAAC,IAAI,CACT,eAAe,EACf,wFAAwF;QACxF,kFAAkF;QAClF,4EAA4E;QAC5E,yGAAyG;QACzG,2GAA2G,EAC3G,kBAAkB,CAAC,KAAK,EACxB,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CACzC,CAAC;IAEF,8CAA8C;IAC9C,MAAM,CAAC,IAAI,CACT,cAAc,EACd,4EAA4E;QAC5E,oEAAoE;QACpE,2EAA2E;QAC3E,oDAAoD;QACpD,yGAAyG;QACzG,2GAA2G;QAC3G,iCAAiC,EACjC,iBAAiB,CAAC,KAAK,EACvB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CACxC,CAAC;IAEF,8EAA8E;IAC9E,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,6GAA6G;QAC7G,8GAA8G;QAC9G,8GAA8G;QAC9G,+GAA+G;QAC/G,wGAAwG;QACxG,+GAA+G;QAC/G,6GAA6G;QAC7G,qGAAqG,EACrG,gCAAgC,CAAC,KAAK,EACtC,CAAC,IAAI,EAAE,EAAE,CAAC,gCAAgC,CAAC,IAAI,EAAE,IAAI,CAAC,CACvD,CAAC;IAEF,sFAAsF;IACtF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,yGAAyG;QACzG,wGAAwG;QACxG,+GAA+G;QAC/G,0GAA0G;QAC1G,0GAA0G;QAC1G,yGAAyG;QACzG,0DAA0D,EAC1D,uBAAuB,CAAC,KAAK,EAC7B,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAC9C,CAAC;IAEF,+DAA+D;IAC/D,MAAM,CAAC,IAAI,CACT,eAAe,EACf,8GAA8G;QAC9G,gHAAgH;QAChH,iHAAiH;QACjH,iEAAiE,EACjE,kBAAkB,CAAC,KAAK,EACxB,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CACzC,CAAC;IAEF,yDAAyD;IACzD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,qEAAqE;QACrE,qEAAqE,EACrE,iBAAiB,CAAC,KAAK,EACvB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CACxC,CAAC;IAEF,8CAA8C;IAC9C,MAAM,CAAC,IAAI,CACT,aAAa,EACb,iJAAiJ,EACjJ,gBAAgB,CAAC,KAAK,EACtB,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAC7B,CAAC;IAEF,iFAAiF;IACjF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,qFAAqF;QACrF,uGAAuG;QACvG,yIAAyI,EACzI,uBAAuB,CAAC,KAAK,EAC7B,GAAG,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CACpC,CAAC;IAEF,2FAA2F;IAC3F,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,oGAAoG;QACpG,6GAA6G;QAC7G,4GAA4G;QAC5G,uGAAuG;QACvG,kGAAkG;QAClG,iDAAiD,EACjD,uBAAuB,CAAC,KAAK,EAC7B,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAC9C,CAAC;IAEF,6EAA6E;IAE7E,6BAA6B;IAC7B,MAAM,CAAC,QAAQ,CACb,OAAO,EACP,gBAAgB,EAChB,EAAE,WAAW,EAAE,oDAAoD,EAAE,EACrE,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,CAAC;gBACT,GAAG,EAAE,gBAAgB;gBACrB,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAClD,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;iBACnB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aACd,CAAC;KACH,CAAC,CACH,CAAC;IAEF,kCAAkC;IAClC,MAAM,CAAC,QAAQ,CACb,cAAc,EACd,IAAI,gBAAgB,CAAC,6BAA6B,EAAE;QAClD,IAAI,EAAE,GAAG,EAAE;YACT,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC;gBACnC,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE;oBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChD,CAAC;YACD,OAAO;gBACL,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACxC,GAAG,EAAE,yBAAyB,GAAG,EAAE;oBACnC,IAAI,EAAE,iBAAiB,GAAG,GAAG;iBAC9B,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;KACF,CAAC,EACF,EAAE,WAAW,EAAE,oDAAoD,EAAE,EACrE,CAAC,GAAQ,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,CAAC;oBACT,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACrC,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;qBACnB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;iBACd,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,yCAAyC;IACzC,MAAM,CAAC,QAAQ,CACb,cAAc,EACd,IAAI,gBAAgB,CAAC,uBAAuB,EAAE;QAC5C,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACX,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,GAAG,EAAE,kBAAkB,CAAC,CAAC,IAAI,EAAE;gBAC/B,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC;SACJ,CAAC;KACH,CAAC,EACF,EAAE,WAAW,EAAE,oCAAoC,EAAE,EACrD,CAAC,GAAQ,EAAE,EAAE;QACX,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,IAAI,aAAa,EAAE,CAAC,EAAE,CAAC;QACrG,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,CAAC;oBACT,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;qBACtB,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,8EAA8E;IAE9E,MAAM,CAAC,QAAQ,CACb,iBAAiB,EACjB,0BAA0B,EAC1B,EAAE,WAAW,EAAE,0EAA0E,EAAE,EAC3F,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,CAAC;gBACT,GAAG,EAAE,0BAA0B;gBAC/B,QAAQ,EAAE,eAAe;gBACzB,IAAI,EAAE,eAAe;aACtB,CAAC;KACH,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,QAAQ,CACb,mBAAmB,EACnB,4BAA4B,EAC5B,EAAE,WAAW,EAAE,qEAAqE,EAAE,EACtF,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,CAAC;gBACT,GAAG,EAAE,4BAA4B;gBACjC,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,EAChF,IAAI,EACJ,CAAC,CACF;aACF,CAAC;KACH,CAAC,CACH,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAoB;IACpD,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC;IAElD,sFAAsF;IACtF,wFAAwF;IACxF,2FAA2F;IAC3F,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;IAC/C,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC3F,OAAO,CAAC,KAAK,CACX,uBAAuB,MAAM,CAAC,IAAI,mDAAmD;YACrF,2FAA2F,CAC5F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAAG,SAAS;YACxB,CAAC,CAAC,kCAAkC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,GAAG;YAC7E,CAAC,CAAC,8BAA8B,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAoB;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,WAAW,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;IAE/B,8EAA8E;IAC9E,8EAA8E;IAC9E,gFAAgF;IAChF,iFAAiF;IACjF,yCAAyC;IACzC,IAAI,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnE,OAAO,CAAC,KAAK,CACX,gEAAgE,IAAI,2BAA2B;YAC/F,yHAAyH,CAC1H,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,+BAA+B;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAuB;YACnC,KAAK,CAAC,iBAAiB,CAAC,CAAS;gBAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACzF,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;YAC/G,CAAC;SACF,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CACX,8FAA8F,CAC/F,CAAC;IACJ,CAAC;IAED,uFAAuF;IACvF,MAAM,YAAY,GAAG,GAAG,CAAC;IACzB,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IACzD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyC,CAAC;IAClE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEvE,SAAS,iBAAiB,CAAC,SAAiB;QAC1C,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,QAAQ;YAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QACrC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE;YAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;gBACpB,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YACD,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,8DAA8D;IAC9D,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAQ,EAAE,GAAQ,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;YAEtE,oDAAoD;YACpD,IAAI,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;gBAC3C,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAC7B,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YAED,IAAI,QAAQ,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;gBAClC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;gBACvG,OAAO;YACT,CAAC;YAED,2CAA2C;YAC3C,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;gBAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;aACvC,CAAC,CAAC;YAEH,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;gBACvB,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;oBACxB,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBACrC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBACrD,IAAI,KAAK,EAAE,CAAC;wBACV,YAAY,CAAC,KAAK,CAAC,CAAC;wBACpB,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAEhC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAElD,qEAAqE;YACrE,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBACxB,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAC7C,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;QAC3C,CAAC,CAAC,kCAAkC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,GAAG;QAC7E,CAAC,CAAC,8BAA8B,CAAC;IACnC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;YAC1B,OAAO,CAAC,KAAK,CACX,4BAA4B,QAAQ,WAAW,UAAU,cAAc,IAAI,IAAI,IAAI,MAAM,CAC1F,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -4,6 +4,13 @@
4
4
  * Extracts capabilities and their associated ATT&CK techniques.
5
5
  * Expects JSON output from `capa -j <file>`.
6
6
  */
7
- import type { ParsedToolOutput } from "./types.js";
7
+ import type { ParsedToolOutput, EvidenceType } from "./types.js";
8
+ /**
9
+ * Derive the evidence_types set for a single capa rule from the feature nodes
10
+ * that actually matched, plus two unambiguous namespace signals. Returns
11
+ * undefined when nothing can be determined (the caller then omits the field).
12
+ * Never throws — a malformed rule yields undefined, never a lost finding.
13
+ */
14
+ export declare function deriveEvidenceTypes(rule: Record<string, unknown>): EvidenceType[] | undefined;
8
15
  export declare function parseCapaOutput(rawOutput: string): ParsedToolOutput;
9
16
  //# sourceMappingURL=capa.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capa.d.ts","sourceRoot":"","sources":["../../src/parsers/capa.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,YAAY,CAAC;AAE5D,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CA+DnE"}
1
+ {"version":3,"file":"capa.d.ts","sourceRoot":"","sources":["../../src/parsers/capa.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAW,YAAY,EAAE,MAAM,YAAY,CAAC;AAgG1E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,SAAS,CA4B7F;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAsEnE"}