@remnux/mcp-server 0.1.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.
Files changed (220) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +720 -0
  3. package/dist/archive-extractor.d.ts +46 -0
  4. package/dist/archive-extractor.d.ts.map +1 -0
  5. package/dist/archive-extractor.js +268 -0
  6. package/dist/archive-extractor.js.map +1 -0
  7. package/dist/catalog/index.d.ts +40 -0
  8. package/dist/catalog/index.d.ts.map +1 -0
  9. package/dist/catalog/index.js +114 -0
  10. package/dist/catalog/index.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +154 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config/archive-passwords.txt +3 -0
  16. package/dist/connectors/docker.d.ts +13 -0
  17. package/dist/connectors/docker.d.ts.map +1 -0
  18. package/dist/connectors/docker.js +201 -0
  19. package/dist/connectors/docker.js.map +1 -0
  20. package/dist/connectors/index.d.ts +27 -0
  21. package/dist/connectors/index.d.ts.map +1 -0
  22. package/dist/connectors/index.js +23 -0
  23. package/dist/connectors/index.js.map +1 -0
  24. package/dist/connectors/local.d.ts +10 -0
  25. package/dist/connectors/local.d.ts.map +1 -0
  26. package/dist/connectors/local.js +105 -0
  27. package/dist/connectors/local.js.map +1 -0
  28. package/dist/connectors/ssh.d.ts +21 -0
  29. package/dist/connectors/ssh.d.ts.map +1 -0
  30. package/dist/connectors/ssh.js +237 -0
  31. package/dist/connectors/ssh.js.map +1 -0
  32. package/dist/errors/error-mapper.d.ts +9 -0
  33. package/dist/errors/error-mapper.d.ts.map +1 -0
  34. package/dist/errors/error-mapper.js +24 -0
  35. package/dist/errors/error-mapper.js.map +1 -0
  36. package/dist/errors/remnux-error.d.ts +14 -0
  37. package/dist/errors/remnux-error.d.ts.map +1 -0
  38. package/dist/errors/remnux-error.js +19 -0
  39. package/dist/errors/remnux-error.js.map +1 -0
  40. package/dist/file-type-mappings.d.ts +30 -0
  41. package/dist/file-type-mappings.d.ts.map +1 -0
  42. package/dist/file-type-mappings.js +136 -0
  43. package/dist/file-type-mappings.js.map +1 -0
  44. package/dist/file-upload.d.ts +44 -0
  45. package/dist/file-upload.d.ts.map +1 -0
  46. package/dist/file-upload.js +170 -0
  47. package/dist/file-upload.js.map +1 -0
  48. package/dist/handlers/analyze-file.d.ts +10 -0
  49. package/dist/handlers/analyze-file.d.ts.map +1 -0
  50. package/dist/handlers/analyze-file.js +149 -0
  51. package/dist/handlers/analyze-file.js.map +1 -0
  52. package/dist/handlers/check-tools.d.ts +9 -0
  53. package/dist/handlers/check-tools.d.ts.map +1 -0
  54. package/dist/handlers/check-tools.js +47 -0
  55. package/dist/handlers/check-tools.js.map +1 -0
  56. package/dist/handlers/download-file.d.ts +10 -0
  57. package/dist/handlers/download-file.d.ts.map +1 -0
  58. package/dist/handlers/download-file.js +113 -0
  59. package/dist/handlers/download-file.js.map +1 -0
  60. package/dist/handlers/download-from-url.d.ts +30 -0
  61. package/dist/handlers/download-from-url.d.ts.map +1 -0
  62. package/dist/handlers/download-from-url.js +295 -0
  63. package/dist/handlers/download-from-url.js.map +1 -0
  64. package/dist/handlers/extract-archive.d.ts +10 -0
  65. package/dist/handlers/extract-archive.d.ts.map +1 -0
  66. package/dist/handlers/extract-archive.js +57 -0
  67. package/dist/handlers/extract-archive.js.map +1 -0
  68. package/dist/handlers/extract-iocs.d.ts +10 -0
  69. package/dist/handlers/extract-iocs.d.ts.map +1 -0
  70. package/dist/handlers/extract-iocs.js +21 -0
  71. package/dist/handlers/extract-iocs.js.map +1 -0
  72. package/dist/handlers/get-file-info.d.ts +10 -0
  73. package/dist/handlers/get-file-info.d.ts.map +1 -0
  74. package/dist/handlers/get-file-info.js +89 -0
  75. package/dist/handlers/get-file-info.js.map +1 -0
  76. package/dist/handlers/list-files.d.ts +10 -0
  77. package/dist/handlers/list-files.d.ts.map +1 -0
  78. package/dist/handlers/list-files.js +60 -0
  79. package/dist/handlers/list-files.js.map +1 -0
  80. package/dist/handlers/run-tool.d.ts +10 -0
  81. package/dist/handlers/run-tool.d.ts.map +1 -0
  82. package/dist/handlers/run-tool.js +99 -0
  83. package/dist/handlers/run-tool.js.map +1 -0
  84. package/dist/handlers/suggest-tools.d.ts +10 -0
  85. package/dist/handlers/suggest-tools.d.ts.map +1 -0
  86. package/dist/handlers/suggest-tools.js +202 -0
  87. package/dist/handlers/suggest-tools.js.map +1 -0
  88. package/dist/handlers/types.d.ts +15 -0
  89. package/dist/handlers/types.d.ts.map +1 -0
  90. package/dist/handlers/types.js +2 -0
  91. package/dist/handlers/types.js.map +1 -0
  92. package/dist/handlers/upload-file.d.ts +10 -0
  93. package/dist/handlers/upload-file.d.ts.map +1 -0
  94. package/dist/handlers/upload-file.js +33 -0
  95. package/dist/handlers/upload-file.js.map +1 -0
  96. package/dist/handlers/upload-from-host.d.ts +10 -0
  97. package/dist/handlers/upload-from-host.d.ts.map +1 -0
  98. package/dist/handlers/upload-from-host.js +33 -0
  99. package/dist/handlers/upload-from-host.js.map +1 -0
  100. package/dist/handlers/upload-sample.d.ts +10 -0
  101. package/dist/handlers/upload-sample.d.ts.map +1 -0
  102. package/dist/handlers/upload-sample.js +26 -0
  103. package/dist/handlers/upload-sample.js.map +1 -0
  104. package/dist/index.d.ts +15 -0
  105. package/dist/index.d.ts.map +1 -0
  106. package/dist/index.js +254 -0
  107. package/dist/index.js.map +1 -0
  108. package/dist/ioc/extractor.d.ts +21 -0
  109. package/dist/ioc/extractor.d.ts.map +1 -0
  110. package/dist/ioc/extractor.js +91 -0
  111. package/dist/ioc/extractor.js.map +1 -0
  112. package/dist/ioc/known-values.d.ts +7 -0
  113. package/dist/ioc/known-values.d.ts.map +1 -0
  114. package/dist/ioc/known-values.js +43 -0
  115. package/dist/ioc/known-values.js.map +1 -0
  116. package/dist/ioc/noise.d.ts +6 -0
  117. package/dist/ioc/noise.d.ts.map +1 -0
  118. package/dist/ioc/noise.js +170 -0
  119. package/dist/ioc/noise.js.map +1 -0
  120. package/dist/ioc/patterns.d.ts +10 -0
  121. package/dist/ioc/patterns.d.ts.map +1 -0
  122. package/dist/ioc/patterns.js +65 -0
  123. package/dist/ioc/patterns.js.map +1 -0
  124. package/dist/ioc/scoring.d.ts +6 -0
  125. package/dist/ioc/scoring.d.ts.map +1 -0
  126. package/dist/ioc/scoring.js +69 -0
  127. package/dist/ioc/scoring.js.map +1 -0
  128. package/dist/parsers/capa.d.ts +9 -0
  129. package/dist/parsers/capa.d.ts.map +1 -0
  130. package/dist/parsers/capa.js +55 -0
  131. package/dist/parsers/capa.js.map +1 -0
  132. package/dist/parsers/diec.d.ts +9 -0
  133. package/dist/parsers/diec.d.ts.map +1 -0
  134. package/dist/parsers/diec.js +53 -0
  135. package/dist/parsers/diec.js.map +1 -0
  136. package/dist/parsers/floss.d.ts +14 -0
  137. package/dist/parsers/floss.d.ts.map +1 -0
  138. package/dist/parsers/floss.js +89 -0
  139. package/dist/parsers/floss.js.map +1 -0
  140. package/dist/parsers/index.d.ts +16 -0
  141. package/dist/parsers/index.d.ts.map +1 -0
  142. package/dist/parsers/index.js +46 -0
  143. package/dist/parsers/index.js.map +1 -0
  144. package/dist/parsers/oleid.d.ts +8 -0
  145. package/dist/parsers/oleid.d.ts.map +1 -0
  146. package/dist/parsers/oleid.js +94 -0
  147. package/dist/parsers/oleid.js.map +1 -0
  148. package/dist/parsers/olevba.d.ts +8 -0
  149. package/dist/parsers/olevba.d.ts.map +1 -0
  150. package/dist/parsers/olevba.js +83 -0
  151. package/dist/parsers/olevba.js.map +1 -0
  152. package/dist/parsers/passthrough.d.ts +6 -0
  153. package/dist/parsers/passthrough.d.ts.map +1 -0
  154. package/dist/parsers/passthrough.js +13 -0
  155. package/dist/parsers/passthrough.js.map +1 -0
  156. package/dist/parsers/pdf-parser.d.ts +9 -0
  157. package/dist/parsers/pdf-parser.d.ts.map +1 -0
  158. package/dist/parsers/pdf-parser.js +76 -0
  159. package/dist/parsers/pdf-parser.js.map +1 -0
  160. package/dist/parsers/pdfid.d.ts +9 -0
  161. package/dist/parsers/pdfid.d.ts.map +1 -0
  162. package/dist/parsers/pdfid.js +56 -0
  163. package/dist/parsers/pdfid.js.map +1 -0
  164. package/dist/parsers/peframe.d.ts +8 -0
  165. package/dist/parsers/peframe.d.ts.map +1 -0
  166. package/dist/parsers/peframe.js +76 -0
  167. package/dist/parsers/peframe.js.map +1 -0
  168. package/dist/parsers/readelf.d.ts +8 -0
  169. package/dist/parsers/readelf.d.ts.map +1 -0
  170. package/dist/parsers/readelf.js +50 -0
  171. package/dist/parsers/readelf.js.map +1 -0
  172. package/dist/parsers/types.d.ts +30 -0
  173. package/dist/parsers/types.d.ts.map +1 -0
  174. package/dist/parsers/types.js +5 -0
  175. package/dist/parsers/types.js.map +1 -0
  176. package/dist/parsers/yara.d.ts +8 -0
  177. package/dist/parsers/yara.d.ts.map +1 -0
  178. package/dist/parsers/yara.js +88 -0
  179. package/dist/parsers/yara.js.map +1 -0
  180. package/dist/response.d.ts +44 -0
  181. package/dist/response.d.ts.map +1 -0
  182. package/dist/response.js +48 -0
  183. package/dist/response.js.map +1 -0
  184. package/dist/schemas/tools.d.ts +135 -0
  185. package/dist/schemas/tools.d.ts.map +1 -0
  186. package/dist/schemas/tools.js +53 -0
  187. package/dist/schemas/tools.js.map +1 -0
  188. package/dist/security/blocklist.d.ts +69 -0
  189. package/dist/security/blocklist.d.ts.map +1 -0
  190. package/dist/security/blocklist.js +148 -0
  191. package/dist/security/blocklist.js.map +1 -0
  192. package/dist/state/session.d.ts +35 -0
  193. package/dist/state/session.d.ts.map +1 -0
  194. package/dist/state/session.js +45 -0
  195. package/dist/state/session.js.map +1 -0
  196. package/dist/tools/definitions.d.ts +9 -0
  197. package/dist/tools/definitions.d.ts.map +1 -0
  198. package/dist/tools/definitions.js +708 -0
  199. package/dist/tools/definitions.js.map +1 -0
  200. package/dist/tools/invoker.d.ts +17 -0
  201. package/dist/tools/invoker.d.ts.map +1 -0
  202. package/dist/tools/invoker.js +44 -0
  203. package/dist/tools/invoker.js.map +1 -0
  204. package/dist/tools/registry.d.ts +62 -0
  205. package/dist/tools/registry.d.ts.map +1 -0
  206. package/dist/tools/registry.js +53 -0
  207. package/dist/tools/registry.js.map +1 -0
  208. package/dist/workflows/engine.d.ts +27 -0
  209. package/dist/workflows/engine.d.ts.map +1 -0
  210. package/dist/workflows/engine.js +224 -0
  211. package/dist/workflows/engine.js.map +1 -0
  212. package/dist/workflows/loader.d.ts +33 -0
  213. package/dist/workflows/loader.d.ts.map +1 -0
  214. package/dist/workflows/loader.js +130 -0
  215. package/dist/workflows/loader.js.map +1 -0
  216. package/dist/workflows/types.d.ts +109 -0
  217. package/dist/workflows/types.d.ts.map +1 -0
  218. package/dist/workflows/types.js +5 -0
  219. package/dist/workflows/types.js.map +1 -0
  220. package/package.json +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noise.js","sourceRoot":"","sources":["../../src/ioc/noise.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Custom regex patterns for IOC types not covered by ioc-extractor.
