UNPKG

ioc-extractor

Version:

IoC (Indicator of Compromise) extractor

227 lines (224 loc) 5.75 kB
import { dedup, sortByValue } from "./chunk-AUD6FQ2X.js"; import { urlRegex } from "./chunk-JDWFL65M.js"; import { emailRegex } from "./chunk-B2TB3BWS.js"; import { domainRegex } from "./chunk-2C3BXX7F.js"; import { asnRegex, btcRegex, cveRegExp, ethRegex, gaPubIDRegex, gaTrackIDRegex, macAddressRegex, md5Regex, sha1Regex, sha256Regex, sha512Regex, ssdeepRegex, xmrRegex } from "./chunk-A2GVSYTG.js"; import { ipRegex } from "./chunk-JJ3RH2QY.js"; // src/aux/extractors.ts function matchesWithRegExp(s, regexp, options = { sort: true }) { const matched = s.match(regexp); const values = matched === null ? [] : dedup(matched); return options.sort ? sortByValue(values) : values; } function getFirstMatchedValue(s, regexp) { if (regexp.global) { const flags = regexp.flags.replace("g", ""); regexp = new RegExp(regexp.source, flags); } const matched = s.match(regexp); return matched === null ? null : matched[0]; } function extractMD5s(s, options = { sort: true }) { return matchesWithRegExp(s, md5Regex, options); } function extractMD5(s) { return getFirstMatchedValue(s, md5Regex); } function extractSHA1s(s, options = { sort: true }) { return matchesWithRegExp(s, sha1Regex, options); } function extractSHA1(s) { return getFirstMatchedValue(s, sha1Regex); } function extractSHA256s(s, options = { sort: true }) { return matchesWithRegExp(s, sha256Regex, options); } function extractSHA256(s) { return getFirstMatchedValue(s, sha256Regex); } function extractSHA512s(s, options = { sort: true }) { return matchesWithRegExp(s, sha512Regex, options); } function extractSHA512(s) { return getFirstMatchedValue(s, sha512Regex); } function extractSSDEEPs(s, options = { sort: true }) { return matchesWithRegExp(s, ssdeepRegex, options); } function extractSSDEEP(s) { return getFirstMatchedValue(s, ssdeepRegex); } function extractASNs(s, options = { sort: true }) { if (!s.includes("AS")) { return []; } return matchesWithRegExp(s, asnRegex, options); } function extractASN(s) { if (!s.includes("AS")) { return null; } return getFirstMatchedValue(s, asnRegex); } function extractDomains(s, options = { strict: true, sort: true }) { if (!s.includes(".")) { return []; } const regexp = domainRegex(options); const values = matchesWithRegExp(s, regexp); return options.sort ? sortByValue(values) : values; } function extractDomain(s, options = { strict: true }) { if (!s.includes(".")) { return null; } const regexp = domainRegex(options); return getFirstMatchedValue(s, regexp); } function extractEmails(s, options = { strict: true, sort: true }) { if (!s.includes("@") && !s.includes(".")) { return []; } const regexp = emailRegex(options); const values = matchesWithRegExp(s, regexp); return options.sort ? sortByValue(values) : values; } function extractEmail(s, options = { strict: true }) { if (!s.includes("@") && !s.includes(".")) { return null; } const regexp = emailRegex(options); return getFirstMatchedValue(s, regexp); } function extractIPv4s(s, options = { sort: true }) { if (!s.includes(".")) { return []; } return matchesWithRegExp(s, ipRegex.v4(), options); } function extractIPv4(s) { if (!s.includes(".")) { return null; } return getFirstMatchedValue(s, ipRegex.v4()); } function extractIPv6s(s, options = { sort: true }) { return matchesWithRegExp(s, ipRegex.v6(), options); } function extractIPv6(s) { return getFirstMatchedValue(s, ipRegex.v6()); } function extractURLs(s, options = { strict: true, sort: true }) { const regexp = urlRegex(options); return matchesWithRegExp(s, regexp, options); } function extractURL(s, options = { strict: true }) { const regexp = urlRegex(options); return getFirstMatchedValue(s, regexp); } function extractCVEs(s, options = { sort: true }) { return matchesWithRegExp(s, cveRegExp, options); } function extractCVE(s) { return getFirstMatchedValue(s, cveRegExp); } function extractBTCs(s, options = { sort: true }) { return matchesWithRegExp(s, btcRegex, options); } function extractBTC(s) { return getFirstMatchedValue(s, btcRegex); } function extractXMRs(s, options = { sort: true }) { return matchesWithRegExp(s, xmrRegex, options); } function extractXMR(s) { return getFirstMatchedValue(s, xmrRegex); } function extractGAPubIDs(s, options = { sort: true }) { return matchesWithRegExp(s, gaPubIDRegex, options); } function extractGAPubID(s) { return getFirstMatchedValue(s, gaPubIDRegex); } function extractGATrackIDs(s, options = { sort: true }) { return matchesWithRegExp(s, gaTrackIDRegex, options); } function extractGATrackID(s) { return getFirstMatchedValue(s, gaTrackIDRegex); } function extractMacAddresses(s, options = { sort: true }) { return matchesWithRegExp(s, macAddressRegex, options); } function extractMacAddress(s) { return getFirstMatchedValue(s, macAddressRegex); } function extractETHs(s, options = { sort: true }) { return matchesWithRegExp(s, ethRegex, options); } function extractETH(s) { return getFirstMatchedValue(s, ethRegex); } export { matchesWithRegExp, extractMD5s, extractMD5, extractSHA1s, extractSHA1, extractSHA256s, extractSHA256, extractSHA512s, extractSHA512, extractSSDEEPs, extractSSDEEP, extractASNs, extractASN, extractDomains, extractDomain, extractEmails, extractEmail, extractIPv4s, extractIPv4, extractIPv6s, extractIPv6, extractURLs, extractURL, extractCVEs, extractCVE, extractBTCs, extractBTC, extractXMRs, extractXMR, extractGAPubIDs, extractGAPubID, extractGATrackIDs, extractGATrackID, extractMacAddresses, extractMacAddress, extractETHs, extractETH };