From 2401457a994f40f23140b62e406590bdaa0476a2 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Fri, 3 Sep 2021 08:45:26 +1000 Subject: [PATCH] Split technologies.json into technologies/[a-z].json --- .gitignore | 3 +- CONTRIBUTING.md | 4 +- README.md | 2 +- bin/link.js | 21 +- bin/validate.js | 40 +- package.json | 4 +- schema.json | 510 +- src/README.md | 21 +- src/categories.json | 358 + src/drivers/npm/Dockerfile | 3 +- src/drivers/npm/driver.js | 19 +- src/drivers/npm/package.json | 5 +- src/drivers/npm/technologies/.gitkeep | 0 src/drivers/webextension/js/driver.js | 17 +- .../webextension/technologies/.gitkeep | 0 src/technologies.json | 28006 ---------------- src/technologies/_.json | 98 + src/technologies/a.json | 2649 ++ src/technologies/b.json | 1245 + src/technologies/c.json | 1911 ++ src/technologies/d.json | 948 + src/technologies/e.json | 887 + src/technologies/f.json | 984 + src/technologies/g.json | 1315 + src/technologies/h.json | 621 + src/technologies/i.json | 798 + src/technologies/j.json | 642 + src/technologies/k.json | 638 + src/technologies/l.json | 922 + src/technologies/m.json | 1698 + src/technologies/n.json | 502 + src/technologies/o.json | 1067 + src/technologies/p.json | 1836 + src/technologies/q.json | 137 + src/technologies/r.json | 1135 + src/technologies/s.json | 3512 ++ src/technologies/t.json | 1362 + src/technologies/u.json | 387 + src/technologies/v.json | 571 + src/technologies/w.json | 970 + src/technologies/x.json | 236 + src/technologies/y.json | 298 + src/technologies/z.json | 328 + 43 files changed, 28411 insertions(+), 28299 deletions(-) create mode 100644 src/categories.json create mode 100644 src/drivers/npm/technologies/.gitkeep create mode 100644 src/drivers/webextension/technologies/.gitkeep delete mode 100644 src/technologies.json create mode 100644 src/technologies/_.json create mode 100644 src/technologies/a.json create mode 100644 src/technologies/b.json create mode 100644 src/technologies/c.json create mode 100644 src/technologies/d.json create mode 100644 src/technologies/e.json create mode 100644 src/technologies/f.json create mode 100644 src/technologies/g.json create mode 100644 src/technologies/h.json create mode 100644 src/technologies/i.json create mode 100644 src/technologies/j.json create mode 100644 src/technologies/k.json create mode 100644 src/technologies/l.json create mode 100644 src/technologies/m.json create mode 100644 src/technologies/n.json create mode 100644 src/technologies/o.json create mode 100644 src/technologies/p.json create mode 100644 src/technologies/q.json create mode 100644 src/technologies/r.json create mode 100644 src/technologies/s.json create mode 100644 src/technologies/t.json create mode 100644 src/technologies/u.json create mode 100644 src/technologies/v.json create mode 100644 src/technologies/w.json create mode 100644 src/technologies/x.json create mode 100644 src/technologies/y.json create mode 100644 src/technologies/z.json diff --git a/.gitignore b/.gitignore index 26bcbd9ac..5b49393b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /build/* -/src/drivers/**/technologies.json +/src/drivers/**/categories.json +/src/drivers/**/technologies/* /src/drivers/**/wappalyzer.js /src/drivers/webextension/images/icons/converted/* diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 253e4a11f..5982983b1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ To get started, see the [README](https://github.com/aliasio/wappalyzer/blob/mast Wappalyzer uses [regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) to fingerprint technologies. Refer to the [specification](https://github.com/AliasIO/wappalyzer/blob/master/README.md#specification) for detail. -- Add a new block to [`src/technologies.json`](https://github.com/aliasio/wappalyzer/blob/master/src/technologies.json). +- Add a new block to [`src/technologies/*.json`](https://github.com/aliasio/wappalyzer/blob/master/src/technologies). The filename should match the first letter of the technology name (a-z). Use `_.json` if the first character is a number or symbol. - Add an icon to [`src/drivers/webextension/images/icons`](https://github.com/aliasio/wappalyzer/tree/master/src/drivers/webextension/images/icons). The image must be square, either SVG or PNG (32 x 32 pixels). Only widely used technologies are accepted. When creating a pull request, include ten or more links to websites that use the application, a GitHub page with at least 1,000 stars or anything that will help establish the size of the user base. @@ -26,7 +26,7 @@ Only widely used technologies are accepted. When creating a pull request, includ Please [open an issue on GitHub](https://github.com/aliasio/wappalyzer/issues) first to discuss the need for a new category. -To add a category, edit [`src/technologies.json`](https://github.com/aliasio/wappalyzer/blob/master/src/technologies.json) and update every [locale](https://github.com/aliasio/wappalyzer/tree/master/src/drivers/webextension/_locales). You may use the English category name in all of them. +To add a category, edit [`src/categories.json`](https://github.com/aliasio/wappalyzer/blob/master/src/categories.json) and update every [locale](https://github.com/aliasio/wappalyzer/tree/master/src/drivers/webextension/_locales). You may use the English category name in all of them. ## Adding a new translation diff --git a/README.md b/README.md index bb638231c..b1e315d0f 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ node src/drivers/npm/cli.js https://example.com A long list of [regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) is used to identify technologies on web pages. Wappalyzer inspects HTML code, as well as JavaScript variables, response headers and more. -Patterns (regular expressions) are kept in [`src/technologies.json`](https://github.com/aliasio/wappalyzer/blob/master/src/technologies.json). The following is an example of an application fingerprint. +Patterns (regular expressions) are kept in [`src/technologies/`](https://github.com/aliasio/wappalyzer/blob/master/src/technologies). The following is an example of an application fingerprint. #### Example diff --git a/bin/link.js b/bin/link.js index 42768b734..7b40a09e1 100755 --- a/bin/link.js +++ b/bin/link.js @@ -8,10 +8,21 @@ const link = (src, dest) => { fs.linkSync(src, dest) } -// WebExtension -link('./src/technologies.json', './src/drivers/webextension/technologies.json') link('./src/wappalyzer.js', './src/drivers/webextension/js/wappalyzer.js') - -// NPM -link('./src/technologies.json', './src/drivers/npm/technologies.json') link('./src/wappalyzer.js', './src/drivers/npm/wappalyzer.js') + +link('./src/categories.json', './src/drivers/webextension/categories.json') +link('./src/categories.json', './src/drivers/npm/categories.json') + +for (const index of Array(27).keys()) { + const character = index ? String.fromCharCode(index + 96) : '_' + + link( + `./src/technologies/${character}.json`, + `./src/drivers/webextension/technologies/${character}.json` + ) + link( + `./src/technologies/${character}.json`, + `./src/drivers/npm/technologies/${character}.json` + ) +} diff --git a/bin/validate.js b/bin/validate.js index 7c9c9b238..a2d61406c 100755 --- a/bin/validate.js +++ b/bin/validate.js @@ -2,9 +2,43 @@ const fs = require('fs') const iconPath = './src/drivers/webextension/images/icons' -const { technologies, categories } = JSON.parse( - fs.readFileSync('./src/technologies.json') -) +const categories = JSON.parse(fs.readFileSync('./src/categories.json')) + +let technologies = {} + +for (const index of Array(27).keys()) { + const charCode = index ? index + 96 : 95 + const character = String.fromCharCode(charCode) + + const _technologies = JSON.parse( + fs.readFileSync(`./src/technologies/${character}.json`) + ) + + Object.keys(_technologies).forEach((name) => { + const _charCode = name.toLowerCase().charCodeAt(0) + + if (charCode !== _charCode) { + if (_charCode < 97 || _charCode > 122) { + if (charCode !== 95) { + throw new Error( + `${name} should be moved from ./src/technologies/${character}.json to ./src/technologies/_.json` + ) + } + } else { + throw new Error( + `${name} should be moved from ./src/technologies/${character}.json to ./src/technologies/${String.fromCharCode( + _charCode + )}.json` + ) + } + } + }) + + technologies = { + ...technologies, + ..._technologies, + } +} Object.keys(technologies).forEach((name) => { const technology = technologies[name] diff --git a/package.json b/package.json index b9b66f450..1bf216434 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,9 @@ "link": "node ./bin/link.js", "lint": "eslint src/**/*.{js,json}", "lint:fix": "eslint --fix src/**/*.{js,json}", - "validate": "yarn run lint && jsonlint -qV ./schema.json ./src/technologies.json && node ./bin/validate.js", + "validate": "yarn run lint && jsonlint -qV ./schema.json ./src/technologies/*.json && node ./bin/validate.js", "convert": "node ./bin/convert.js", - "prettify": "jsonlint -si --trim-trailing-commas --enforce-double-quotes ./src/technologies.json", + "prettify": "jsonlint -si --trim-trailing-commas --enforce-double-quotes ./src/categories.json ./src/technologies/*.json", "build": "yarn run link && yarn run validate && yarn run prettify && yarn run convert && node ./bin/build.js", "build:safari": "xcrun safari-web-extension-converter --swift --project-location build --force src/drivers/webextension" } diff --git a/schema.json b/schema.json index 4014c7ea6..73ee96bad 100644 --- a/schema.json +++ b/schema.json @@ -1,273 +1,245 @@ { - "title": "Wappalyzer schema", - "definitions": { - "non-empty-non-blank-string": { - "type": "string", - "pattern": "^(?!\\s*$).+" - } - }, - "type": "object", - "additionalProperties": false, - "required": ["technologies", "categories"], - "properties": { - "$schema": { - "type": "string" - }, - "categories": { - "type": "object", - "minProperties": 64, - "additionalProperties": false, - "patternProperties": { - "^[0-9]+$": { - "type": "object", - "properties": { - "priority": { - "type": "number" - }, - "name": { - "type": "string" - } - } - } - } - }, - "technologies": { - "type": "object", - "additionalProperties": { - "additionalProperties": false, - "required": ["cats","website"], - "properties": { - "description": { - "type": "string", - "pattern": "^.{0,500}$" - }, - "oss": { - "type": "boolean" - }, - "saas": { - "type": "boolean" - }, - "pricing": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(low|mid|high|freemium|poa|payg|onetime|recurring)$" - } + "title": "Wappalyzer schema", + "definitions": { + "non-empty-non-blank-string": { + "type": "string", + "pattern": "^(?!\\s*$).+" + } + }, + "type": "object", + "additionalProperties": { + "additionalProperties": false, + "required": ["cats","website"], + "properties": { + "description": { + "type": "string", + "pattern": "^.{0,500}$" + }, + "oss": { + "type": "boolean" + }, + "saas": { + "type": "boolean" + }, + "pricing": { + "type": "array", + "items": { + "type": "string", + "pattern": "^(low|mid|high|freemium|poa|payg|onetime|recurring)$" + } + }, + "cats": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 1 + }, + "cpe": { + "$ref": "#/definitions/non-empty-non-blank-string" + }, + "cookies": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.+$": { }, - "cats": { - "type": "array", - "items": { - "type": "number" - }, - "minItems": 1 - }, - "cpe": { - "$ref": "#/definitions/non-empty-non-blank-string" - }, - "cookies": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^.+$": { - }, - "additionalProperties": { - "type": "string" - } - } - }, - "js": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^.+$": { - }, - "additionalProperties": { - "type": "string" - } - } - }, - "dom": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - }, - { - "$ref": "#/definitions/non-empty-non-blank-string" - }, - { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^.+$": { - } - } + "additionalProperties": { + "type": "string" + } + } + }, + "js": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.+$": { + }, + "additionalProperties": { + "type": "string" + } + } + }, + "dom": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + }, + { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.+$": { } - ] - }, - "dns": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^.+$": { - } - } - }, - "headers": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^.+$": { - }, - "additionalProperties": { - "type": "string" - } - } - }, - "html": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - }, - { - "$ref": "#/definitions/non-empty-non-blank-string" - } - ] - }, - "css": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - }, - { - "$ref": "#/definitions/non-empty-non-blank-string" - } - ] - }, - "robots": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - }, - { - "$ref": "#/definitions/non-empty-non-blank-string" - } - ] - }, - "magento": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - }, - { - "$ref": "#/definitions/non-empty-non-blank-string" - } - ] - }, - "certIssuer": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - }, - { - "$ref": "#/definitions/non-empty-non-blank-string" - } - ] - }, - "excludes": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - }, - { - "$ref": "#/definitions/non-empty-non-blank-string" - } - ] - }, - "implies": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - }, - { - "$ref": "#/definitions/non-empty-non-blank-string" - } - ] - }, - "requires": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - }, - { - "$ref": "#/definitions/non-empty-non-blank-string" - } - ] - }, - "meta": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^.+$": { - }, - "additionalProperties": { - "type": "string" - } - } - }, - "scripts": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - }, - { - "$ref": "#/definitions/non-empty-non-blank-string" - } - ] - }, - "url": { - "$ref": "#/definitions/non-empty-non-blank-string" - }, - "website": { - "$ref": "#/definitions/non-empty-non-blank-string" - }, - "icon": { - "$ref": "#/definitions/non-empty-non-blank-string" - }, - "xhr": { - "$ref": "#/definitions/non-empty-non-blank-string" - } - } - } - } - } + } + } + ] + }, + "dns": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.+$": { + } + } + }, + "headers": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.+$": { + }, + "additionalProperties": { + "type": "string" + } + } + }, + "html": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, + "css": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, + "robots": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, + "magento": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, + "certIssuer": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, + "excludes": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, + "implies": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, + "requires": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, + "meta": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.+$": { + }, + "additionalProperties": { + "type": "string" + } + } + }, + "scripts": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, + "url": { + "$ref": "#/definitions/non-empty-non-blank-string" + }, + "website": { + "$ref": "#/definitions/non-empty-non-blank-string" + }, + "icon": { + "$ref": "#/definitions/non-empty-non-blank-string" + }, + "xhr": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + } + } } diff --git a/src/README.md b/src/README.md index 0980442af..d95e7b381 100644 --- a/src/README.md +++ b/src/README.md @@ -17,11 +17,26 @@ const fs = require('fs') const Wappalyzer = require('./wappalyzer') // See https://www.wappalyzer.com/docs/dev/specification or use -// https://raw.githubusercontent.com/AliasIO/wappalyzer/master/src/technologies.json -const { technologies, categories } = JSON.parse( - fs.readFileSync('./technologies.json') +// https://raw.githubusercontent.com/AliasIO/wappalyzer/master/src/technologies +const categories = JSON.parse( + fs.readFileSync(path.resolve(`./categories.json`)) ) +let technologies = {} + +for (const index of Array(27).keys()) { + const character = index ? String.fromCharCode(index + 96) : '_' + + technologies = { + ...technologies, + ...JSON.parse( + fs.readFileSync( + path.resolve(`./technologies/${character}.json`) + ) + ), + } +} + Wappalyzer.setTechnologies(technologies) Wappalyzer.setCategories(categories) diff --git a/src/categories.json b/src/categories.json new file mode 100644 index 000000000..86b176f13 --- /dev/null +++ b/src/categories.json @@ -0,0 +1,358 @@ +{ + "1": { + "name": "CMS", + "priority": 1 + }, + "2": { + "name": "Message boards", + "priority": 1 + }, + "3": { + "name": "Database managers", + "priority": 2 + }, + "4": { + "name": "Documentation", + "priority": 2 + }, + "5": { + "name": "Widgets", + "priority": 9 + }, + "6": { + "name": "Ecommerce", + "priority": 1 + }, + "7": { + "name": "Photo galleries", + "priority": 1 + }, + "8": { + "name": "Wikis", + "priority": 1 + }, + "9": { + "name": "Hosting panels", + "priority": 1 + }, + "10": { + "name": "Analytics", + "priority": 9 + }, + "11": { + "name": "Blogs", + "priority": 1 + }, + "12": { + "name": "JavaScript frameworks", + "priority": 8 + }, + "13": { + "name": "Issue trackers", + "priority": 2 + }, + "14": { + "name": "Video players", + "priority": 7 + }, + "15": { + "name": "Comment systems", + "priority": 9 + }, + "16": { + "name": "Security", + "priority": 9 + }, + "17": { + "name": "Font scripts", + "priority": 9 + }, + "18": { + "name": "Web frameworks", + "priority": 7 + }, + "19": { + "name": "Miscellaneous", + "priority": 9 + }, + "20": { + "name": "Editors", + "priority": 4 + }, + "21": { + "name": "LMS", + "priority": 1 + }, + "22": { + "name": "Web servers", + "priority": 8 + }, + "23": { + "name": "Caching", + "priority": 7 + }, + "24": { + "name": "Rich text editors", + "priority": 5 + }, + "25": { + "name": "JavaScript graphics", + "priority": 6 + }, + "26": { + "name": "Mobile frameworks", + "priority": 8 + }, + "27": { + "name": "Programming languages", + "priority": 5 + }, + "28": { + "name": "Operating systems", + "priority": 6 + }, + "29": { + "name": "Search engines", + "priority": 4 + }, + "30": { + "name": "Webmail", + "priority": 2 + }, + "31": { + "name": "CDN", + "priority": 9 + }, + "32": { + "name": "Marketing automation", + "priority": 9 + }, + "33": { + "name": "Web server extensions", + "priority": 7 + }, + "34": { + "name": "Databases", + "priority": 5 + }, + "35": { + "name": "Maps", + "priority": 6 + }, + "36": { + "name": "Advertising", + "priority": 9 + }, + "37": { + "name": "Network devices", + "priority": 2 + }, + "38": { + "name": "Media servers", + "priority": 1 + }, + "39": { + "name": "Webcams", + "priority": 9 + }, + "41": { + "name": "Payment processors", + "priority": 8 + }, + "42": { + "name": "Tag managers", + "priority": 9 + }, + "44": { + "name": "CI", + "priority": 3 + }, + "45": { + "name": "Control systems", + "priority": 2 + }, + "46": { + "name": "Remote access", + "priority": 1 + }, + "47": { + "name": "Development", + "priority": 2 + }, + "48": { + "name": "Network storage", + "priority": 2 + }, + "49": { + "name": "Feed readers", + "priority": 1 + }, + "50": { + "name": "DMS", + "priority": 1 + }, + "51": { + "name": "Page builders", + "priority": 2 + }, + "52": { + "name": "Live chat", + "priority": 9 + }, + "53": { + "name": "CRM", + "priority": 5 + }, + "54": { + "name": "SEO", + "priority": 8 + }, + "55": { + "name": "Accounting", + "priority": 1 + }, + "56": { + "name": "Cryptominers", + "priority": 5 + }, + "57": { + "name": "Static site generator", + "priority": 1 + }, + "58": { + "name": "User onboarding", + "priority": 8 + }, + "59": { + "name": "JavaScript libraries", + "priority": 9 + }, + "60": { + "name": "Containers", + "priority": 8 + }, + "62": { + "name": "PaaS", + "priority": 8 + }, + "63": { + "name": "IaaS", + "priority": 8 + }, + "64": { + "name": "Reverse proxies", + "priority": 7 + }, + "65": { + "name": "Load balancers", + "priority": 7 + }, + "66": { + "name": "UI frameworks", + "priority": 7 + }, + "67": { + "name": "Cookie compliance", + "priority": 9 + }, + "68": { + "name": "Accessibility", + "priority": 9 + }, + "69": { + "name": "Social logins", + "priority": 6 + }, + "70": { + "name": "SSL/TLS certificate authorities", + "priority": 9 + }, + "71": { + "name": "Affiliate programs", + "priority": 9 + }, + "72": { + "name": "Appointment scheduling", + "priority": 9 + }, + "73": { + "name": "Surveys", + "priority": 9 + }, + "74": { + "name": "A/B Testing", + "priority": 9 + }, + "75": { + "name": "Email", + "priority": 9 + }, + "76": { + "name": "Personalisation", + "priority": 9 + }, + "77": { + "name": "Retargeting", + "priority": 9 + }, + "78": { + "name": "RUM", + "priority": 9 + }, + "79": { + "name": "Geolocation", + "priority": 9 + }, + "80": { + "name": "WordPress themes", + "priority": 9 + }, + "81": { + "name": "Shopify themes", + "priority": 9 + }, + "82": { + "name": "Drupal themes", + "priority": 9 + }, + "83": { + "name": "Browser fingerprinting", + "priority": 9 + }, + "84": { + "name": "Loyalty & rewards", + "priority": 9 + }, + "85": { + "name": "Feature management", + "priority": 9 + }, + "86": { + "name": "Segmentation", + "priority": 9 + }, + "87": { + "name": "WordPress plugins", + "priority": 9 + }, + "88": { + "name": "Hosting", + "priority": 9 + }, + "89": { + "name": "Translation", + "priority": 9 + }, + "90": { + "name": "Reviews", + "priority": 9 + }, + "91": { + "name": "Buy now pay later", + "priority": 9 + }, + "92": { + "name": "Performance", + "priority": 9 + } +} \ No newline at end of file diff --git a/src/drivers/npm/Dockerfile b/src/drivers/npm/Dockerfile index fec427cf5..de09670d8 100644 --- a/src/drivers/npm/Dockerfile +++ b/src/drivers/npm/Dockerfile @@ -18,9 +18,10 @@ RUN mkdir -p "$WAPPALYZER_ROOT/browsers" WORKDIR "$WAPPALYZER_ROOT" ADD cli.js . +ADD categories.json ADD driver.js . ADD package.json . -ADD technologies.json . +ADD technologies . ADD wappalyzer.js . ADD yarn.lock . diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index de45d7727..71d11defb 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -42,10 +42,25 @@ if (AWS_LAMBDA_FUNCTION_NAME) { const extensions = /^([^.]+$|\.(asp|aspx|cgi|htm|html|jsp|php)$)/ -const { technologies, categories } = JSON.parse( - fs.readFileSync(path.resolve(`${__dirname}/technologies.json`)) +const categories = JSON.parse( + fs.readFileSync(path.resolve(`${__dirname}/categories.json`)) ) +let technologies = {} + +for (const index of Array(27).keys()) { + const character = index ? String.fromCharCode(index + 96) : '_' + + technologies = { + ...technologies, + ...JSON.parse( + fs.readFileSync( + path.resolve(`${__dirname}/technologies/${character}.json`) + ) + ), + } +} + setTechnologies(technologies) setCategories(categories) diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 1f4ff5a09..1ac572372 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -31,9 +31,10 @@ "main": "driver.js", "files": [ "cli.js", + "categories.json", "driver.js", "index.js", - "technologies.json", + "technologies/*", "wappalyzer.js" ], "bin": { @@ -42,4 +43,4 @@ "dependencies": { "puppeteer": "^5.3.0" } -} \ No newline at end of file +} diff --git a/src/drivers/npm/technologies/.gitkeep b/src/drivers/npm/technologies/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index 3e498f62a..24c4ac4a0 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -136,10 +136,23 @@ const Driver = { */ async loadTechnologies() { try { - const { technologies, categories } = await ( - await fetch(chrome.runtime.getURL('technologies.json')) + const categories = await ( + await fetch(chrome.runtime.getURL('categories.json')) ).json() + let technologies = {} + + for (const index of Array(27).keys()) { + const character = index ? String.fromCharCode(index + 96) : '_' + + technologies = { + ...technologies, + ...(await ( + await fetch(chrome.runtime.getURL(`technologies/${character}.json`)) + ).json()), + } + } + setTechnologies(technologies) setCategories(categories) } catch (error) { diff --git a/src/drivers/webextension/technologies/.gitkeep b/src/drivers/webextension/technologies/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/technologies.json b/src/technologies.json deleted file mode 100644 index 7b963a78a..000000000 --- a/src/technologies.json +++ /dev/null @@ -1,28006 +0,0 @@ -{ - "$schema": "../schema.json", - "categories": { - "1": { - "name": "CMS", - "priority": 1 - }, - "2": { - "name": "Message boards", - "priority": 1 - }, - "3": { - "name": "Database managers", - "priority": 2 - }, - "4": { - "name": "Documentation", - "priority": 2 - }, - "5": { - "name": "Widgets", - "priority": 9 - }, - "6": { - "name": "Ecommerce", - "priority": 1 - }, - "7": { - "name": "Photo galleries", - "priority": 1 - }, - "8": { - "name": "Wikis", - "priority": 1 - }, - "9": { - "name": "Hosting panels", - "priority": 1 - }, - "10": { - "name": "Analytics", - "priority": 9 - }, - "11": { - "name": "Blogs", - "priority": 1 - }, - "12": { - "name": "JavaScript frameworks", - "priority": 8 - }, - "13": { - "name": "Issue trackers", - "priority": 2 - }, - "14": { - "name": "Video players", - "priority": 7 - }, - "15": { - "name": "Comment systems", - "priority": 9 - }, - "16": { - "name": "Security", - "priority": 9 - }, - "17": { - "name": "Font scripts", - "priority": 9 - }, - "18": { - "name": "Web frameworks", - "priority": 7 - }, - "19": { - "name": "Miscellaneous", - "priority": 9 - }, - "20": { - "name": "Editors", - "priority": 4 - }, - "21": { - "name": "LMS", - "priority": 1 - }, - "22": { - "name": "Web servers", - "priority": 8 - }, - "23": { - "name": "Caching", - "priority": 7 - }, - "24": { - "name": "Rich text editors", - "priority": 5 - }, - "25": { - "name": "JavaScript graphics", - "priority": 6 - }, - "26": { - "name": "Mobile frameworks", - "priority": 8 - }, - "27": { - "name": "Programming languages", - "priority": 5 - }, - "28": { - "name": "Operating systems", - "priority": 6 - }, - "29": { - "name": "Search engines", - "priority": 4 - }, - "30": { - "name": "Webmail", - "priority": 2 - }, - "31": { - "name": "CDN", - "priority": 9 - }, - "32": { - "name": "Marketing automation", - "priority": 9 - }, - "33": { - "name": "Web server extensions", - "priority": 7 - }, - "34": { - "name": "Databases", - "priority": 5 - }, - "35": { - "name": "Maps", - "priority": 6 - }, - "36": { - "name": "Advertising", - "priority": 9 - }, - "37": { - "name": "Network devices", - "priority": 2 - }, - "38": { - "name": "Media servers", - "priority": 1 - }, - "39": { - "name": "Webcams", - "priority": 9 - }, - "41": { - "name": "Payment processors", - "priority": 8 - }, - "42": { - "name": "Tag managers", - "priority": 9 - }, - "44": { - "name": "CI", - "priority": 3 - }, - "45": { - "name": "Control systems", - "priority": 2 - }, - "46": { - "name": "Remote access", - "priority": 1 - }, - "47": { - "name": "Development", - "priority": 2 - }, - "48": { - "name": "Network storage", - "priority": 2 - }, - "49": { - "name": "Feed readers", - "priority": 1 - }, - "50": { - "name": "DMS", - "priority": 1 - }, - "51": { - "name": "Page builders", - "priority": 2 - }, - "52": { - "name": "Live chat", - "priority": 9 - }, - "53": { - "name": "CRM", - "priority": 5 - }, - "54": { - "name": "SEO", - "priority": 8 - }, - "55": { - "name": "Accounting", - "priority": 1 - }, - "56": { - "name": "Cryptominers", - "priority": 5 - }, - "57": { - "name": "Static site generator", - "priority": 1 - }, - "58": { - "name": "User onboarding", - "priority": 8 - }, - "59": { - "name": "JavaScript libraries", - "priority": 9 - }, - "60": { - "name": "Containers", - "priority": 8 - }, - "62": { - "name": "PaaS", - "priority": 8 - }, - "63": { - "name": "IaaS", - "priority": 8 - }, - "64": { - "name": "Reverse proxies", - "priority": 7 - }, - "65": { - "name": "Load balancers", - "priority": 7 - }, - "66": { - "name": "UI frameworks", - "priority": 7 - }, - "67": { - "name": "Cookie compliance", - "priority": 9 - }, - "68": { - "name": "Accessibility", - "priority": 9 - }, - "69": { - "name": "Social logins", - "priority": 6 - }, - "70": { - "name": "SSL/TLS certificate authorities", - "priority": 9 - }, - "71": { - "name": "Affiliate programs", - "priority": 9 - }, - "72": { - "name": "Appointment scheduling", - "priority": 9 - }, - "73": { - "name": "Surveys", - "priority": 9 - }, - "74": { - "name": "A/B Testing", - "priority": 9 - }, - "75": { - "name": "Email", - "priority": 9 - }, - "76": { - "name": "Personalisation", - "priority": 9 - }, - "77": { - "name": "Retargeting", - "priority": 9 - }, - "78": { - "name": "RUM", - "priority": 9 - }, - "79": { - "name": "Geolocation", - "priority": 9 - }, - "80": { - "name": "WordPress themes", - "priority": 9 - }, - "81": { - "name": "Shopify themes", - "priority": 9 - }, - "82": { - "name": "Drupal themes", - "priority": 9 - }, - "83": { - "name": "Browser fingerprinting", - "priority": 9 - }, - "84": { - "name": "Loyalty & rewards", - "priority": 9 - }, - "85": { - "name": "Feature management", - "priority": 9 - }, - "86": { - "name": "Segmentation", - "priority": 9 - }, - "87": { - "name": "WordPress plugins", - "priority": 9 - }, - "88": { - "name": "Hosting", - "priority": 9 - }, - "89": { - "name": "Translation", - "priority": 9 - }, - "90": { - "name": "Reviews", - "priority": 9 - }, - "91": { - "name": "Buy now pay later", - "priority": 9 - }, - "92": { - "name": "Performance", - "priority": 9 - } - }, - "technologies": { - "1C-Bitrix": { - "cats": [ - 1, - 6 - ], - "cookies": { - "BITRIX_SM_GUEST_ID": "", - "BITRIX_SM_LAST_IP": "", - "BITRIX_SM_SALE_UID": "" - }, - "description": "1C-Bitrix is a system of web project management, universal software for the creation, support and successful development of corporate websites and online stores.", - "headers": { - "Set-Cookie": "BITRIX_", - "X-Powered-CMS": "Bitrix Site Manager" - }, - "icon": "1C-Bitrix.svg", - "implies": "PHP", - "pricing": [ - "onetime", - "mid", - "recurring" - ], - "saas": true, - "scripts": "bitrix(?:\\.info/|/js/main/core)", - "website": "http://www.1c-bitrix.ru" - }, - "2B Advice": { - "cats": [ - 67 - ], - "description": "2B Advice provides a plug-in to manage GDPR cookie consent.", - "icon": "2badvice.png", - "js": { - "BBCookieControler": "" - }, - "saas": true, - "scripts": "2badvice-cdn\\.azureedge\\.net", - "website": "https://www.2b-advice.com/en/data-privacy-software/cookie-consent-plugin/" - }, - "33Across": { - "cats": [ - 36 - ], - "description": "33Across is a technology company focused on solving the challenge of consumer attention for automated advertising.", - "dom": "iframe[src*='.33across.com'], link[href*='.33across.com']", - "icon": "33Across.png", - "saas": true, - "website": "https://www.33across.com", - "xhr": "\\.33across\\.com" - }, - "3dCart": { - "cats": [ - 1, - 6 - ], - "cookies": { - "3dvisit": "" - }, - "headers": { - "X-Powered-By": "3DCART" - }, - "icon": "3dCart.png", - "scripts": "(?:twlh(?:track)?\\.asp|3d_upsell\\.js)", - "website": "http://www.3dcart.com" - }, - "4-Tell": { - "cats": [ - 76 - ], - "cookies": { - "4Tell": "", - "4TellCart": "", - "4TellSession": "" - }, - "description": "4-Tell is an ecommerce software company for retailers with AI-powered personalisation and recommendations products.", - "icon": "4-Tell.png", - "js": { - "_4TellBoost": "" - }, - "pricing": [ - "poa" - ], - "saas": true, - "scripts": "4tellcdn\\.azureedge\\.net", - "website": "https://4-tell.com" - }, - "@sulu/web": { - "cats": [ - 59 - ], - "icon": "Sulu.svg", - "js": { - "web.startComponents": "" - }, - "website": "https://github.com/sulu/web-js" - }, - "A-Frame": { - "cats": [ - 25 - ], - "html": "]*>", - "icon": "A-Frame.svg", - "implies": "three.js", - "js": { - "AFRAME.version": "^(.+)$\\;version:\\1" - }, - "scripts": "/?([\\d.]+)?/aframe(?:\\.min)?\\.js\\;version:\\1", - "website": "https://aframe.io" - }, - "A8.net": { - "cats": [ - 71 - ], - "description": " A8.net is an affiliate marketing network.", - "dom": "img[src*='.a8.net']", - "icon": "A8.net.png", - "js": { - "A8salesCookieRepository": "", - "a8sales": "", - "map_A8": "" - }, - "scripts": "statics\\.a8\\.net", - "website": "https://www.a8.net" - }, - "AB Tasty": { - "cats": [ - 74 - ], - "description": "AB Tasty is a customer experience optimisation company. AB Tasty offers AI-driven experimentation, personalisation, and product optimisation platforms for user testing.", - "icon": "AB Tasty.svg", - "js": { - "ABTasty": "", - "_abtasty": "", - "loadABTasty": "" - }, - "pricing": [ - "poa" - ], - "saas": true, - "scripts": "try\\.abtasty\\.com", - "website": "https://www.abtasty.com" - }, - "AD EBiS": { - "cats": [ - 36, - 32 - ], - "description": "AD EBiS is an advertising and marketing platform that offers advertisement effectiveness measurement, access and user analysis.", - "dom": "a[href*='.ebis.ne.jp/'][target='_blank']", - "icon": "ebis.png", - "js": { - "ebis.c.pageurl": "" - }, - "pricing": [ - "freemium", - "payg" - ], - "saas": true, - "scripts": "\\.ebis\\.ne\\.jp/", - "website": "http://www.ebis.ne.jp" - }, - "AMP": { - "cats": [ - 12 - ], - "description": "AMP, originally created by Google, is an open-source HTML framework developed by the AMP open-source Project. AMP is designed to help webpages load faster.", - "html": [ - "]* (?:amp|⚡)[^-]", - "]+(?:src=\"https?://mh\\d?\\.adriver\\.ru/|flashvars=\"[^\"]*(?:http:%3A//(?:ad|mh\\d?)\\.adriver\\.ru/|adriver_banner))|<(?:(?:iframe|img)[^>]+src|a[^>]+href)=\"https?://ad\\.adriver\\.ru/)", - "icon": "AdRiver.png", - "js": { - "adriver": "" - }, - "scripts": "(?:adriver\\.core\\.\\d\\.js|https?://(?:content|ad|masterh\\d)\\.adriver\\.ru/)", - "website": "http://adriver.ru" - }, - "AdRoll": { - "cats": [ - 36, - 77 - ], - "description": "AdRoll is a digital marketing technology platform that specializes in retargeting.", - "icon": "AdRoll.svg", - "js": { - "adroll_adv_id": "", - "adroll_pix_id": "" - }, - "pricing": [ - "low", - "recurring" - ], - "saas": true, - "scripts": "(?:a|s)\\.adroll\\.com", - "website": "http://adroll.com" - }, - "AdRoll CMP System": { - "cats": [ - 67 - ], - "description": "AdRoll CMP System is a consent management solution.", - "icon": "AdRoll.svg", - "js": { - "__adroll_consent": "", - "__adroll_consent_is_gdpr": "" - }, - "pricing": [ - "low", - "recurring" - ], - "saas": true, - "website": "https://www.adroll.com/features/consent-management" - }, - "AdThrive": { - "cats": [ - 36 - ], - "description": "AdThrive is an online advertising network aka ad provider for bloggers for blog monetisation.", - "icon": "AdThrive.png", - "js": { - "adthrive": "", - "adthriveVideosInjected": "" - }, - "saas": true, - "scripts": "ads\\.adthrive\\.com", - "website": "https://www.adthrive.com" - }, - "Ada": { - "cats": [ - 52 - ], - "description": "Ada is an automated customer experience company that provides chat bots used in customer support.", - "icon": "Ada.svg", - "js": { - "__AdaEmbedConstructor": "", - "adaEmbed": "" - }, - "pricing": [ - "poa" - ], - "saas": true, - "scripts": "\\.ada\\.support", - "website": "https://www.ada.cx" - }, - "Adabra": { - "cats": [ - 32 - ], - "description": "Adabra is a SaaS omnichannel marketing automation platform to help boost sales. Adabra allows you to manage user segmentation, create workflow and campaigns through email, social, SMS and more.", - "icon": "Adabra.svg", - "js": { - "adabraPreview": "", - "adabra_version_panel": "(^.+$)\\;version:\\1", - "adabra_version_track": "(^.+$)\\;version:\\1" - }, - "pricing": [ - "poa", - "recurring" - ], - "saas": true, - "scripts": "track\\.adabra\\.com", - "website": "https://www.adabra.com", - "xhr": "my\\.adabra\\.com" - }, - "Adally": { - "cats": [ - 68 - ], - "icon": "Adally.png", - "scripts": "cloudfront\\.net/.*/adally\\.js", - "website": "https://adally.com/" - }, - "Adalyser": { - "cats": [ - 36 - ], - "description": "Adalyser is an online platform offering the tools needed to get up and running with TV advertising.", - "icon": "Adalyser.svg", - "js": { - "adalyserModules": "" - }, - "scripts": "c5\\.adalyser\\.com", - "website": "https://adalyser.com/" - }, - "Adcash": { - "cats": [ - 36 - ], - "icon": "Adcash.svg", - "js": { - "SuLoaded": "", - "SuUrl": "", - "ac_bgclick_URL": "", - "ct_nOpp": "", - "ct_nSuUrl": "", - "ct_siteunder": "", - "ct_tag": "" - }, - "scripts": "^[^\\/]*//(?:[^\\/]+\\.)?adcash\\.com/(?:script|ad)/", - "url": "^https?://(?:[^\\/]+\\.)?adcash\\.com/script/pop_", - "website": "http://adcash.com" - }, - "AddShoppers": { - "cats": [ - 5, - 10 - ], - "description": "AddShoppers is the social media marketing command center for small-medium online retailers.", - "icon": "AddShoppers.png", - "pricing": [ - "poa" - ], - "saas": true, - "scripts": "(?:cdn\\.)?shop\\.pe/widget/", - "website": "http://www.addshoppers.com" - }, - "AddThis": { - "cats": [ - 5 - ], - "description": "AddThis is a social bookmarking service that can be integrated into a website with the use of a web widget.", - "icon": "AddThis.svg", - "js": { - "addthis": "" - }, - "scripts": "addthis\\.com/js/", - "website": "http://www.addthis.com" - }, - "AddToAny": { - "cats": [ - 5 - ], - "description": "AddToAny is a universal sharing platform that can be integrated into a website by use of a web widget or plugin.", - "icon": "AddToAny.png", - "js": { - "a2apage_init": "" - }, - "scripts": "addtoany\\.com/menu/page\\.js", - "website": "http://www.addtoany.com" - }, - "Adminer": { - "cats": [ - 3 - ], - "html": [ - "Adminer ([\\d.]+)\\;version:\\1", - "onclick=\"bodyClick\\(event\\);\" onload=\"verifyVersion\\('([\\d.]+)'\\);\">\\;version:\\1" - ], - "icon": "adminer.png", - "implies": "PHP", - "website": "http://www.adminer.org" - }, - "Admitad": { - "cats": [ - 71 - ], - "description": "Admitad is an affiliate network that acts as an intermediary between advertisers and publishers.", - "icon": "Admitad.svg", - "js": { - "ADMITAD": "", - "admitad": "" - }, - "pricing": [ - "payg" - ], - "scripts": [ - "artfut\\.com/static/(?:tracking|crossdevice)\\.min\\.js", - "cdn\\.admitad\\.com" - ], - "website": "https://www.admitad.com" - }, - "Adnegah": { - "cats": [ - 36 - ], - "headers": { - "X-Advertising-By": "adnegah\\.net" - }, - "html": "", - "" - ], - "icon": "Google Tag Manager.svg", - "js": { - "google_tag_manager": "", - "googletag": "" - }, - "saas": true, - "scripts": "googletagmanager\\.com/gtm\\.js", - "website": "http://www.google.com/tagmanager" - }, - "Google Wallet": { - "cats": [ - 41 - ], - "icon": "Google Wallet.png", - "saas": true, - "scripts": [ - "checkout\\.google\\.com", - "wallet\\.google\\.com" - ], - "website": "http://wallet.google.com" - }, - "Google Web Server": { - "cats": [ - 22 - ], - "cpe": "cpe:/a:google:web_server", - "headers": { - "Server": "gws" - }, - "icon": "Google.svg", - "website": "http://en.wikipedia.org/wiki/Google_Web_Server" - }, - "Google Web Toolkit": { - "cats": [ - 18 - ], - "cpe": "cpe:/a:google:web_toolkit", - "description": "Google Web Toolkit (GWT) is an open-source Java software development framework that makes writing AJAX applications.", - "icon": "Google Web Toolkit.png", - "implies": "Java", - "js": { - "__gwt_": "", - "__gwt_activeModules": "", - "__gwt_getMetaProperty": "", - "__gwt_isKnownPropertyValue": "", - "__gwt_stylesLoaded": "", - "__gwtlistener": "" - }, - "meta": { - "gwt:property": "" - }, - "website": "http://developers.google.com/web-toolkit" - }, - "Google Workspace": { - "cats": [ - 30, - 75 - ], - "description": "Google Workspace, formerly G Suite, is a collection of cloud computing, productivity and collaboration tools.", - "dns": { - "MX": [ - "aspmx\\.l\\.google\\.com", - "googlemail\\.com" - ] - }, - "icon": "Google Workspace.svg", - "website": "https://workspace.google.com/" - }, - "Grab Pay Later": { - "cats": [ - 41, - 91 - ], - "description": "Grab Pay Later is a Buy now pay later solution offered by Grab.", - "icon": "Grab.svg", - "saas": true, - "scripts": "grab-paylater\\.js", - "website": "https://www.grab.com/sg/finance/pay-later/" - }, - "Graffiti CMS": { - "cats": [ - 1 - ], - "cookies": { - "graffitibot": "" - }, - "icon": "Graffiti CMS.png", - "implies": "Microsoft ASP.NET", - "meta": { - "generator": "Graffiti CMS ([^\"]+)\\;version:\\1" - }, - "scripts": "/graffiti\\.js", - "website": "http://graffiticms.codeplex.com" - }, - "GrandNode": { - "cats": [ - 6 - ], - "cookies": { - "Grand.customer": "" - }, - "html": "(?:" - ], - "icon": "inspectlet.png", - "js": { - "__insp": "", - "__inspld": "" - }, - "scripts": [ - "cdn\\.inspectlet\\.com" - ], - "website": "https://www.inspectlet.com/" - }, - "Instabot": { - "cats": [ - 5, - 10, - 32, - 52, - 58 - ], - "description": "Instabot is a conversion chatbot that understands your users, and curates information, answers questions, captures contacts, and books meetings instantly.", - "icon": "Instabot.png", - "js": { - "Instabot": "" - }, - "scripts": "/rokoInstabot\\.js", - "website": "https://instabot.io/" - }, - "Instana": { - "cats": [ - 10, - 13, - 78 - ], - "description": "Instana is a Kubernetes-native APM tool which is built for new-stack including Microservices and lately Serverless but also supports the existing VM based stacks including several supported technologies.", - "icon": "Instana.svg", - "js": { - "ineum": "" - }, - "pricing": [ - "low", - "recurring" - ], - "saas": true, - "scripts": "eum\\.instana\\.io", - "website": "https://www.instana.com" - }, - "InstantCMS": { - "cats": [ - 1 - ], - "cookies": { - "InstantCMS[logdate]": "" - }, - "cpe": "cpe:/a:instantcms:instantcms", - "icon": "InstantCMS.png", - "implies": "PHP", - "meta": { - "generator": "InstantCMS" - }, - "website": "http://www.instantcms.ru" - }, - "InstantClick": { - "cats": [ - 59, - 92 - ], - "description": "InstantClick is a JavaScript library that speeds up your website, making navigation faster.", - "icon": "InstantClick.svg", - "js": { - "InstantClick": "" - }, - "oss": true, - "scripts": "instantclick\\.min\\.js", - "website": "http://instantclick.io/" - }, - "Instapage": { - "cats": [ - 51, - 74, - 10 - ], - "description": "Instapage is a cloud-based landing page platform designed for marketing teams and agencies.", - "icon": "Instapage.svg", - "implies": [ - "Lua", - "Node.js" - ], - "js": { - "_instapageSnowplow": "", - "instapageSp": "" - }, - "pricing": [ - "mid", - "recurring" - ], - "saas": true, - "scripts": [ - "cdn\\.instapagemetrics\\.com", - "heatmap-events-collector\\.instapage\\.com" - ], - "website": "https://instapage.com" - }, - "Intel Active Management Technology": { - "cats": [ - 22, - 46 - ], - "cpe": "cpe:/a:intel:active_management_technology", - "description": "Intel Active Management Technology (AMT) is a proprietary remote management and control system for personal computers with Intel CPUs.", - "headers": { - "Server": "Intel\\(R\\) Active Management Technology(?: ([\\d.]+))?\\;version:\\1" - }, - "icon": "Intel Active Management Technology.png", - "website": "http://intel.com" - }, - "IntenseDebate": { - "cats": [ - 15 - ], - "description": "IntenseDebate is a blog commenting system that supports Typepad, Blogger and Wordpress blogs. The system allows blog owners to track and moderate comments from one place with features like threading, comment analytics, user reputation, and comment aggregation.", - "icon": "IntenseDebate.png", - "scripts": "intensedebate\\.com", - "website": "http://intensedebate.com" - }, - "Intercom": { - "cats": [ - 52, - 53 - ], - "description": "Intercom is an American software company that produces a messaging platform which allows businesses to communicate with prospective and existing customers within their app, on their website, through social media, or via email.", - "icon": "Intercom.svg", - "js": { - "Intercom": "" - }, - "pricing": [ - "mid", - "recurring" - ], - "saas": true, - "scripts": "(?:api\\.intercom\\.io/api|static\\.intercomcdn\\.com/intercom\\.v1)", - "website": "https://www.intercom.com" - }, - "Intercom Articles": { - "cats": [ - 4 - ], - "description": "Intercom Articles is a tool to create, organise and publish help articles.", - "html": "]+>We run on Intercom", - "icon": "Intercom.svg", - "website": "https://www.intercom.com/articles" - }, - "Intershop": { - "cats": [ - 6 - ], - "html": "(?:CDS )?Invenio\\s*v?([\\d\\.]+)?\\;version:\\1", - "icon": "Invenio.png", - "website": "http://invenio-software.org" - }, - "Inveon": { - "cats": [ - 6 - ], - "cookies": { - "INV.Customer": "\\;confidence:50", - "inveonSessionId": "" - }, - "description": "Inveon is a technology company that has been delivering ecommerce infrastructure software and mcommerce applications.", - "icon": "Inveon.svg", - "js": { - "InvApp": "\\;confidence:50", - "invTagManagerParams": "" - }, - "scripts": "Scripts/_app/Inv(?:\\w+)\\.js\\?v=(.+)$\\;version:\\1", - "website": "https://www.inveon.com" - }, - "Ionic": { - "cats": [ - 18 - ], - "icon": "ionic.png", - "js": { - "Ionic.config": "", - "Ionic.version": "^(.+)$\\;version:\\1" - }, - "website": "https://ionicframework.com" - }, - "Ionicons": { - "cats": [ - 17 - ], - "description": "Ionicons is an open-source icon set crafted for web, iOS, Android, and desktop apps.", - "html": "]* href=[^>]+ionicons(?:\\.min)?\\.css", - "icon": "Ionicons.png", - "website": "http://ionicons.com" - }, - "Irroba": { - "cats": [ - 6 - ], - "html": "]*href=\"https://www\\.irroba\\.com\\.br", - "icon": "irroba.svg", - "website": "https://www.irroba.com.br/" - }, - "Isotope": { - "cats": [ - 59 - ], - "description": "Isotope.js is a JavaScript library that makes it easy to sort, filter, and add Masonry layouts to items on a webpage.", - "icon": "Isotope.svg", - "js": { - "Isotope": "", - "init_isotope": "" - }, - "oss": true, - "pricing": [ - "low", - "freemium", - "onetime" - ], - "website": "https://isotope.metafizzy.co" - }, - "Iterable": { - "cats": [ - 32 - ], - "description": "Iterable is a cross-channel marketing platform that powers unified customer experiences.", - "icon": "Iterable.png", - "js": { - "iterableAnalytics": "" - }, - "saas": true, - "scripts": [ - "js\\.iterable\\.com" - ], - "website": "https://iterable.com/" - }, - "Izooto": { - "cats": [ - 32, - 5 - ], - "description": "iZooto is a user engagement and retention tool that leverages web push notifications to help business to drive repeat traffic, leads and sales.", - "icon": "Izooto.png", - "js": { - "Izooto": "", - "_izooto": "" - }, - "pricing": [ - "mid", - "recurring" - ], - "saas": true, - "scripts": "cdn\\.izooto\\.\\w+", - "website": "https://www.izooto.com" - }, - "J2Store": { - "cats": [ - 6 - ], - "description": "J2Store is a Joomla shopping cart and ecommerce extension.", - "icon": "j2store.png", - "js": { - "j2storeURL": "" - }, - "requires": "Joomla", - "website": "https://www.j2store.org/" - }, - "JANet": { - "cats": [ - 71 - ], - "description": "JANet is an affiliate marketing network.", - "dom": "img[src*='.j-a-net.jp'],img[data-src*='.j-a-net.jp']", - "icon": "JANet.png", - "website": "https://j-a-net.jp" - }, - "JAlbum": { - "cats": [ - 7 - ], - "description": "jAlbum is across-platform photo website software for creating and uploading galleries from images and videos.", - "icon": "JAlbum.png", - "implies": "Java", - "meta": { - "generator": "JAlbum( [\\d.]+)?\\;version:\\1" - }, - "website": "http://jalbum.net/en" - }, - "JBoss Application Server": { - "cats": [ - 22 - ], - "headers": { - "X-Powered-By": "JBoss(?:-([\\d.]+))?\\;version:\\1" - }, - "icon": "JBoss Application Server.png", - "website": "http://jboss.org/jbossas.html" - }, - "JBoss Web": { - "cats": [ - 22 - ], - "excludes": "Apache Tomcat", - "headers": { - "X-Powered-By": "JBossWeb(?:-([\\d.]+))?\\;version:\\1" - }, - "icon": "JBoss Web.png", - "implies": "JBoss Application Server", - "website": "http://jboss.org/jbossweb" - }, - "JET Enterprise": { - "cats": [ - 6 - ], - "headers": { - "powered": "jet-enterprise" - }, - "icon": "JET Enterprise.svg", - "website": "http://www.jetecommerce.com.br/" - }, - "JS Charts": { - "cats": [ - 25 - ], - "icon": "JS Charts.png", - "js": { - "JSChart": "" - }, - "scripts": "jscharts.{0,32}\\.js", - "website": "http://www.jscharts.com" - }, - "JSEcoin": { - "cats": [ - 56 - ], - "description": "JSEcoin is a way to mine, receive payments for your goods or services and transfer cryptocurrency", - "icon": "JSEcoin.png", - "js": { - "jseMine": "" - }, - "scripts": "^(?:https):?//load\\.jsecoin\\.com/load/", - "website": "https://jsecoin.com/" - }, - "JShop": { - "cats": [ - 6 - ], - "description": "JShop is the ecommerce database solution marketed by Whorl Ltd. worldwide.", - "icon": "JShop.svg", - "js": { - "jss_1stepDeliveryType": "", - "jss_1stepFillShipping": "" - }, - "website": "http://www.whorl.co.uk" - }, - "JTL Shop": { - "cats": [ - 6 - ], - "cookies": { - "JTLSHOP": "" - }, - "description": "JTL Shop is an ecommerce product created by JTL Software company.", - "html": "(?:]+name=\"JTLSHOP|", - "icon": "Java.png", - "website": "https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html" - }, - "Jekyll": { - "cats": [ - 57 - ], - "cpe": "cpe:/a:jekyllrb:jekyll", - "description": "Jekyll is a blog-aware, static site generator for personal, project, or organisation sites.", - "html": [ - "Powered by ]*>JekyllJenkins ver\\. ([\\d.]+)\\;version:\\1", - "icon": "Jenkins.png", - "implies": "Java", - "js": { - "jenkinsCIGlobal": "", - "jenkinsRules": "" - }, - "website": "https://jenkins.io/" - }, - "Jetshop": { - "cats": [ - 6 - ], - "html": "<(?:div|aside) id=\"jetshop-branding\">", - "icon": "Jetshop.png", - "js": { - "JetshopData": "" - }, - "website": "http://jetshop.se" - }, - "Jetty": { - "cats": [ - 22 - ], - "headers": { - "Server": "Jetty(?:\\(([\\d\\.]*\\d+))?\\;version:\\1" - }, - "icon": "Jetty.png", - "implies": "Java", - "website": "http://www.eclipse.org/jetty" - }, - "Jibres": { - "cats": [ - 6, - 55 - ], - "cookies": { - "jibres": "" - }, - "description": "Jibres is an ecommerce solution with an online store builder and Point-of-Sale (PoS) software.", - "headers": { - "X-Powered-By": "Jibres" - }, - "icon": "Jibres.svg", - "js": { - "jibres": "" - }, - "meta": { - "generator": "Jibres" - }, - "scripts": "/jibres\\.js", - "website": "https://jibres.com" - }, - "Jimdo": { - "cats": [ - 1 - ], - "description": "Jimdo is a website-builder and all-in-one hosting solution, designed to enable users to build their own websites.", - "headers": { - "X-Jimdo-Instance": "", - "X-Jimdo-Wid": "" - }, - "icon": "jimdo.png", - "pricing": [ - "low", - "freemium" - ], - "saas": true, - "url": "\\.jimdo\\.com/", - "website": "https://www.jimdo.com" - }, - "Jirafe": { - "cats": [ - 10, - 32 - ], - "icon": "Jirafe.png", - "js": { - "jirafe": "" - }, - "scripts": "/jirafe\\.js", - "website": "https://docs.jirafe.com" - }, - "Jitsi": { - "cats": [ - 52 - ], - "description": "Jitsi is a free and open-source multiplatform voice (VoIP), videoconferencing and instant messaging applications for the web platform.", - "icon": "Jitsi.png", - "scripts": "lib-jitsi-meet.*\\.js", - "website": "https://jitsi.org" - }, - "Jive": { - "cats": [ - 19 - ], - "headers": { - "X-JIVE-USER-ID": "", - "X-JSL": "", - "X-Jive-Flow-Id": "", - "X-Jive-Request-Id": "", - "x-jive-chrome-wrapped": "" - }, - "icon": "Jive.png", - "website": "http://www.jivesoftware.com" - }, - "JivoChat": { - "cats": [ - 52 - ], - "description": "JivoChat is a live chat solution for websites offering customizable web and mobile chat widgets.", - "icon": "JivoChat.png", - "js": { - "jivo_api": "", - "jivo_version": "([\\d.]+)\\;version:\\1" - }, - "pricing": [ - "freemium", - "recurring", - "payg" - ], - "saas": true, - "scripts": "\\.jivosite\\.com", - "website": "https://www.jivosite.com" - }, - "JobberBase": { - "cats": [ - 19 - ], - "icon": "JobberBase.png", - "implies": "PHP", - "js": { - "Jobber": "" - }, - "meta": { - "generator": "Jobberbase" - }, - "website": "http://www.jobberbase.com" - }, - "JoomShopping": { - "cats": [ - 6 - ], - "description": "JoomShopping is an open-source ecommerce plugin for Joomla.", - "icon": "JoomShopping.png", - "implies": "Joomla", - "js": { - "joomshoppingVideoHtml5": "" - }, - "oss": true, - "pricing": [ - "freemium", - "onetime" - ], - "scripts": "/components/com_jshopping/", - "website": "https://www.webdesigner-profi.de/joomla-webdesign/joomla-shop" - }, - "Joomla": { - "cats": [ - 1 - ], - "cpe": "cpe:/a:joomla:joomla", - "description": "Joomla is a free and open-source content management system for publishing web content.", - "headers": { - "X-Content-Encoded-By": "Joomla! ([\\d.]+)\\;version:\\1" - }, - "html": "(?:]+id=\"wrapper_r\"|<(?:link|script)[^>]+(?:feed|components)/com_|]+class=\"pill)\\;confidence:50", - "icon": "Joomla.svg", - "implies": "PHP", - "js": { - "Joomla": "", - "jcomments": "" - }, - "meta": { - "generator": "Joomla!(?: ([\\d.]+))?\\;version:\\1" - }, - "oss": true, - "url": "option=com_", - "website": "https://www.joomla.org" - }, - "Judge.me": { - "cats": [ - 90 - ], - "description": "Judge.me powers product reviews on ecommerce stores.", - "icon": "Judge.svg", - "js": { - "judgeme": "" - }, - "pricing": [ - "low", - "recurring" - ], - "saas": true, - "scripts": "cdn\\.judge\\.me", - "website": "https://judge.me/" - }, - "Jumbo": { - "cats": [ - 92 - ], - "description": "Jumbo is a page speed optimizer app for Shopify based sites.", - "icon": "Jumbo.png", - "implies": "Shopify", - "scripts": "mt\\.tryjumbo\\.com", - "website": "https://www.tryjumbo.com/" - }, - "Jumpseller": { - "cats": [ - 6 - ], - "description": "Jumpseller is a cloud ecommerce solution for small businesses.", - "icon": "Jumpseller.svg", - "js": { - "Jumpseller": "" - }, - "pricing": [ - "low", - "recurring" - ], - "saas": true, - "scripts": [ - "assets\\.jumpseller\\.\\w+/", - "jumpseller-apps\\.herokuapp\\.\\w+/" - ], - "website": "https://jumpseller.com" - }, - "Justo": { - "cats": [ - 6 - ], - "description": "Justo is a subscription-based software that allows anyone to set up an online store and sell their products with delivery options.", - "icon": "Justo.svg", - "pricing": [ - "high", - "recurring" - ], - "saas": true, - "scripts": "\\.getjusto\\.com/", - "website": "https://www.getjusto.com" - }, - "K2": { - "cats": [ - 19 - ], - "html": "", - "icon": "Lightspeed.svg", - "pricing": [ - "low" - ], - "saas": true, - "scripts": "http://assets\\.webshopapp\\.com", - "url": "seoshop.webshopapp.com", - "website": "http://www.lightspeedhq.com/products/ecommerce/" - }, - "LinkSmart": { - "cats": [ - 36 - ], - "icon": "LinkSmart.png", - "js": { - "LS_JSON": "", - "LinkSmart": "", - "_mb_site_guid": "" - }, - "scripts": "^https?://cdn\\.linksmart\\.com/linksmart_([\\d.]+?)(?:\\.min)?\\.js\\;version:\\1", - "website": "http://linksmart.com" - }, - "Linkedin Insight Tag": { - "cats": [ - 10 - ], - "dom": "noscript > img[src*='dc.ads.linkedin.com']", - "icon": "Linkedin.svg", - "js": { - "_linkedin_data_partner_id": "" - }, - "scripts": "snap\\.licdn\\.com/li\\.lms-analytics/insight\\.min\\.js", - "website": "https://business.linkedin.com/marketing-solutions/insight-tag" - }, - "Linkedin Sign-in": { - "cats": [ - 69 - ], - "description": "Linkedin Sign-In is an authentication system that reduces the burden of login for users, by enabling them to sign in with their Linkedin account.", - "icon": "Linkedin.svg", - "js": { - "OnLinkedInAuth": "", - "onLinkedInLoad": "" - }, - "scripts": "platform\\.linkedin\\.com/(?:.*)?in\\.js(?:\\?version)?([\\d.]+)?\\;version:\\1", - "website": "https://www.linkedin.com/developers" - }, - "Liquid Web": { - "cats": [ - 62 - ], - "headers": { - "x-lw-cache": "" - }, - "icon": "liquidweb.svg", - "website": "https://www.liquidweb.com" - }, - "List.js": { - "cats": [ - 59 - ], - "icon": "List.js.png", - "js": { - "List": "\\;confidence:50" - }, - "scripts": [ - "list\\.js/\\;confidence:50", - "@([\\d.]+)/(?:/dist)?list\\.(?:min\\.)?js\\;version:\\1" - ], - "website": "http://listjs.com" - }, - "Listrak": { - "cats": [ - 32 - ], - "description": "Listrak is a AI-based marketing automation and CRM solutions that unify, interpret and personalise data to engage customer across channels and devices.", - "icon": "Listrak.png", - "js": { - "_LTKSignup": "", - "_LTKSubscriber": "" - }, - "pricing": [ - "poa" - ], - "saas": true, - "scripts": [ - "(?:cdn|s1)\\.listrakbi\\.com", - "services\\.listrak\\.com" - ], - "website": "https://www.listrak.com" - }, - "LiteSpeed": { - "cats": [ - 22 - ], - "cpe": "cpe:/a:litespeedtech:litespeed_web_server", - "description": "LiteSpeed is a high-scalability web server.", - "headers": { - "Server": "^LiteSpeed$" - }, - "icon": "LiteSpeed.svg", - "website": "http://litespeedtech.com" - }, - "Litespeed Cache": { - "cats": [ - 23, - 87 - ], - "description": "LiteSpeed Cache is an all-in-one site acceleration plugin for WordPress.", - "headers": { - "x-litespeed-cache": "" - }, - "icon": "litespeed-cache.png", - "requires": "LiteSpeed", - "website": "https://wordpress.org/plugins/litespeed-cache/" - }, - "Lithium": { - "cats": [ - 1 - ], - "cookies": { - "LithiumVisitor": "" - }, - "html": " ]+Powered by Lithium", - "icon": "Lithium.png", - "implies": "PHP", - "js": { - "LITHIUM": "" - }, - "website": "https://www.lithium.com" - }, - "Live Story": { - "cats": [ - 1 - ], - "icon": "LiveStory.png", - "js": { - "LSHelpers": "", - "LiveStory": "" - }, - "website": "https://www.livestory.nyc/" - }, - "LiveAgent": { - "cats": [ - 52 - ], - "description": "LiveAgent is an online live chat platform. The software provides a ticket management system.", - "icon": "LiveAgent.png", - "js": { - "LiveAgent": "" - }, - "pricing": [ - "payg" - ], - "saas": true, - "website": "https://www.liveagent.com" - }, - "LiveChat": { - "cats": [ - 52 - ], - "description": "LiveChat is an online customer service software with online chat, help desk software, and web analytics capabilities.", - "icon": "LiveChat.png", - "pricing": [ - "payg" - ], - "saas": true, - "scripts": "cdn\\.livechatinc\\.com/.*tracking\\.js", - "website": "http://livechatinc.com" - }, - "LiveHelp": { - "cats": [ - 52, - 53 - ], - "description": "LiveHelp is an online chat tool.", - "icon": "LiveHelp.png", - "js": { - "LHready": "" - }, - "pricing": [ - "low" - ], - "saas": true, - "website": "http://www.livehelp.it" - }, - "LiveIntent": { - "cats": [ - 75, - 36 - ], - "description": "LiveIntent is an email ad monetization platform.", - "icon": "LiveIntent.svg", - "js": { - "LI.advertiserId": "\\d+" - }, - "pricing": [ - "poa" - ], - "saas": true, - "scripts": "\\.liadm\\.com", - "website": "https://www.liveintent.com", - "xhr": "\\.liadm\\.com" - }, - "LiveJournal": { - "cats": [ - 11 - ], - "description": "LiveJournal is a social networking service where users can keep a blog, journal or diary.", - "icon": "LiveJournal.png", - "url": "\\.livejournal\\.com", - "website": "http://www.livejournal.com" - }, - "LivePerson": { - "cats": [ - 52 - ], - "description": "LivePerson is a tool for conversational chatbots and messaging.", - "icon": "LivePerson.png", - "pricing": [ - "poa" - ], - "saas": true, - "scripts": "^https?://lptag\\.liveperson\\.net/tag/tag\\.js", - "website": "https://www.liveperson.com/" - }, - "LiveRamp PCM": { - "cats": [ - 67 - ], - "description": "LiveRamp PCM is a preference and consent management platform that enables comply with the ePrivacy Directive, GDPR, CCPA, and other data protection and privacy laws and regulations.", - "dom": "iframe[src*='gdpr-consent-tool\\.privacymanager\\.io']", - "icon": "LiveRamp.svg", - "js": { - "wpJsonpLiverampGdprCmp": "" - }, - "scripts": "gdpr\\.privacymanager\\.io", - "website": "https://liveramp.com/our-platform/preference-consent-management" - }, - "LiveStreet CMS": { - "cats": [ - 1 - ], - "headers": { - "X-Powered-By": "LiveStreet CMS" - }, - "icon": "LiveStreet CMS.png", - "implies": "PHP", - "js": { - "LIVESTREET_SECURITY_KEY": "" - }, - "website": "http://livestreetcms.com" - }, - "LiveZilla": { - "cats": [ - 52 - ], - "description": "LiveZilla is a web-based live support platform.", - "dom": "#lz_overlay_chat", - "icon": "LiveZilla.png", - "js": { - "lz_chat_execute": "", - "lz_code_id": "(?:[\\w\\d]+)", - "lz_tracking_set_widget_visibility": "" - }, - "pricing": [ - "onetime", - "mid" - ], - "saas": false, - "website": "https://www.livezilla.net" - }, - "Livefyre": { - "cats": [ - 15 - ], - "description": "Livefyre is a platform that integrates with the social web to boost social interaction.", - "html": "<[^>]+(?:id|class)=\"livefyre", - "icon": "Livefyre.png", - "js": { - "FyreLoader": "", - "L.version": "^(.+)$\\;confidence:0\\;version:\\1", - "LF.CommentCount": "", - "fyre": "" - }, - "scripts": "livefyre_init\\.js", - "website": "http://livefyre.com" - }, - "Liveinternet": { - "cats": [ - 10 - ], - "html": [ - "