From 36b9fc59bd4c09cb6894d18b127a91af54b32a94 Mon Sep 17 00:00:00 2001 From: Javad Adib Date: Wed, 5 Aug 2020 01:17:02 +0430 Subject: [PATCH 1/9] Add Jibres Detection --- src/apps.json | 10 ++++++++++ src/drivers/webextension/images/icons/Jibres.svg | 1 + 2 files changed, 11 insertions(+) create mode 100644 src/drivers/webextension/images/icons/Jibres.svg diff --git a/src/apps.json b/src/apps.json index 12d936c35..f942b049a 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6004,6 +6004,16 @@ "implies": "Java", "website": "http://www.eclipse.org/jetty" }, + "Jibres": { + "cats": [ + 6 + ], + "headers": { + "X-Powered-By": "Jibres" + }, + "icon": "Jibres.svg", + "website": "https://jibres.com" + }, "Jimdo": { "cats": [ 1 diff --git a/src/drivers/webextension/images/icons/Jibres.svg b/src/drivers/webextension/images/icons/Jibres.svg new file mode 100644 index 000000000..7dfe4ca8b --- /dev/null +++ b/src/drivers/webextension/images/icons/Jibres.svg @@ -0,0 +1 @@ +Jibres-Logo-icon-zero \ No newline at end of file From f3b5fb1a628d875d4741b8018c69b59ac28012db Mon Sep 17 00:00:00 2001 From: Zihni Artar Date: Wed, 5 Aug 2020 16:43:06 +0200 Subject: [PATCH 2/9] Added SmartStore.NET and Smartstore --- src/apps.json | 39 ++++++++++++++++-- .../images/icons/Smartstore.biz.png | Bin 0 -> 284 bytes .../webextension/images/icons/Smartstore.png | Bin 284 -> 1310 bytes 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 src/drivers/webextension/images/icons/Smartstore.biz.png diff --git a/src/apps.json b/src/apps.json index 12d936c35..8061d33a7 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10976,14 +10976,47 @@ }, "website": "http://www.seneca.nl/pub/Smartsite/Smartsite-Smartsite-iXperion" }, - "Smartstore": { + "Smartstore biz": { "cats": [ 6 ], - "icon": "Smartstore.png", + "icon": "Smartstore.biz.png", "script": "smjslib\\.js", "website": "http://smartstore.com" - }, + } + , + "Smartstore.NET": { + "cats": [ + 1, + 6 + ], + "cookies": { + "SMARTSTORE.VISITOR": "" + }, + "html": "()", + "icon": "smartstore.png", + "implies": "Microsoft ASP.NET", + "meta": { + "generator": "^SmartStore.NET (.+)$\\;version:\\1" + }, + "website": "https://www.smartstore.com" + }, + "Smartstore": { + "cats": [ + 1, + 6 + ], + "cookies": { + "SMARTSTORE.VISITOR": "" + }, + "html": "()", + "icon": "smartstore.png", + "implies": "Microsoft ASP.NET", + "meta": { + "generator": "^Smartstore (.+)$\\;version:\\1" + }, + "website": "https://www.smartstore.com" + }, "Snap": { "cats": [ 18, diff --git a/src/drivers/webextension/images/icons/Smartstore.biz.png b/src/drivers/webextension/images/icons/Smartstore.biz.png new file mode 100644 index 0000000000000000000000000000000000000000..1c35a51951ec36390d3b62ba97f900803e1d566a GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|k3C%+Ln>}12YjC4Ae6-L=>PgO zq0R)UdF28?Qf~TVC+qNLfjQilKPZTb?jZjYGWeP>e+Ckp(#-yaij*rGlIInFVw+7z&FI zOExsH@ctCEF!9ky44=TVQtgoE^NL1}6^-qa6Q76p0d+o6l?-NzP|TUp*1gH$%jce+ z<)-WtS_%|j{75ofP_4I4ti2#nYTZo6i!-m@IzBzy@kYUwS^CT_1$tgK0?j}_ga~#n dkn(V1xG{Cr!o5-N{sFzq;OXk;vd$@?2>`G3XZ`>H literal 0 HcmV?d00001 diff --git a/src/drivers/webextension/images/icons/Smartstore.png b/src/drivers/webextension/images/icons/Smartstore.png index 1c35a51951ec36390d3b62ba97f900803e1d566a..91a23148505bc83788f74e75dbbdcb3ff84d2fdc 100644 GIT binary patch literal 1310 zcmV+(1>yRMP)NOsIp^L(B7y}W1^`G`KgA-7=&?;&fItjL0R#Yko-_TD>6Zt0 zWNKJK38!P;1 z4d-$v2JiejJlf#eyH>SsZ%&E`&Ecp(APiD~n88#2^)GnhD#VZu!E(u}0V()7I1vE0 zQuU4%CQuM>^ApnH3 z5r_e4zvqyD=>Y6HIFXt9DK8@ccq~&zUxSPY0Y>E7-AtzFMIBoJdW0abe&sXo@&O7p zmUO6yK;))SXmc_Vwk#>_05Ef6EfECD^d0doe?p-+gl9agMnC{I#2Yrm8_FMeNFWT- zJaN_Q+D~qDG1h^Zj0}wDdTwW16Sb?C)P`M40K=l`VWC=pfE3vGE_?)2gk4u%nOQIk zfOEZf_Z_~{9IHvxJ6qSr_iSltONLnlr9xFfL;1a5^H>+0`bAowg=?v3*tRW7X9{1P z9enNJ`A<)$g5ZKxfi%1+bMr7+wg1*S02W~u5!eQAS|A}CRKv3i8f$`kQ?zF{sZ-5j?mpWq+2+q^I zcWe$spn#vQjafX=EromF;>-uINCH16#Y|NKu`Sh?p0cdfJEeIW7D}=aCQ$HX6Dh^M zaTC=D0Hr9K^DMn)S9Ny-T5H}W@vKATwIx6RtNP0$B1Fn#^W&}VKhk}9zql&Ww4?Qz z)<}}s*UGMRkpQ11T5DNVauqx%nPUEf&ToH9_c}@w=uEor*g)629k0H;Vtu8H0Eoyl zyfP84{OKbQ0tdRkJ2!H(sV2fA0#T$2#{01A*z$0EU2IvUp@ayAW!t)VMfX{Ri25@l zzYN`ohw3~wMwmr>Hmt6mD4oiV z0#KyphhQm{$$M{ZX-P)iYRv+`CSA5f1h7>3yS7&24~pB?CH8J_MU}xzfdI5OuBfv^ zK@&(x3QekDybbXuf@o&r(~1C$O%^&@qX+jqtrZ3RTpmQkBFkzUcDFr0F+B-_CZ$PP zO5ZQ!R@B9Jw`~r{w4%WDWZu7@^Im_p`OCLA#p@gq5LFo+fnajl+y0Wr=9~WCr;Qi5 zx;EDQ{-&KvYU%+Ld>)@H5K!yt7oKc}12YjC4Ae6-L=>PgO zq0R)UdF28?Qf~TVC+qNLfjQilKPZTb?jZjYGWeP>e+Ckp(#-yaij*rGlIInFVw+7z&FI zOExsH@ctCEF!9ky44=TVQtgoE^NL1}6^-qa6Q76p0d+o6l?-NzP|TUp*1gH$%jce+ z<)-WtS_%|j{75ofP_4I4ti2#nYTZo6i!-m@IzBzy@kYUwS^CT_1$tgK0?j}_ga~#n dkn(V1xG{Cr!o5-N{sFzq;OXk;vd$@?2>`G3XZ`>H From 6a4147b6f9d6d9c336ac5f7b5cd3feb7e1ce6a87 Mon Sep 17 00:00:00 2001 From: Jan Exner Date: Mon, 10 Aug 2020 10:48:09 +0200 Subject: [PATCH 3/9] Add more Adobe Experience Platform technologies --- src/apps.json | 60 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/src/apps.json b/src/apps.json index 7df4efa4a..32bc8c68e 100644 --- a/src/apps.json +++ b/src/apps.json @@ -317,6 +317,27 @@ "script": "[^a-z]adnegah.*\\.js$", "website": "https://Adnegah.net" }, + "Adobe Analytics": { + "cats": [ + 10, + 61 + ], + "js": { + "s_c_il.0._c": "s_c", + "s_c_il.1._c": "s_c", + "s_c_il.2._c": "s_c", + "s_c_il.3._c": "s_c", + "s_c_il.4._c": "s_c", + "s_c_il.5._c": "s_c", + "s_c_il.0.constructor.name": "AppMeasurement", + "s_c_il.1.constructor.name": "AppMeasurement", + "s_c_il.2.constructor.name": "AppMeasurement", + "s_c_il.3.constructor.name": "AppMeasurement", + "s_c_il.4.constructor.name": "AppMeasurement", + "s_c_il.5.constructor.name": "AppMeasurement" + }, + "website": "https://www.adobe.com/analytics/adobe-analytics.html" + }, "Adobe ColdFusion": { "cats": [ 18 @@ -364,6 +385,20 @@ ], "website": "https://www.adobe.com/marketing/experience-manager.html" }, + "Adobe Experience Platform Identity Service": { + "cats": [ + 61 + ], + "js": { + "s_c_il.0._c": "Visitor", + "s_c_il.1._c": "Visitor", + "s_c_il.2._c": "Visitor", + "s_c_il.3._c": "Visitor", + "s_c_il.4._c": "Visitor", + "s_c_il.5._c": "Visitor" + }, + "website": "https://docs.adobe.com/content/help/en/id-service/using/home.html" + }, "Adobe GoLive": { "cats": [ 20 @@ -394,6 +429,17 @@ "script": "(?:wh(?:utils|ver|proxy|lang|topic|msg)|ehlpdhtm)\\.js", "website": "http://adobe.com/products/robohelp.html" }, + "Adobe Target": { + "cats": [ + 32, + 61 + ], + "js": { + "adobe.target": "", + "adobe.target.VERSION": "^(.+)$\\;version:\\1" + }, + "website": "https://www.adobe.com/marketing/target.html" + }, "AdonisJS": { "cats": [ 18 @@ -10838,20 +10884,6 @@ "script": "sitemeter\\.com/js/counter\\.js\\?site=", "website": "http://www.sitemeter.com" }, - "SiteCatalyst": { - "cats": [ - 10 - ], - "icon": "SiteCatalyst.png", - "js": { - "s_INST": "", - "s_account": "", - "s_code": "", - "s_objectID": "" - }, - "script": "/s[_-]code.*\\.js", - "website": "http://www.adobe.com/solutions/digital-marketing.html" - }, "SiteEdit": { "cats": [ 1 From 18bf0b6c203f695701454f51e2f86e20b01ec9a6 Mon Sep 17 00:00:00 2001 From: nirlya Date: Mon, 10 Aug 2020 15:32:45 +0200 Subject: [PATCH 4/9] AppD Detection Optimization --- src/apps.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 7df4efa4a..f90de2295 100644 --- a/src/apps.json +++ b/src/apps.json @@ -1025,7 +1025,10 @@ 10 ], "icon": "AppDynamics.png", - "script": "adrum\\.js|adrum\\.([0-9].*)\\.js\\;version:\\1", + "js": { + "ADRUM.conf.agentVer": "^(.+)$\\;version:\\1" + }, + "script": "adrum", "website": "https://appdynamics.com" }, "AppNexus": { From fbf7ce3a6847c801795bb1641c92a4978fb24cc1 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Wed, 12 Aug 2020 10:36:33 +1000 Subject: [PATCH 5/9] Add probe option, remove languagedetect dependency, emit additional events --- schema.json | 13 ++++ src/drivers/npm/README.md | 15 ++++ src/drivers/npm/driver.js | 138 ++++++++++++++++++++++------------- src/drivers/npm/package.json | 3 +- src/wappalyzer.js | 5 +- 5 files changed, 120 insertions(+), 54 deletions(-) diff --git a/schema.json b/schema.json index b88eb63f6..9160c3e83 100644 --- a/schema.json +++ b/schema.json @@ -97,6 +97,19 @@ } ] }, + "robots": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, "excludes": { "oneOf": [ { diff --git a/src/drivers/npm/README.md b/src/drivers/npm/README.md index a2d83e0b3..9bba60c30 100644 --- a/src/drivers/npm/README.md +++ b/src/drivers/npm/README.md @@ -31,6 +31,7 @@ wappalyzer [options] -m, --max-urls=... Exit when num URLs have been analysed -w, --max-wait=... Wait no more than ms milliseconds for page resources to load -P, --pretty Pretty-print JSON output +-p, --probe Perform a deeper scan by requesting common files -r, --recursive Follow links on pages (crawler) -a, --user-agent=... Set the user agent string ``` @@ -59,6 +60,7 @@ const options = { maxUrls: 10, maxWait: 5000, recursive: true, + probe: true, userAgent: 'Wappalyzer', htmlMaxCols: 2000, htmlMaxRows: 2000, @@ -117,3 +119,16 @@ const urls = ['https://www.wappalyzer.com', 'https://www.example.com'] await wappalyzer.destroy() })() ``` + +### Events + +Listen to events with `site.on(eventName, callback)`. Use the `page` parameter to access the Puppeteer page instance ([reference](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#class-page)). + +| Event | Parameters | Description | +|-------------|--------------------------------|------------------------------------------| +| `log` | `message`, `source` | Debug messages | +| `error` | `message`, `source` | Error messages | +| `request` | `page`, `request` | Emitted at the start of a request | +| `response` | `page`, `request` | Emitted upon receiving a server response | +| `goto` | `page`, `url`, `html`, `cookies`, `scripts`, `meta`, `js`, `language` `links` | Emitted after a page has been analysed | +| `analyze` | `urls`, `technologies`, `meta` | Emitted when the site has been analysed | diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 3bfd47b93..071300020 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -1,7 +1,8 @@ const { URL } = require('url') const fs = require('fs') const path = require('path') -const LanguageDetect = require('languagedetect') +const http = require('http') +const https = require('https') const Wappalyzer = require('./wappalyzer') const { @@ -34,10 +35,6 @@ if (AWS_LAMBDA_FUNCTION_NAME) { puppeteer = require('puppeteer') } -const languageDetect = new LanguageDetect() - -languageDetect.setLanguageType('iso2') - const extensions = /^([^.]+$|\.(asp|aspx|cgi|htm|html|jsp|php)$)/ const { apps: technologies, categories } = JSON.parse( @@ -64,6 +61,32 @@ function analyzeJs(js) { ) } +function get(url) { + if (['http:', 'https:'].includes(url.protocol)) { + const { get } = url.protocol === 'http:' ? http : https + + return new Promise((resolve, reject) => + get(url.href, (response) => { + if (response.statusCode >= 400) { + return reject( + new Error(`${response.statusCode} ${response.statusMessage}`) + ) + } + + response.setEncoding('utf8') + + let body = '' + + response.on('data', (data) => (body += data)) + response.on('error', (error) => reject(new Error(error.message))) + response.on('end', () => resolve(body)) + }) + ) + } else { + throw new Error(`Invalid protocol: ${url.protocol}`) + } +} + class Driver { constructor(options = {}) { this.options = { @@ -74,16 +97,16 @@ class Driver { htmlMaxRows: 3000, maxDepth: 3, maxUrls: 10, - maxWait: 5000, + maxWait: 30000, recursive: false, + probe: false, ...options } this.options.debug = Boolean(+this.options.debug) this.options.recursive = Boolean(+this.options.recursive) - this.options.delay = this.options.recursive - ? parseInt(this.options.delay, 10) - : 0 + this.options.probe = Boolean(+this.options.probe) + this.options.delay = parseInt(this.options.delay, 10) this.options.maxDepth = parseInt(this.options.maxDepth, 10) this.options.maxUrls = parseInt(this.options.maxUrls, 10) this.options.maxWait = parseInt(this.options.maxWait, 10) @@ -161,7 +184,6 @@ class Site { this.analyzedUrls = {} this.detections = [] - this.language = '' this.listeners = {} @@ -191,7 +213,9 @@ class Site { emit(event, params) { if (this.listeners[event]) { - this.listeners[event].forEach((listener) => listener(params)) + return Promise.all( + this.listeners[event].map((listener) => listener(params)) + ) } } @@ -230,15 +254,13 @@ class Site { await page.setRequestInterception(true) - page.on('console', (msg) => console.log('PAGE LOG:', msg._text)) - page.on('dialog', (dialog) => dialog.dismiss()) page.on('error', (error) => this.error(error)) let responseReceived = false - page.on('request', (request) => { + page.on('request', async (request) => { try { if ( (responseReceived && request.isNavigationRequest()) || @@ -252,6 +274,8 @@ class Site { ...this.options.headers } + await this.emit('request', { page, request }) + request.continue({ headers }) } } catch (error) { @@ -259,7 +283,7 @@ class Site { } }) - page.on('response', (response) => { + page.on('response', async (response) => { try { if (response.url() === url.href) { this.analyzedUrls[url.href] = { @@ -288,6 +312,8 @@ class Site { responseReceived = true this.onDetect(analyze({ headers })) + + await this.emit('response', { page, response }) } } } catch (error) { @@ -440,34 +466,6 @@ class Site { throw new Error('No response from server') } - if (!this.language) { - this.language = await Promise.race([ - this.timeout(), - ( - await page.evaluateHandle( - () => - document.documentElement.getAttribute('lang') || - document.documentElement.getAttribute('xml:lang') - ) - ).jsonValue() - ]) - } - - if (!this.language) { - try { - const [attrs] = languageDetect.detect( - html.replace(/<\/?[^>]+(>|$)/gs, ' '), - 1 - ) - - if (attrs) { - ;[this.language] = attrs - } - } catch (error) { - this.error(error) - } - } - this.onDetect(analyzeJs(js)) this.onDetect( @@ -503,12 +501,21 @@ class Site { [] ) + await this.emit('goto', { + page, + url, + html, + cookies, + scripts, + meta, + js, + links: reducedLinks + }) + await page.close() this.log('Page closed') - this.emit('goto', url) - return reducedLinks } catch (error) { this.error(error) @@ -517,7 +524,13 @@ class Site { async analyze(url = this.originalUrl, index = 1, depth = 1) { try { - await sleep(this.options.delay * index) + if (this.recursive) { + await sleep(this.options.delay * index) + } + + if (this.options.probe) { + await this.probe(url) + } const links = await this.goto(url) @@ -533,7 +546,7 @@ class Site { this.error(error) } - return { + const results = { urls: this.analyzedUrls, technologies: resolve(this.detections).map( ({ @@ -559,9 +572,32 @@ class Site { name })) }) - ), - meta: { - language: this.language + ) + } + + await this.emit('analyze', results) + + return results + } + + async probe(url) { + const files = { + robots: '/robots.txt' + } + + for (const file of Object.keys(files)) { + const path = files[file] + + try { + await sleep(this.options.delay) + + const body = await get(new URL(path, url.href)) + + this.log(`get ${path}: ok`) + + this.onDetect(analyze({ [file]: body })) + } catch (error) { + this.error(`get ${path}: ${error.message || error}`) } } } @@ -580,7 +616,7 @@ class Site { await this.batch(links, depth, batch + 1) } - onDetect(detections = [], language) { + onDetect(detections = []) { this.detections = this.detections.concat(detections) this.detections.filter( diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 40256719d..1962f3b8f 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -35,7 +35,6 @@ "wappalyzer": "./cli.js" }, "dependencies": { - "languagedetect": "^2.0.0", "puppeteer": "^2.0.0" } -} \ No newline at end of file +} diff --git a/src/wappalyzer.js b/src/wappalyzer.js index e633667f7..07f87ee9e 100644 --- a/src/wappalyzer.js +++ b/src/wappalyzer.js @@ -180,7 +180,7 @@ const Wappalyzer = { * Initialize analyzation. * @param {*} param0 */ - analyze({ url, html, meta, headers, cookies, scripts }) { + analyze({ url, html, robots, meta, headers, cookies, scripts }) { const oo = Wappalyzer.analyzeOneToOne const om = Wappalyzer.analyzeOneToMany const mm = Wappalyzer.analyzeManyToMany @@ -193,6 +193,7 @@ const Wappalyzer = { flatten([ oo(technology, 'url', url), oo(technology, 'html', html), + oo(technology, 'robots', robots), om(technology, 'scripts', scripts), mm(technology, 'cookies', cookies), mm(technology, 'meta', meta), @@ -219,6 +220,7 @@ const Wappalyzer = { cats, url, html, + robots, meta, headers, cookies, @@ -239,6 +241,7 @@ const Wappalyzer = { headers: transform(headers), cookies: transform(cookies), html: transform(html), + robots: transform(robots), meta: transform(meta), scripts: transform(script), js: transform(js, true), From 1375b133d0ce9aa5993d6d90404dabf32d6e2e59 Mon Sep 17 00:00:00 2001 From: Kyle Taylor Date: Thu, 13 Aug 2020 12:08:58 -0500 Subject: [PATCH 6/9] Update Pantheon header detection --- src/apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 7df4efa4a..0efbec8e4 100644 --- a/src/apps.json +++ b/src/apps.json @@ -8818,7 +8818,8 @@ ], "headers": { "Server": "^Pantheon", - "x-pantheon-styx-hostname": "" + "x-pantheon-styx-hostname": "", + "x-styx-req-id": "" }, "icon": "pantheon.svg", "implies": [ From 8fa98af1be22f90498c28b8777745eed9ac63dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=8F=84=EB=8B=A4?= Date: Mon, 17 Aug 2020 02:55:04 +0900 Subject: [PATCH 7/9] Added korean translation. have some literal translation --- .../webextension/_locales/ko/messages.json | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 src/drivers/webextension/_locales/ko/messages.json diff --git a/src/drivers/webextension/_locales/ko/messages.json b/src/drivers/webextension/_locales/ko/messages.json new file mode 100644 index 000000000..9e6f2f47e --- /dev/null +++ b/src/drivers/webextension/_locales/ko/messages.json @@ -0,0 +1,89 @@ +{ + "github": { "message": "GitHub에서 Wappalyzer를 포크하세요!" }, + "twitter": { "message": "Twitter에서 Wappalyzer 팔로우" }, + "website": { "message": "wappalyzer.com으로 가기" }, + "options": { "message": "설정" }, + "optionsSave": { "message": "설정 저장" }, + "optionsSaved": { "message": "저장됨" }, + "optionUpgradeMessage": { "message": "업그레이드에 대해 알리기" }, + "optionDynamicIcon": { "message": "Wappalyzer 로고 대신 식별된 기술 아이콘을 사용" }, + "optionTracking": { "message": "익명으로 wappalyzer.com에 식별된 기술 정보 전송" }, + "optionThemeMode": { "message": "다크 모드 호환 활성화" }, + "optionBadge": { "message": "아이콘에 식별된 기술 갯수 표시" }, + "disableOnDomain": { "message": "이 웹 사이트에서 끄기" }, + "clearCache": { "message": "캐시된 식별 정보 지우기" }, + "nothingToDo": { "message": "여기에는 할 일이 없네요." }, + "noAppsDetected": { "message": "식별된 기술이 없습니다." }, + "categoryPin": { "message": "항상 아이콘 보이기" }, + "termsAccept": { "message": "수락" }, + "termsContent": { "message": "이 확장 기능은 사이트의 도메인과 식별된 기술을 포함한 익명 정보를 wappalyzer.com에 전송합니다. 이 기능은 설정에서 비활성화 할 수 있습니다." }, + "privacyPolicy": { "message": "개인정보처리방침" }, + "createAlert": { "message": "이 웹 사이트에 대한 알림 받기" }, + "categoryName1": { "message": "CMS" }, + "categoryName2": { "message": "포럼 소프트웨어" }, + "categoryName3": { "message": "데이터베이스 관리 도구" }, + "categoryName4": { "message": "문서 도구" }, + "categoryName5": { "message": "위젯" }, + "categoryName6": { "message": "전자상거래" }, + "categoryName7": { "message": "사진 갤러리" }, + "categoryName8": { "message": "위키" }, + "categoryName9": { "message": "호스팅 패널" }, + "categoryName10": { "message": "분석" }, + "categoryName11": { "message": "블로그" }, + "categoryName12": { "message": "JavaScript 프레임워크" }, + "categoryName13": { "message": "이슈 트래커" }, + "categoryName14": { "message": "비디오 플레이어" }, + "categoryName15": { "message": "댓글 시스템" }, + "categoryName16": { "message": "보안" }, + "categoryName17": { "message": "폰트 스크립트" }, + "categoryName18": { "message": "웹 프레임워크" }, + "categoryName19": { "message": "기타" }, + "categoryName20": { "message": "에디터" }, + "categoryName21": { "message": "LMS" }, + "categoryName22": { "message": "웹 서버" }, + "categoryName23": { "message": "캐싱" }, + "categoryName24": { "message": "텍스트 에디터" }, + "categoryName25": { "message": "JavaScript 그래픽" }, + "categoryName26": { "message": "모바일 프레임워크" }, + "categoryName27": { "message": "프로그래밍 언어" }, + "categoryName28": { "message": "운영체제" }, + "categoryName29": { "message": "검색 엔진" }, + "categoryName30": { "message": "웹 메일" }, + "categoryName31": { "message": "CDN" }, + "categoryName32": { "message": "마케팅 자동화" }, + "categoryName33": { "message": "웹 서버 확장" }, + "categoryName34": { "message": "데이터베이스" }, + "categoryName35": { "message": "지도" }, + "categoryName36": { "message": "광고" }, + "categoryName37": { "message": "네트워크 서비스" }, + "categoryName38": { "message": "미디어 서버" }, + "categoryName39": { "message": "웹캠" }, + "categoryName40": { "message": "프린터" }, + "categoryName41": { "message": "결제 처리" }, + "categoryName42": { "message": "Tag managers" }, + "categoryName44": { "message": "CI" }, + "categoryName46": { "message": "원격 접속" }, + "categoryName47": { "message": "개발" }, + "categoryName48": { "message": "네트워크 스토리지" }, + "categoryName49": { "message": "피드 리더" }, + "categoryName50": { "message": "DMS" }, + "categoryName51": { "message": "사이트 제작 도구" }, + "categoryName52": { "message": "실시간 채팅" }, + "categoryName53": { "message": "CRM" }, + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "회계" }, + "categoryName56": { "message": "가상화폐 채굴기" }, + "categoryName57": { "message": "정적 사이트 생성기" }, + "categoryName58": { "message": "사용자 유도" }, + "categoryName59": { "message": "JavaScript 라이브러리" }, + "categoryName60": { "message": "컨테이너" }, + "categoryName61": { "message": "SaaS" }, + "categoryName62": { "message": "PaaS" }, + "categoryName63": { "message": "IaaS" }, + "categoryName64": { "message": "리버스 프록시" }, + "categoryName65": { "message": "로드 밸런서" }, + "categoryName66": { "message": "UI 프레임워크" }, + "categoryName67": { "message": "쿠키 동의" }, + "categoryName68": { "message": "접근성"}, + "categoryName69": { "message": "소셜 로그인"} +} From ec202c8f4af0328d4cd2d9b3a262c8d1296b7f60 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Mon, 17 Aug 2020 11:34:00 +1000 Subject: [PATCH 8/9] Disable CORS in NPM driver --- src/apps.json | 1 - src/drivers/npm/driver.js | 3 ++- src/drivers/npm/package.json | 2 +- src/package.json | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/apps.json b/src/apps.json index 7df4efa4a..b25038beb 100644 --- a/src/apps.json +++ b/src/apps.json @@ -4787,7 +4787,6 @@ }, "Google Analytics Enhanced eCommerce": { "cats": [ - 6, 10 ], "icon": "Google Analytics.svg", diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 071300020..0f979966a 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -20,7 +20,8 @@ let chromiumArgs = [ '--no-sandbox', '--headless', '--disable-gpu', - '--ignore-certificate-errors' + '--ignore-certificate-errors', + '--disable-web-security' ] let chromiumBin = CHROMIUM_BIN diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 1962f3b8f..0af29dbbf 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -13,7 +13,7 @@ "software" ], "homepage": "https://www.wappalyzer.com", - "version": "6.2.4", + "version": "6.2.5", "author": "Wappalyzer", "license": "MIT", "repository": { diff --git a/src/package.json b/src/package.json index 4c3ce89e7..a696f87f5 100644 --- a/src/package.json +++ b/src/package.json @@ -13,7 +13,7 @@ "software" ], "homepage": "https://www.wappalyzer.com", - "version": "6.2.4", + "version": "6.2.5", "author": "Wappalyzer", "license": "MIT", "repository": { @@ -27,4 +27,4 @@ "files": [ "wappalyzer.js" ] -} \ No newline at end of file +} From 7954bd1a5202f0df8451b116b2c729f7bbf1f159 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Mon, 17 Aug 2020 14:47:36 +1000 Subject: [PATCH 9/9] Add Adobe icons --- src/apps.json | 10 +++++++--- src/drivers/npm/package.json | 2 +- .../images/icons/Adobe Analytics.svg | 16 ++++++++++++++++ .../images/icons/Adobe Experience Manager.svg | 1 - src/drivers/webextension/images/icons/Adobe.svg | 12 ++++++++++++ .../webextension/images/icons/SiteCatalyst.png | Bin 623 -> 0 bytes src/package.json | 2 +- 7 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 src/drivers/webextension/images/icons/Adobe Analytics.svg delete mode 100644 src/drivers/webextension/images/icons/Adobe Experience Manager.svg create mode 100644 src/drivers/webextension/images/icons/Adobe.svg delete mode 100644 src/drivers/webextension/images/icons/SiteCatalyst.png diff --git a/src/apps.json b/src/apps.json index 34c80872a..4080fa36f 100644 --- a/src/apps.json +++ b/src/apps.json @@ -336,6 +336,7 @@ "s_c_il.4.constructor.name": "AppMeasurement", "s_c_il.5.constructor.name": "AppMeasurement" }, + "icon": "Adobe Analytics.svg", "website": "https://www.adobe.com/analytics/adobe-analytics.html" }, "Adobe ColdFusion": { @@ -383,6 +384,7 @@ "/etc/clientlibs/", "/etc\\.clientlibs/" ], + "icon": "Adobe.svg", "website": "https://www.adobe.com/marketing/experience-manager.html" }, "Adobe Experience Platform Identity Service": { @@ -397,6 +399,7 @@ "s_c_il.4._c": "Visitor", "s_c_il.5._c": "Visitor" }, + "icon": "Adobe.svg", "website": "https://docs.adobe.com/content/help/en/id-service/using/home.html" }, "Adobe GoLive": { @@ -438,6 +441,7 @@ "adobe.target": "", "adobe.target.VERSION": "^(.+)$\\;version:\\1" }, + "icon": "Adobe.svg", "website": "https://www.adobe.com/marketing/target.html" }, "AdonisJS": { @@ -11050,7 +11054,7 @@ "cookies": { "SMARTSTORE.VISITOR": "" }, - "html": "()", + "html": "", "icon": "smartstore.png", "implies": "Microsoft ASP.NET", "meta": { @@ -11066,8 +11070,8 @@ "cookies": { "SMARTSTORE.VISITOR": "" }, - "html": "()", - "icon": "smartstore.png", + "html": "", + "icon": "Smartstore.png", "implies": "Microsoft ASP.NET", "meta": { "generator": "^Smartstore (.+)$\\;version:\\1" diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 0af29dbbf..0199da6df 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -13,7 +13,7 @@ "software" ], "homepage": "https://www.wappalyzer.com", - "version": "6.2.5", + "version": "6.2.6", "author": "Wappalyzer", "license": "MIT", "repository": { diff --git a/src/drivers/webextension/images/icons/Adobe Analytics.svg b/src/drivers/webextension/images/icons/Adobe Analytics.svg new file mode 100644 index 000000000..cb2827f2f --- /dev/null +++ b/src/drivers/webextension/images/icons/Adobe Analytics.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/Adobe Experience Manager.svg b/src/drivers/webextension/images/icons/Adobe Experience Manager.svg deleted file mode 100644 index af1c873a1..000000000 --- a/src/drivers/webextension/images/icons/Adobe Experience Manager.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/Adobe.svg b/src/drivers/webextension/images/icons/Adobe.svg new file mode 100644 index 000000000..0843b200c --- /dev/null +++ b/src/drivers/webextension/images/icons/Adobe.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/SiteCatalyst.png b/src/drivers/webextension/images/icons/SiteCatalyst.png deleted file mode 100644 index 002de3d70a519a28bf2daed49d83075d47f347ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmV-#0+9WQP)@6FVQuu zQlf3PZ(6N9w|1rM8!Y%O5N}3T-?_m+x^{)kZyb8wknDicCG2bR7c%_Efe)jrZ(JiU zk4OD~7BUJ}Mn*D9U8=>)#BG)i{aekFa9}TV^|SVR^Ym{u&A_FH>S<)!c5m7y!uh+C z&FAk*3dMmP(ACe`6~O@%kHV#goJ6=Ke*rK7VaKO26QP^}9`&RrLPiFr?|4$-cPu*o z;Y+nlWMqObzmxA!=;Czcroi&aEe4PCV^rd8+5GD4J=v0u@+C!dIY0#S}jMY zC}#YREtURf#9e?gl9+Gssb>=8mMsY;it67AYU)oegHXIy$1iWafr zEGFC6Yuln5SiFRNE1shD47&RIRkHYtVn#-$&%i{;iz5O3!BP}|!&9_=!_s=dUlcPl zvV37;V)??%#EOD}V*i;Kng60|0LuM9SBr$PIDq*-P@Dmm9sn}9>;Kuy6aN4J002ov JPDHLkV1hTHAuIp@ diff --git a/src/package.json b/src/package.json index a696f87f5..e9aba8300 100644 --- a/src/package.json +++ b/src/package.json @@ -13,7 +13,7 @@ "software" ], "homepage": "https://www.wappalyzer.com", - "version": "6.2.5", + "version": "6.2.6", "author": "Wappalyzer", "license": "MIT", "repository": {