3
+ * Covers registry keys and Windows file paths common in malware analysis.
4
+ */
5
+ export interface PatternMatch {
6
+ value: string;
7
+ type: string;
8
+ }
9
+ export declare function extractCustomPatterns(text: string): PatternMatch[];
10
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/ioc/patterns.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AA4CD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAyClE"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Custom regex patterns for IOC types not covered by ioc-extractor.
3
+ * Covers registry keys and Windows file paths common in malware analysis.
4
+ */
5
+ // Trailing-punctuation chars that are likely sentence terminators, not part of the IOC
6
+ const TRAIL_CLEAN_RE = /[.)}\]]+$/;
7
+ const REGISTRY_KEY_RE = /\b(HK(?:LM|CU|CR|U|CC|EY_LOCAL_MACHINE|EY_CURRENT_USER|EY_CLASSES_ROOT|EY_USERS|EY_CURRENT_CONFIG)\\[^\s"',;|&<>]+)/gi;
8
+ const WINDOWS_PATH_RE = /\b([A-Z]:\\(?:[^\s"',;|&<>]+\\)*[^\s"',;|&<>]+)/gi;
9
+ const ENV_PATH_RE = /(%[A-Z_]+%\\[^\s"',;|&<>]+)/gi;
10
+ /** Well-known LOLBins and suspicious executables seen in malware. */
11
+ const LOLBINS = new Set([
12
+ "fodhelper.exe", "mshta.exe", "regsvr32.exe", "rundll32.exe",
13
+ "certutil.exe", "bitsadmin.exe", "msiexec.exe", "wscript.exe",
14
+ "cscript.exe", "wmic.exe", "schtasks.exe", "sc.exe",
15
+ "net.exe", "net1.exe", "netsh.exe", "attrib.exe",
16
+ "icacls.exe", "bcdedit.exe", "vssadmin.exe",
17
+ "cmd.exe", "powershell.exe", "pwsh.exe",
18
+ "mimikatz.exe", "psexec.exe", "procdump.exe",
19
+ ]);
20
+ const SUSPICIOUS_EXE_RE = /\b([a-zA-Z0-9_\-]+\.exe)\b/gi;
21
+ /** PowerShell cmdlets commonly abused by malware. */
22
+ const POWERSHELL_CMDLET_RE = /\b(Invoke-Expression|Invoke-WebRequest|Invoke-Mimikatz|Invoke-Command|Start-Process|New-Object|Set-MpPreference|Add-MpPreference|Disable-WindowsOptionalFeature|Set-ExecutionPolicy|ConvertTo-SecureString|Import-Module|Get-WmiObject|Invoke-WmiMethod|New-Service|Set-ItemProperty|Get-Process|Stop-Process|Remove-Item|Get-Credential|IEX|IWR|ICM)\b/g;
23
+ /** Network port patterns: "port 4444", ":4444", etc. */
24
+ const NETWORK_PORT_RE = /\bport\s+(\d{1,5})\b/gi;
25
+ /** PDB paths that reveal developer usernames. */
26
+ const PDB_USERNAME_RE = /[A-Z]:\\Users\\([^\\]+)\\.*\.pdb/gi;
27
+ /** Strip trailing sentence punctuation that regex over-captures. */
28
+ function cleanTrailing(value) {
29
+ return value.replace(TRAIL_CLEAN_RE, "");
30
+ }
31
+ export function extractCustomPatterns(text) {
32
+ const results = [];
33
+ for (const m of text.matchAll(REGISTRY_KEY_RE)) {
34
+ results.push({ value: cleanTrailing(m[1]), type: "registry_key" });
35
+ }
36
+ for (const m of text.matchAll(WINDOWS_PATH_RE)) {
37
+ results.push({ value: cleanTrailing(m[1]), type: "windows_path" });
38
+ }
39
+ for (const m of text.matchAll(ENV_PATH_RE)) {
40
+ results.push({ value: cleanTrailing(m[1]), type: "windows_path" });
41
+ }
42
+ // Suspicious executables (LOLBins + known attack tools)
43
+ for (const m of text.matchAll(SUSPICIOUS_EXE_RE)) {
44
+ if (LOLBINS.has(m[1].toLowerCase())) {
45
+ results.push({ value: m[1].toLowerCase(), type: "suspicious_executable" });
46
+ }
47
+ }
48
+ // PowerShell cmdlets
49
+ for (const m of text.matchAll(POWERSHELL_CMDLET_RE)) {
50
+ results.push({ value: m[1], type: "powershell_cmdlet" });
51
+ }
52
+ // Network ports
53
+ for (const m of text.matchAll(NETWORK_PORT_RE)) {
54
+ const port = parseInt(m[1], 10);
55
+ if (port > 0 && port <= 65535) {
56
+ results.push({ value: String(port), type: "network_port" });
57
+ }
58
+ }
59
+ // PDB path usernames
60
+ for (const m of text.matchAll(PDB_USERNAME_RE)) {
61
+ results.push({ value: m[1], type: "pdb_username" });
62
+ }
63
+ return results;
64
+ }
65
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/ioc/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Simple confidence scoring for extracted IOCs.
3
+ * Higher scores indicate more specificity / likely malicious relevance.
4
+ */
5
+ export declare function scoreIOC(value: string, type: string): number;
6
+ //# sourceMappingURL=scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/ioc/scoring.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA2E5D"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Simple confidence scoring for extracted IOCs.
3
+ * Higher scores indicate more specificity / likely malicious relevance.
4
+ */
5
+ import { PRIVATE_IP_PREFIXES, KNOWN_GOOD_DOMAIN_SUFFIXES } from "./known-values.js";
6
+ export function scoreIOC(value, type) {
7
+ switch (type) {
8
+ case "md5":
9
+ case "sha1":
10
+ case "sha256":
11
+ case "sha512":
12
+ case "ssdeep":
13
+ return 0.8;
14
+ case "url":
15
+ // URLs with paths are more specific
16
+ try {
17
+ const u = new URL(value.startsWith("http") ? value : `http://${value}`);
18
+ return u.pathname.length > 1 ? 0.6 : 0.4;
19
+ }
20
+ catch {
21
+ return 0.5;
22
+ }
23
+ case "domain": {
24
+ const lower = value.toLowerCase();
25
+ if (KNOWN_GOOD_DOMAIN_SUFFIXES.some((s) => lower === s || lower.endsWith("." + s))) {
26
+ return 0.1;
27
+ }
28
+ return 0.5;
29
+ }
30
+ case "ipv4": {
31
+ if (PRIVATE_IP_PREFIXES.some((p) => value.startsWith(p))) {
32
+ return 0.2;
33
+ }
34
+ return 0.5;
35
+ }
36
+ case "ipv6":
37
+ return 0.5;
38
+ case "email":
39
+ return 0.4;
40
+ case "cve":
41
+ return 0.7;
42
+ case "registry_key":
43
+ return 0.7;
44
+ case "windows_path":
45
+ return 0.5;
46
+ case "suspicious_executable":
47
+ return 0.8;
48
+ case "powershell_cmdlet":
49
+ return 0.7;
50
+ case "network_port": {
51
+ const port = parseInt(value, 10);
52
+ if ([80, 443, 22, 53, 8080, 8443].includes(port))
53
+ return 0.3;
54
+ return 0.6;
55
+ }
56
+ case "pdb_username":
57
+ return 0.7;
58
+ case "btc":
59
+ case "eth":
60
+ case "xmr":
61
+ return 0.8;
62
+ case "asn":
63
+ case "mac":
64
+ return 0.4;
65
+ default:
66
+ return 0.5;
67
+ }
68
+ }
69
+ //# sourceMappingURL=scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/ioc/scoring.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAEpF,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,IAAY;IAClD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC;QAEb,KAAK,KAAK;YACR,oCAAoC;YACpC,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;gBACxE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,CAAC;YACb,CAAC;QAEH,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,OAAO,GAAG,CAAC;YACb,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,OAAO,GAAG,CAAC;YACb,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,MAAM;YACT,OAAO,GAAG,CAAC;QAEb,KAAK,OAAO;YACV,OAAO,GAAG,CAAC;QAEb,KAAK,KAAK;YACR,OAAO,GAAG,CAAC;QAEb,KAAK,cAAc;YACjB,OAAO,GAAG,CAAC;QAEb,KAAK,cAAc;YACjB,OAAO,GAAG,CAAC;QAEb,KAAK,uBAAuB;YAC1B,OAAO,GAAG,CAAC;QAEb,KAAK,mBAAmB;YACtB,OAAO,GAAG,CAAC;QAEb,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,GAAG,CAAC;YAC7D,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,cAAc;YACjB,OAAO,GAAG,CAAC;QAEb,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACR,OAAO,GAAG,CAAC;QAEb,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACR,OAAO,GAAG,CAAC;QAEb;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parser for CAPA JSON output.
3
+ *
4
+ * Extracts capabilities and their associated ATT&CK techniques.
5
+ * Expects JSON output from `capa -j <file>`.
6
+ */
7
+ import type { ParsedToolOutput } from "./types.js";
8
+ export declare function parseCapaOutput(rawOutput: string): ParsedToolOutput;
9
+ //# sourceMappingURL=capa.d.ts.map
@@ -0,0 +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,CAmDnE"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Parser for CAPA JSON output.
3
+ *
4
+ * Extracts capabilities and their associated ATT&CK techniques.
5
+ * Expects JSON output from `capa -j <file>`.
6
+ */
7
+ export function parseCapaOutput(rawOutput) {
8
+ const result = {
9
+ tool: "capa-json",
10
+ parsed: false,
11
+ findings: [],
12
+ metadata: {},
13
+ raw: rawOutput,
14
+ };
15
+ try {
16
+ const data = JSON.parse(rawOutput);
17
+ result.parsed = true;
18
+ // Extract rules/capabilities
19
+ const rules = data.rules;
20
+ if (rules && typeof rules === "object" && !Array.isArray(rules)) {
21
+ for (const [name, rule] of Object.entries(rules)) {
22
+ if (!rule || typeof rule !== "object")
23
+ continue;
24
+ const r = rule;
25
+ const meta = r.meta;
26
+ const finding = {
27
+ description: name,
28
+ category: "capability",
29
+ severity: "info",
30
+ };
31
+ // Extract ATT&CK info if present — validate array structure
32
+ if (meta && typeof meta === "object" && !Array.isArray(meta)) {
33
+ const m = meta;
34
+ if (Array.isArray(m.attack) && m.attack.length > 0) {
35
+ finding.evidence = m.attack
36
+ .filter((a) => a && typeof a === "object")
37
+ .map((a) => `${a.technique ?? "?"} (${a.id ?? "?"})`)
38
+ .join(", ");
39
+ }
40
+ }
41
+ result.findings.push(finding);
42
+ }
43
+ }
44
+ // Extract metadata
45
+ if (data.meta && typeof data.meta === "object") {
46
+ result.metadata.sample = data.meta.sample;
47
+ result.metadata.analysis = data.meta.analysis;
48
+ }
49
+ }
50
+ catch {
51
+ // JSON parse failed — return unparsed
52
+ }
53
+ return result;
54
+ }
55
+ //# sourceMappingURL=capa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capa.js","sourceRoot":"","sources":["../../src/parsers/capa.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,MAAM,GAAqB;QAC/B,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,GAAG,EAAE,SAAS;KACf,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QAErB,6BAA6B;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;oBAAE,SAAS;gBAChD,MAAM,CAAC,GAAG,IAA+B,CAAC;gBAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;gBACpB,MAAM,OAAO,GAAY;oBACvB,WAAW,EAAE,IAAI;oBACjB,QAAQ,EAAE,YAAY;oBACtB,QAAQ,EAAE,MAAM;iBACjB,CAAC;gBAEF,4DAA4D;gBAC5D,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7D,MAAM,CAAC,GAAG,IAA+B,CAAC;oBAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACnD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM;6BACxB,MAAM,CAAC,CAAC,CAAC,EAA+B,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;6BACtE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC;6BACpD,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC;gBAED,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parser for Detect It Easy (diec) JSON output.
3
+ *
4
+ * Extracts packer/compiler/linker detections.
5
+ * Expects JSON output from `diec --json <file>`.
6
+ */
7
+ import type { ParsedToolOutput } from "./types.js";
8
+ export declare function parseDiecOutput(rawOutput: string): ParsedToolOutput;
9
+ //# sourceMappingURL=diec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diec.d.ts","sourceRoot":"","sources":["../../src/parsers/diec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,YAAY,CAAC;AAE5D,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CA8CnE"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Parser for Detect It Easy (diec) JSON output.
3
+ *
4
+ * Extracts packer/compiler/linker detections.
5
+ * Expects JSON output from `diec --json <file>`.
6
+ */
7
+ export function parseDiecOutput(rawOutput) {
8
+ const result = {
9
+ tool: "diec",
10
+ parsed: false,
11
+ findings: [],
12
+ metadata: {},
13
+ raw: rawOutput,
14
+ };
15
+ try {
16
+ const data = JSON.parse(rawOutput);
17
+ result.parsed = true;
18
+ // diec JSON has a "detects" array
19
+ const detects = Array.isArray(data) ? data : data?.detects;
20
+ if (Array.isArray(detects)) {
21
+ for (const detect of detects) {
22
+ if (!detect || typeof detect !== "object")
23
+ continue;
24
+ const values = detect.values;
25
+ if (Array.isArray(values)) {
26
+ for (const v of values) {
27
+ if (!v || typeof v !== "object")
28
+ continue;
29
+ const vType = typeof v.type === "string" ? v.type : "detection";
30
+ const vName = typeof v.name === "string" ? v.name : "unknown";
31
+ const finding = {
32
+ description: `${vType}: ${vName}`,
33
+ category: vType.toLowerCase(),
34
+ severity: "info",
35
+ };
36
+ if (typeof v.version === "string") {
37
+ finding.evidence = `version: ${v.version}`;
38
+ }
39
+ result.findings.push(finding);
40
+ }
41
+ }
42
+ }
43
+ }
44
+ if (data && typeof data === "object" && !Array.isArray(data)) {
45
+ result.metadata.filetype = data.filetype;
46
+ }
47
+ }
48
+ catch {
49
+ // JSON parse failed — return unparsed
50
+ }
51
+ return result;
52
+ }
53
+ //# sourceMappingURL=diec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diec.js","sourceRoot":"","sources":["../../src/parsers/diec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,MAAM,GAAqB;QAC/B,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,GAAG,EAAE,SAAS;KACf,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QAErB,kCAAkC;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC;QAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;oBAAE,SAAS;gBACpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;wBACvB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;4BAAE,SAAS;wBAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;wBAChE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;wBAC9D,MAAM,OAAO,GAAY;4BACvB,WAAW,EAAE,GAAG,KAAK,KAAK,KAAK,EAAE;4BACjC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE;4BAC7B,QAAQ,EAAE,MAAM;yBACjB,CAAC;wBACF,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;4BAClC,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;wBAC7C,CAAC;wBACD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Parser for FLOSS (FireEye Labs Obfuscated String Solver) output.
3
+ *
4
+ * Sections: FLOSS static strings, FLOSS decoded strings, FLOSS stack strings, FLOSS tight strings.
5
+ * For packed samples: omit static strings, prioritize decoded/stack/tight.
6
+ * For unpacked: cap static strings at top 100.
7
+ */
8
+ import type { ParsedToolOutput } from "./types.js";
9
+ export interface FlossParserOptions {
10
+ /** Whether the sample was detected as packed (omits static strings). */
11
+ packed?: boolean;
12
+ }
13
+ export declare function parseFlossOutput(rawOutput: string, options?: FlossParserOptions): ParsedToolOutput;
14
+ //# sourceMappingURL=floss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floss.d.ts","sourceRoot":"","sources":["../../src/parsers/floss.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAenD,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC/B,gBAAgB,CA6ElB"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Parser for FLOSS (FireEye Labs Obfuscated String Solver) output.
3
+ *
4
+ * Sections: FLOSS static strings, FLOSS decoded strings, FLOSS stack strings, FLOSS tight strings.
5
+ * For packed samples: omit static strings, prioritize decoded/stack/tight.
6
+ * For unpacked: cap static strings at top 100.
7
+ */
8
+ const SECTION_HEADERS = {
9
+ "floss static strings": "static",
10
+ "floss decoded strings": "decoded",
11
+ "floss stack strings": "stack",
12
+ "floss tight strings": "tight",
13
+ "static strings": "static",
14
+ "decoded strings": "decoded",
15
+ "stack strings": "stack",
16
+ "tight strings": "tight",
17
+ };
18
+ const STATIC_CAP = 100;
19
+ export function parseFlossOutput(rawOutput, options = {}) {
20
+ const result = {
21
+ tool: "floss",
22
+ parsed: false,
23
+ findings: [],
24
+ metadata: {},
25
+ raw: rawOutput,
26
+ };
27
+ const sections = {
28
+ static: [],
29
+ decoded: [],
30
+ stack: [],
31
+ tight: [],
32
+ };
33
+ let currentSection = "";
34
+ const lines = rawOutput.split("\n");
35
+ for (const line of lines) {
36
+ const trimmed = line.trim();
37
+ // Check for section headers (case-insensitive)
38
+ const lower = trimmed.toLowerCase();
39
+ // Match "─── FLOSS DECODED STRINGS ───" or "FLOSS DECODED STRINGS" or just "DECODED STRINGS"
40
+ const stripped = lower.replace(/[─━═\-]/g, "").trim();
41
+ if (SECTION_HEADERS[stripped]) {
42
+ currentSection = SECTION_HEADERS[stripped];
43
+ continue;
44
+ }
45
+ // Skip decorative lines
46
+ if (/^[─━═\-]+$/.test(trimmed))
47
+ continue;
48
+ if (!trimmed)
49
+ continue;
50
+ if (currentSection && sections[currentSection]) {
51
+ sections[currentSection].push(trimmed);
52
+ }
53
+ }
54
+ const counts = {};
55
+ for (const [section, strings] of Object.entries(sections)) {
56
+ counts[section] = strings.length;
57
+ }
58
+ result.metadata.string_counts = counts;
59
+ // Build findings — prioritize decoded/stack/tight
60
+ for (const section of ["decoded", "stack", "tight"]) {
61
+ if (sections[section].length > 0) {
62
+ result.findings.push({
63
+ description: `${sections[section].length} ${section} strings extracted`,
64
+ category: `floss-${section}`,
65
+ severity: section === "decoded" ? "medium" : "low",
66
+ evidence: sections[section].slice(0, 50).join("\n"),
67
+ });
68
+ }
69
+ }
70
+ // Static strings: omit if packed, cap otherwise
71
+ if (!options.packed && sections.static.length > 0) {
72
+ const capped = sections.static.length > STATIC_CAP;
73
+ result.findings.push({
74
+ description: `${sections.static.length} static strings${capped ? ` (showing first ${STATIC_CAP})` : ""}`,
75
+ category: "floss-static",
76
+ severity: "info",
77
+ evidence: sections.static.slice(0, STATIC_CAP).join("\n"),
78
+ });
79
+ }
80
+ else if (options.packed && sections.static.length > 0) {
81
+ result.metadata.static_strings_omitted = true;
82
+ result.metadata.static_strings_omitted_reason = "packed sample — static strings unreliable";
83
+ }
84
+ if (result.findings.length > 0) {
85
+ result.parsed = true;
86
+ }
87
+ return result;
88
+ }
89
+ //# sourceMappingURL=floss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floss.js","sourceRoot":"","sources":["../../src/parsers/floss.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Parser registry — lookup structured output parsers by tool name.
3
+ *
4
+ * Falls back to passthrough for tools without a dedicated parser.
5
+ */
6
+ import type { ParsedToolOutput } from "./types.js";
7
+ /**
8
+ * Parse tool output using a registered parser, or passthrough if none exists.
9
+ */
10
+ export declare function parseToolOutput(toolName: string, rawOutput: string): ParsedToolOutput;
11
+ /**
12
+ * Check if a dedicated parser exists for the given tool.
13
+ */
14
+ export declare function hasParser(toolName: string): boolean;
15
+ export type { ParsedToolOutput, ToolOutputParser, Finding } from "./types.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAC;AA2BrE;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAMrF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Parser registry — lookup structured output parsers by tool name.
3
+ *
4
+ * Falls back to passthrough for tools without a dedicated parser.
5
+ */
6
+ import { passthroughParser } from "./passthrough.js";
7
+ import { parseCapaOutput } from "./capa.js";
8
+ import { parseDiecOutput } from "./diec.js";
9
+ import { parsePdfidOutput } from "./pdfid.js";
10
+ import { parseOlevbaOutput } from "./olevba.js";
11
+ import { parsePeframeOutput } from "./peframe.js";
12
+ import { parseOleidOutput } from "./oleid.js";
13
+ import { parseReadelfOutput } from "./readelf.js";
14
+ import { parsePdfParserOutput } from "./pdf-parser.js";
15
+ import { parseFlossOutput } from "./floss.js";
16
+ import { parseYaraOutput } from "./yara.js";
17
+ /** Map of tool name → parser function. */
18
+ const PARSERS = {
19
+ "capa-json": parseCapaOutput,
20
+ "diec": parseDiecOutput,
21
+ "pdfid": parsePdfidOutput,
22
+ "pdf-parser": parsePdfParserOutput,
23
+ "olevba": parseOlevbaOutput,
24
+ "peframe": parsePeframeOutput,
25
+ "oleid": parseOleidOutput,
26
+ "readelf-header": parseReadelfOutput,
27
+ "floss": parseFlossOutput,
28
+ "yara-rules": parseYaraOutput,
29
+ };
30
+ /**
31
+ * Parse tool output using a registered parser, or passthrough if none exists.
32
+ */
33
+ export function parseToolOutput(toolName, rawOutput) {
34
+ const parser = PARSERS[toolName];
35
+ if (parser) {
36
+ return parser(rawOutput);
37
+ }
38
+ return passthroughParser(toolName, rawOutput);
39
+ }
40
+ /**
41
+ * Check if a dedicated parser exists for the given tool.
42
+ */
43
+ export function hasParser(toolName) {
44
+ return toolName in PARSERS;
45
+ }
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,0CAA0C;AAC1C,MAAM,OAAO,GAAqC;IAChD,WAAW,EAAE,eAAe;IAC5B,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,gBAAgB;IACzB,YAAY,EAAE,oBAAoB;IAClC,QAAQ,EAAE,iBAAiB;IAC3B,SAAS,EAAE,kBAAkB;IAC7B,OAAO,EAAE,gBAAgB;IACzB,gBAAgB,EAAE,kBAAkB;IACpC,OAAO,EAAE,gBAAgB;IACzB,YAAY,EAAE,eAAe;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,SAAiB;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,QAAQ,IAAI,OAAO,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parser for oleid text output.
3
+ *
4
+ * Extracts OLE risk indicators (macros, encryption, external links, etc.).
5
+ */
6
+ import type { ParsedToolOutput } from "./types.js";
7
+ export declare function parseOleidOutput(rawOutput: string): ParsedToolOutput;
8
+ //# sourceMappingURL=oleid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oleid.d.ts","sourceRoot":"","sources":["../../src/parsers/oleid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAiBnD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAgFpE"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Parser for oleid text output.
3
+ *
4
+ * Extracts OLE risk indicators (macros, encryption, external links, etc.).
5
+ */
6
+ /** Risk levels mapped to finding severities. */
7
+ const RISK_SEVERITY = {
8
+ "No": "info",
9
+ "no": "info",
10
+ "False": "info",
11
+ "false": "info",
12
+ "Yes": "high",
13
+ "yes": "high",
14
+ "True": "high",
15
+ "true": "high",
16
+ "RISK": "high",
17
+ "WARNING": "medium",
18
+ "OK": "info",
19
+ };
20
+ export function parseOleidOutput(rawOutput) {
21
+ const result = {
22
+ tool: "oleid",
23
+ parsed: false,
24
+ findings: [],
25
+ metadata: {},
26
+ raw: rawOutput,
27
+ };
28
+ const indicators = {};
29
+ const lines = rawOutput.split("\n");
30
+ for (const line of lines) {
31
+ // oleid output format varies but commonly:
32
+ // "Indicator Value"
33
+ // Or table format: "| indicator | value | risk |"
34
+ const tableMatch = line.match(/^\|\s*(.+?)\s*\|\s*(.+?)\s*\|\s*(.+?)\s*\|/);
35
+ if (tableMatch) {
36
+ const [, indicator, value, risk] = tableMatch;
37
+ if (indicator.includes("---") || indicator.toLowerCase() === "indicator")
38
+ continue;
39
+ indicators[indicator.trim()] = value.trim();
40
+ const riskTrimmed = risk.trim();
41
+ if (riskTrimmed !== "none" && riskTrimmed !== "-" && riskTrimmed.toLowerCase() !== "ok") {
42
+ const severity = RISK_SEVERITY[riskTrimmed] ?? "medium";
43
+ if (severity !== "info") {
44
+ result.findings.push({
45
+ description: `${indicator.trim()}: ${value.trim()}`,
46
+ category: "ole-indicator",
47
+ severity,
48
+ evidence: line.trim(),
49
+ });
50
+ }
51
+ }
52
+ continue;
53
+ }
54
+ // Alternative format: "indicator : value"
55
+ // Only match lines that look like oleid indicators (short key, not error/path lines)
56
+ const kvMatch = line.match(/^\s{0,4}(\w[\w\s]{1,30}?)\s*:\s*(\S.*?)\s*$/);
57
+ if (kvMatch && !line.includes("Error") && !line.includes("/")) {
58
+ const [, key, value] = kvMatch;
59
+ const keyLower = key.trim().toLowerCase();
60
+ indicators[key.trim()] = value.trim();
61
+ // Flag key risk indicators
62
+ if ((keyLower.includes("macro") || keyLower.includes("vba")) && /yes|true/i.test(value)) {
63
+ result.findings.push({
64
+ description: `VBA Macros present: ${value.trim()}`,
65
+ category: "macro",
66
+ severity: "high",
67
+ evidence: line.trim(),
68
+ });
69
+ }
70
+ if (keyLower.includes("encrypt") && /yes|true/i.test(value)) {
71
+ result.findings.push({
72
+ description: `Encryption detected: ${value.trim()}`,
73
+ category: "encryption",
74
+ severity: "medium",
75
+ evidence: line.trim(),
76
+ });
77
+ }
78
+ if (keyLower.includes("external") && /yes|true/i.test(value)) {
79
+ result.findings.push({
80
+ description: `External relationships: ${value.trim()}`,
81
+ category: "external-link",
82
+ severity: "high",
83
+ evidence: line.trim(),
84
+ });
85
+ }
86
+ }
87
+ }
88
+ if (Object.keys(indicators).length > 0) {
89
+ result.parsed = true;
90
+ result.metadata.indicators = indicators;
91
+ }
92
+ return result;
93
+ }
94
+ //# sourceMappingURL=oleid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oleid.js","sourceRoot":"","sources":["../../src/parsers/oleid.ts"],"names":[],"mappings":"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"}