diff --git a/drivers/bookmarklet/images/icons/3DM.png b/drivers/bookmarklet/images/icons/3DM.png new file mode 100755 index 000000000..69e17bcb4 Binary files /dev/null and b/drivers/bookmarklet/images/icons/3DM.png differ diff --git a/drivers/bookmarklet/images/icons/3ware.png b/drivers/bookmarklet/images/icons/3ware.png new file mode 100755 index 000000000..69e17bcb4 Binary files /dev/null and b/drivers/bookmarklet/images/icons/3ware.png differ diff --git a/drivers/bookmarklet/images/icons/ATEN.png b/drivers/bookmarklet/images/icons/ATEN.png new file mode 100755 index 000000000..f15a46b5f Binary files /dev/null and b/drivers/bookmarklet/images/icons/ATEN.png differ diff --git a/drivers/bookmarklet/images/icons/Apache HBase.png b/drivers/bookmarklet/images/icons/Apache HBase.png new file mode 100644 index 000000000..113d901a6 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Apache HBase.png differ diff --git a/drivers/bookmarklet/images/icons/Apache Hadoop.png b/drivers/bookmarklet/images/icons/Apache Hadoop.png new file mode 100755 index 000000000..39075d893 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Apache Hadoop.png differ diff --git a/drivers/bookmarklet/images/icons/Backbone.js.png b/drivers/bookmarklet/images/icons/Backbone.js.png index 7d774c810..d45b1b17b 100644 Binary files a/drivers/bookmarklet/images/icons/Backbone.js.png and b/drivers/bookmarklet/images/icons/Backbone.js.png differ diff --git a/drivers/bookmarklet/images/icons/BaseHTTP.png b/drivers/bookmarklet/images/icons/BaseHTTP.png new file mode 100755 index 000000000..68b9f6bfc Binary files /dev/null and b/drivers/bookmarklet/images/icons/BaseHTTP.png differ diff --git a/drivers/bookmarklet/images/icons/Boa.png b/drivers/bookmarklet/images/icons/Boa.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Boa.png differ diff --git a/drivers/bookmarklet/images/icons/Brother.png b/drivers/bookmarklet/images/icons/Brother.png new file mode 100755 index 000000000..fbc41595e Binary files /dev/null and b/drivers/bookmarklet/images/icons/Brother.png differ diff --git a/drivers/bookmarklet/images/icons/Canon.png b/drivers/bookmarklet/images/icons/Canon.png new file mode 100755 index 000000000..40ed3b98d Binary files /dev/null and b/drivers/bookmarklet/images/icons/Canon.png differ diff --git a/drivers/bookmarklet/images/icons/Catwalk.png b/drivers/bookmarklet/images/icons/Catwalk.png new file mode 100755 index 000000000..40ed3b98d Binary files /dev/null and b/drivers/bookmarklet/images/icons/Catwalk.png differ diff --git a/drivers/bookmarklet/images/icons/Chartbeat.png b/drivers/bookmarklet/images/icons/Chartbeat.png new file mode 100644 index 000000000..2cb597cc7 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Chartbeat.png differ diff --git a/drivers/bookmarklet/images/icons/CherryPy.png b/drivers/bookmarklet/images/icons/CherryPy.png new file mode 100755 index 000000000..badc40ac2 Binary files /dev/null and b/drivers/bookmarklet/images/icons/CherryPy.png differ diff --git a/drivers/bookmarklet/images/icons/Cloudera.png b/drivers/bookmarklet/images/icons/Cloudera.png new file mode 100755 index 000000000..4d3a6a1d4 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Cloudera.png differ diff --git a/drivers/bookmarklet/images/icons/CodeMirror.png b/drivers/bookmarklet/images/icons/CodeMirror.png new file mode 100644 index 000000000..ef34d402c Binary files /dev/null and b/drivers/bookmarklet/images/icons/CodeMirror.png differ diff --git a/drivers/bookmarklet/images/icons/CompaqHTTPServer.png b/drivers/bookmarklet/images/icons/CompaqHTTPServer.png new file mode 100755 index 000000000..2b0bc39df Binary files /dev/null and b/drivers/bookmarklet/images/icons/CompaqHTTPServer.png differ diff --git a/drivers/bookmarklet/images/icons/Cufon.png b/drivers/bookmarklet/images/icons/Cufon.png new file mode 100644 index 000000000..cd2e3f029 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Cufon.png differ diff --git a/drivers/bookmarklet/images/icons/Darwin.png b/drivers/bookmarklet/images/icons/Darwin.png new file mode 100755 index 000000000..41b6c8b00 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Darwin.png differ diff --git a/drivers/bookmarklet/images/icons/Dell.png b/drivers/bookmarklet/images/icons/Dell.png new file mode 100755 index 000000000..76a80b4fa Binary files /dev/null and b/drivers/bookmarklet/images/icons/Dell.png differ diff --git a/drivers/bookmarklet/images/icons/ELOG HTTP.png b/drivers/bookmarklet/images/icons/ELOG HTTP.png new file mode 100644 index 000000000..7af2b77e9 Binary files /dev/null and b/drivers/bookmarklet/images/icons/ELOG HTTP.png differ diff --git a/drivers/bookmarklet/images/icons/ELOG.png b/drivers/bookmarklet/images/icons/ELOG.png new file mode 100644 index 000000000..7af2b77e9 Binary files /dev/null and b/drivers/bookmarklet/images/icons/ELOG.png differ diff --git a/drivers/bookmarklet/images/icons/EWS-NIC4.png b/drivers/bookmarklet/images/icons/EWS-NIC4.png new file mode 100755 index 000000000..76a80b4fa Binary files /dev/null and b/drivers/bookmarklet/images/icons/EWS-NIC4.png differ diff --git a/drivers/bookmarklet/images/icons/Erlang.png b/drivers/bookmarklet/images/icons/Erlang.png new file mode 100755 index 000000000..235338617 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Erlang.png differ diff --git a/drivers/bookmarklet/images/icons/FlashCom.png b/drivers/bookmarklet/images/icons/FlashCom.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/bookmarklet/images/icons/FlashCom.png differ diff --git a/drivers/bookmarklet/images/icons/Grandstream.png b/drivers/bookmarklet/images/icons/Grandstream.png new file mode 100755 index 000000000..b4b1eb66b Binary files /dev/null and b/drivers/bookmarklet/images/icons/Grandstream.png differ diff --git a/drivers/bookmarklet/images/icons/HP ProCurve.png b/drivers/bookmarklet/images/icons/HP ProCurve.png new file mode 100755 index 000000000..2b0bc39df Binary files /dev/null and b/drivers/bookmarklet/images/icons/HP ProCurve.png differ diff --git a/drivers/bookmarklet/images/icons/Highstock.png b/drivers/bookmarklet/images/icons/Highstock.png new file mode 100755 index 000000000..6e8391d36 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Highstock.png differ diff --git a/drivers/bookmarklet/images/icons/Indico.png b/drivers/bookmarklet/images/icons/Indico.png new file mode 100755 index 000000000..02636b6cc Binary files /dev/null and b/drivers/bookmarklet/images/icons/Indico.png differ diff --git a/drivers/bookmarklet/images/icons/Intercom.png b/drivers/bookmarklet/images/icons/Intercom.png new file mode 100644 index 000000000..40d2321a0 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Intercom.png differ diff --git a/drivers/bookmarklet/images/icons/Jetty.png b/drivers/bookmarklet/images/icons/Jetty.png new file mode 100755 index 000000000..807b88634 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Jetty.png differ diff --git a/drivers/bookmarklet/images/icons/KS_HTTP.png b/drivers/bookmarklet/images/icons/KS_HTTP.png new file mode 100755 index 000000000..40ed3b98d Binary files /dev/null and b/drivers/bookmarklet/images/icons/KS_HTTP.png differ diff --git a/drivers/bookmarklet/images/icons/LabVIEW.png b/drivers/bookmarklet/images/icons/LabVIEW.png new file mode 100755 index 000000000..c832bdc54 Binary files /dev/null and b/drivers/bookmarklet/images/icons/LabVIEW.png differ diff --git a/drivers/bookmarklet/images/icons/Less.png b/drivers/bookmarklet/images/icons/Less.png new file mode 100644 index 000000000..9e1de2359 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Less.png differ diff --git a/drivers/bookmarklet/images/icons/LiveStreet CMS.png b/drivers/bookmarklet/images/icons/LiveStreet CMS.png new file mode 100644 index 000000000..75a0029aa Binary files /dev/null and b/drivers/bookmarklet/images/icons/LiveStreet CMS.png differ diff --git a/drivers/bookmarklet/images/icons/Logitech Media Server.png b/drivers/bookmarklet/images/icons/Logitech Media Server.png new file mode 100755 index 000000000..b2e6cb1f2 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Logitech Media Server.png differ diff --git a/drivers/bookmarklet/images/icons/MOBOTIX.png b/drivers/bookmarklet/images/icons/MOBOTIX.png new file mode 100755 index 000000000..321f9a8b1 Binary files /dev/null and b/drivers/bookmarklet/images/icons/MOBOTIX.png differ diff --git a/drivers/bookmarklet/images/icons/MiniServ.png b/drivers/bookmarklet/images/icons/MiniServ.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/bookmarklet/images/icons/MiniServ.png differ diff --git a/drivers/bookmarklet/images/icons/Mono.png b/drivers/bookmarklet/images/icons/Mono.png new file mode 100644 index 000000000..912809eb2 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Mono.png differ diff --git a/drivers/bookmarklet/images/icons/PerfSONAR-PS.png b/drivers/bookmarklet/images/icons/PerfSONAR-PS.png new file mode 100755 index 000000000..13be42d00 Binary files /dev/null and b/drivers/bookmarklet/images/icons/PerfSONAR-PS.png differ diff --git a/drivers/bookmarklet/images/icons/Posterous.png b/drivers/bookmarklet/images/icons/Posterous.png new file mode 100644 index 000000000..3150f4f93 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Posterous.png differ diff --git a/drivers/bookmarklet/images/icons/Prefix-Free.png b/drivers/bookmarklet/images/icons/Prefix-Free.png new file mode 100644 index 000000000..87a646815 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Prefix-Free.png differ diff --git a/drivers/bookmarklet/images/icons/SAP.png b/drivers/bookmarklet/images/icons/SAP.png new file mode 100644 index 000000000..9217c8f87 Binary files /dev/null and b/drivers/bookmarklet/images/icons/SAP.png differ diff --git a/drivers/bookmarklet/images/icons/Sentinel Keys Server.png b/drivers/bookmarklet/images/icons/Sentinel Keys Server.png new file mode 100755 index 000000000..50e127fbf Binary files /dev/null and b/drivers/bookmarklet/images/icons/Sentinel Keys Server.png differ diff --git a/drivers/bookmarklet/images/icons/Sentinel License Monitor.png b/drivers/bookmarklet/images/icons/Sentinel License Monitor.png new file mode 100755 index 000000000..50e127fbf Binary files /dev/null and b/drivers/bookmarklet/images/icons/Sentinel License Monitor.png differ diff --git a/drivers/bookmarklet/images/icons/Sentinel Protection Server.png b/drivers/bookmarklet/images/icons/Sentinel Protection Server.png new file mode 100755 index 000000000..50e127fbf Binary files /dev/null and b/drivers/bookmarklet/images/icons/Sentinel Protection Server.png differ diff --git a/drivers/bookmarklet/images/icons/Splunk.png b/drivers/bookmarklet/images/icons/Splunk.png new file mode 100755 index 000000000..bd2a1a514 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Splunk.png differ diff --git a/drivers/bookmarklet/images/icons/Splunkd.png b/drivers/bookmarklet/images/icons/Splunkd.png new file mode 100755 index 000000000..bd2a1a514 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Splunkd.png differ diff --git a/drivers/bookmarklet/images/icons/SunOS.png b/drivers/bookmarklet/images/icons/SunOS.png new file mode 100755 index 000000000..725070080 Binary files /dev/null and b/drivers/bookmarklet/images/icons/SunOS.png differ diff --git a/drivers/bookmarklet/images/icons/TWiki.png b/drivers/bookmarklet/images/icons/TWiki.png new file mode 100644 index 000000000..f6573b7fa Binary files /dev/null and b/drivers/bookmarklet/images/icons/TWiki.png differ diff --git a/drivers/bookmarklet/images/icons/Underscore.js.png b/drivers/bookmarklet/images/icons/Underscore.js.png index 10262b99d..030496838 100644 Binary files a/drivers/bookmarklet/images/icons/Underscore.js.png and b/drivers/bookmarklet/images/icons/Underscore.js.png differ diff --git a/drivers/bookmarklet/images/icons/Wink.png b/drivers/bookmarklet/images/icons/Wink.png new file mode 100644 index 000000000..3e7204032 Binary files /dev/null and b/drivers/bookmarklet/images/icons/Wink.png differ diff --git a/drivers/bookmarklet/images/icons/Wowza Media Server.png b/drivers/bookmarklet/images/icons/Wowza Media Server.png new file mode 100755 index 000000000..2e7c25e2b Binary files /dev/null and b/drivers/bookmarklet/images/icons/Wowza Media Server.png differ diff --git a/drivers/bookmarklet/images/icons/XAMPP.png b/drivers/bookmarklet/images/icons/XAMPP.png new file mode 100755 index 000000000..7104b0e4d Binary files /dev/null and b/drivers/bookmarklet/images/icons/XAMPP.png differ diff --git a/drivers/bookmarklet/images/icons/Xajax.png b/drivers/bookmarklet/images/icons/Xajax.png new file mode 100644 index 000000000..bba0d40ab Binary files /dev/null and b/drivers/bookmarklet/images/icons/Xajax.png differ diff --git a/drivers/bookmarklet/images/icons/Zabbix.png b/drivers/bookmarklet/images/icons/Zabbix.png new file mode 100755 index 000000000..c7384dc3e Binary files /dev/null and b/drivers/bookmarklet/images/icons/Zabbix.png differ diff --git a/drivers/bookmarklet/images/icons/debut.png b/drivers/bookmarklet/images/icons/debut.png new file mode 100755 index 000000000..fbc41595e Binary files /dev/null and b/drivers/bookmarklet/images/icons/debut.png differ diff --git a/drivers/bookmarklet/images/icons/default.png b/drivers/bookmarklet/images/icons/default.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/bookmarklet/images/icons/default.png differ diff --git a/drivers/bookmarklet/images/icons/dwhttpd.png b/drivers/bookmarklet/images/icons/dwhttpd.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/bookmarklet/images/icons/dwhttpd.png differ diff --git a/drivers/bookmarklet/images/icons/eHTTP.png b/drivers/bookmarklet/images/icons/eHTTP.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/bookmarklet/images/icons/eHTTP.png differ diff --git a/drivers/bookmarklet/images/icons/libwww-perl-daemon.png b/drivers/bookmarklet/images/icons/libwww-perl-daemon.png new file mode 100755 index 000000000..2110788f2 Binary files /dev/null and b/drivers/bookmarklet/images/icons/libwww-perl-daemon.png differ diff --git a/drivers/bookmarklet/images/icons/mod_auth_pam.png b/drivers/bookmarklet/images/icons/mod_auth_pam.png new file mode 100755 index 000000000..d268dcca8 Binary files /dev/null and b/drivers/bookmarklet/images/icons/mod_auth_pam.png differ diff --git a/drivers/bookmarklet/images/icons/mod_jk.png b/drivers/bookmarklet/images/icons/mod_jk.png new file mode 100755 index 000000000..d268dcca8 Binary files /dev/null and b/drivers/bookmarklet/images/icons/mod_jk.png differ diff --git a/drivers/bookmarklet/images/icons/mod_perl.png b/drivers/bookmarklet/images/icons/mod_perl.png new file mode 100755 index 000000000..3f0559995 Binary files /dev/null and b/drivers/bookmarklet/images/icons/mod_perl.png differ diff --git a/drivers/bookmarklet/images/icons/posterous.png b/drivers/bookmarklet/images/icons/posterous.png index 3730d31aa..3150f4f93 100644 Binary files a/drivers/bookmarklet/images/icons/posterous.png and b/drivers/bookmarklet/images/icons/posterous.png differ diff --git a/drivers/bookmarklet/js/wappalyzer.js b/drivers/bookmarklet/js/wappalyzer.js index 6257ac81e..3bb3d9ad2 100644 --- a/drivers/bookmarklet/js/wappalyzer.js +++ b/drivers/bookmarklet/js/wappalyzer.js @@ -13,64 +13,64 @@ var wappalyzer = (function() { * Application class */ var Application = function(app, detected) { - var self = this; - - self.app = app; - self.confidence = {}; - self.confidenceTotal = 0; - self.detected = Boolean(detected); - self.version = ''; - self.versions = []; + this.app = app; + this.confidence = {}; + this.confidenceTotal = 0; + this.detected = Boolean(detected); + this.version = ''; + this.versions = []; + }; + Application.prototype = { /** * Calculate confidence total */ - self.getConfidence = function() { + getConfidence: function() { var total = 0; - for ( id in self.confidence ) { - total += self.confidence[id]; + for ( id in this.confidence ) { + total += this.confidence[id]; } - return self.confidenceTotal = Math.min(total, 100); - } + return this.confidenceTotal = Math.min(total, 100); + }, /** * Resolve version number (find the longest version number that contains all shorter detected version numbers) */ - self.getVersion = function() { - var next, resolved; + getVersion: function() { + var i, next, resolved; - if ( !self.versions.length ) { + if ( !this.versions.length ) { return; } - self.versions.sort(function(a, b) { + this.versions.sort(function(a, b) { return a.length > b.length ? 1 : ( a.length < b.length ? -1 : 0 ); }); - resolved = self.versions[0]; + resolved = this.versions[0]; - for ( i in self.versions ) { + for ( i in this.versions ) { next = parseInt(i) + 1; - if ( next < self.versions.length ) { - if ( self.versions[next].indexOf(self.versions[i]) !== -1 ) { - resolved = self.versions[next]; + if ( next < this.versions.length ) { + if ( this.versions[next].indexOf(this.versions[i]) !== -1 ) { + resolved = this.versions[next]; } else { break; } } } - return self.version = resolved; - } + return this.version = resolved; + }, - self.setDetected = function(pattern, type, value, key) { - self.detected = true; + setDetected: function(pattern, type, value, key) { + this.detected = true; // Set confidence level - self.confidence[type + ' ' + ( key ? key + ' ' : '' ) + pattern.regex] = pattern.confidence ? pattern.confidence : 100; + this.confidence[type + ' ' + ( key ? key + ' ' : '' ) + pattern.regex] = pattern.confidence ? pattern.confidence : 100; // Detect version number if ( pattern.version ) { @@ -79,13 +79,20 @@ var wappalyzer = (function() { matches = pattern.regex.exec(value) ; + w.log({ matches: matches, version: version }); + if ( matches ) { matches.map(function(match, i) { // Parse ternary operator var ternary = new RegExp('\\\\' + i + '\\?([^:]+):(.+)$').exec(version); if ( ternary && ternary.length === 3 ) { + + w.log({ match: match, i: i, ternary: ternary }); + version = version.replace(ternary[0], match ? ternary[1] : ternary[2]); + + w.log({ version: version }); } // Replace back references @@ -93,14 +100,43 @@ var wappalyzer = (function() { }); if ( version ) { - self.versions.push(version); + this.versions.push(version); } - self.getVersion(); + this.getVersion(); } } } - } + }; + + var Profiler = function() { + this.regexCount = 0; + this.startTime = new Date().getTime(); + this.lastTime = new Date().getTime(); + this.slowest = { duration: null, app: '', type: '', pattern: '' }; + this.timedOut = false; + }; + + Profiler.prototype = { + checkPoint: function(app, type, regex) { + var duration = new Date().getTime() - this.lastTime; + + if ( !this.slowest.duration || duration > this.slowest.duration ) { + this.slowest.duration = duration; + this.slowest.app = app; + this.slowest.type = type; + this.slowest.regex = regex; + } + + this.lastTime = new Date().getTime(); + + this.timedOut = this.getDuration() > 1000; + }, + + getDuration: function() { + return new Date().getTime() - this.startTime; + } + }; /** * Call driver functions @@ -172,15 +208,9 @@ var wappalyzer = (function() { config: { environment: 'dev', // dev | live - - version: false, - websiteURL: 'http://wappalyzer.com/', twitterURL: 'https://twitter.com/Wappalyzer', githubURL: 'https://github.com/ElbertF/Wappalyzer', - - firstRun: false, - upgraded: false }, /** @@ -214,19 +244,7 @@ var wappalyzer = (function() { } // Initialize driver - driver('init', function() { - if ( w.config.firstRun ) { - driver('goToURL', { url: w.config.websiteURL + 'installed', medium: 'install' }); - - w.config.firstRun = false; - } - - if ( w.config.upgraded ) { - driver('goToURL', { url: w.config.websiteURL + 'upgraded', medium: 'upgrade' }); - - w.config.upgraded = false; - } - }); + driver('init'); }, /** @@ -235,10 +253,7 @@ var wappalyzer = (function() { analyze: function(hostname, url, data) { var i, j, app, confidence, type, regexMeta, regexScript, match, content, meta, header, version, - profiler = { - regexCount: 0, - startTime: new Date().getTime() - }, + profiler = new Profiler(), apps = {} ; @@ -257,13 +272,21 @@ var wappalyzer = (function() { } for ( app in w.apps ) { + // Exit loop after one second to prevent CPU hogging + // Remaining patterns will not be evaluated + if ( profiler.timedOut ) { + w.log('Timeout, exiting loop'); + + break; + } + apps[app] = w.detected[url] && w.detected[url][app] ? w.detected[url][app] : new Application(app); for ( type in w.apps[app] ) { switch ( type ) { case 'url': parse(w.apps[app][type]).map(function(pattern) { - profiler.regexCount ++; + profiler.checkPoint(app, type, pattern.regex); if ( pattern.regex.test(url) ) { apps[app].setDetected(pattern, type, url); @@ -277,7 +300,7 @@ var wappalyzer = (function() { } parse(w.apps[app][type]).map(function(pattern) { - profiler.regexCount ++; + profiler.checkPoint(app, type, pattern.regex); if ( pattern.regex.test(data[type]) ) { apps[app].setDetected(pattern, type, data[type]); @@ -293,10 +316,10 @@ var wappalyzer = (function() { regexScript = new RegExp(' -
diff --git a/drivers/chrome/images/icons/3DM.png b/drivers/chrome/images/icons/3DM.png new file mode 100755 index 000000000..69e17bcb4 Binary files /dev/null and b/drivers/chrome/images/icons/3DM.png differ diff --git a/drivers/chrome/images/icons/3ware.png b/drivers/chrome/images/icons/3ware.png new file mode 100755 index 000000000..69e17bcb4 Binary files /dev/null and b/drivers/chrome/images/icons/3ware.png differ diff --git a/drivers/chrome/images/icons/ATEN.png b/drivers/chrome/images/icons/ATEN.png new file mode 100755 index 000000000..f15a46b5f Binary files /dev/null and b/drivers/chrome/images/icons/ATEN.png differ diff --git a/drivers/chrome/images/icons/Apache HBase.png b/drivers/chrome/images/icons/Apache HBase.png new file mode 100644 index 000000000..113d901a6 Binary files /dev/null and b/drivers/chrome/images/icons/Apache HBase.png differ diff --git a/drivers/chrome/images/icons/Apache Hadoop.png b/drivers/chrome/images/icons/Apache Hadoop.png new file mode 100755 index 000000000..39075d893 Binary files /dev/null and b/drivers/chrome/images/icons/Apache Hadoop.png differ diff --git a/drivers/chrome/images/icons/Backbone.js.png b/drivers/chrome/images/icons/Backbone.js.png index 7d774c810..d45b1b17b 100644 Binary files a/drivers/chrome/images/icons/Backbone.js.png and b/drivers/chrome/images/icons/Backbone.js.png differ diff --git a/drivers/chrome/images/icons/BaseHTTP.png b/drivers/chrome/images/icons/BaseHTTP.png new file mode 100755 index 000000000..68b9f6bfc Binary files /dev/null and b/drivers/chrome/images/icons/BaseHTTP.png differ diff --git a/drivers/chrome/images/icons/Boa.png b/drivers/chrome/images/icons/Boa.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/chrome/images/icons/Boa.png differ diff --git a/drivers/chrome/images/icons/Brother.png b/drivers/chrome/images/icons/Brother.png new file mode 100755 index 000000000..fbc41595e Binary files /dev/null and b/drivers/chrome/images/icons/Brother.png differ diff --git a/drivers/chrome/images/icons/Canon.png b/drivers/chrome/images/icons/Canon.png new file mode 100755 index 000000000..40ed3b98d Binary files /dev/null and b/drivers/chrome/images/icons/Canon.png differ diff --git a/drivers/chrome/images/icons/Catwalk.png b/drivers/chrome/images/icons/Catwalk.png new file mode 100755 index 000000000..40ed3b98d Binary files /dev/null and b/drivers/chrome/images/icons/Catwalk.png differ diff --git a/drivers/chrome/images/icons/Chartbeat.png b/drivers/chrome/images/icons/Chartbeat.png new file mode 100644 index 000000000..2cb597cc7 Binary files /dev/null and b/drivers/chrome/images/icons/Chartbeat.png differ diff --git a/drivers/chrome/images/icons/CherryPy.png b/drivers/chrome/images/icons/CherryPy.png new file mode 100755 index 000000000..badc40ac2 Binary files /dev/null and b/drivers/chrome/images/icons/CherryPy.png differ diff --git a/drivers/chrome/images/icons/Cloudera.png b/drivers/chrome/images/icons/Cloudera.png new file mode 100755 index 000000000..4d3a6a1d4 Binary files /dev/null and b/drivers/chrome/images/icons/Cloudera.png differ diff --git a/drivers/chrome/images/icons/CodeMirror.png b/drivers/chrome/images/icons/CodeMirror.png new file mode 100644 index 000000000..ef34d402c Binary files /dev/null and b/drivers/chrome/images/icons/CodeMirror.png differ diff --git a/drivers/chrome/images/icons/CompaqHTTPServer.png b/drivers/chrome/images/icons/CompaqHTTPServer.png new file mode 100755 index 000000000..2b0bc39df Binary files /dev/null and b/drivers/chrome/images/icons/CompaqHTTPServer.png differ diff --git a/drivers/chrome/images/icons/Cufon.png b/drivers/chrome/images/icons/Cufon.png new file mode 100644 index 000000000..cd2e3f029 Binary files /dev/null and b/drivers/chrome/images/icons/Cufon.png differ diff --git a/drivers/chrome/images/icons/Darwin.png b/drivers/chrome/images/icons/Darwin.png new file mode 100755 index 000000000..41b6c8b00 Binary files /dev/null and b/drivers/chrome/images/icons/Darwin.png differ diff --git a/drivers/chrome/images/icons/Dell.png b/drivers/chrome/images/icons/Dell.png new file mode 100755 index 000000000..76a80b4fa Binary files /dev/null and b/drivers/chrome/images/icons/Dell.png differ diff --git a/drivers/chrome/images/icons/ELOG HTTP.png b/drivers/chrome/images/icons/ELOG HTTP.png new file mode 100644 index 000000000..7af2b77e9 Binary files /dev/null and b/drivers/chrome/images/icons/ELOG HTTP.png differ diff --git a/drivers/chrome/images/icons/ELOG.png b/drivers/chrome/images/icons/ELOG.png new file mode 100644 index 000000000..7af2b77e9 Binary files /dev/null and b/drivers/chrome/images/icons/ELOG.png differ diff --git a/drivers/chrome/images/icons/EWS-NIC4.png b/drivers/chrome/images/icons/EWS-NIC4.png new file mode 100755 index 000000000..76a80b4fa Binary files /dev/null and b/drivers/chrome/images/icons/EWS-NIC4.png differ diff --git a/drivers/chrome/images/icons/Erlang.png b/drivers/chrome/images/icons/Erlang.png new file mode 100755 index 000000000..235338617 Binary files /dev/null and b/drivers/chrome/images/icons/Erlang.png differ diff --git a/drivers/chrome/images/icons/FlashCom.png b/drivers/chrome/images/icons/FlashCom.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/chrome/images/icons/FlashCom.png differ diff --git a/drivers/chrome/images/icons/Grandstream.png b/drivers/chrome/images/icons/Grandstream.png new file mode 100755 index 000000000..b4b1eb66b Binary files /dev/null and b/drivers/chrome/images/icons/Grandstream.png differ diff --git a/drivers/chrome/images/icons/HP ProCurve.png b/drivers/chrome/images/icons/HP ProCurve.png new file mode 100755 index 000000000..2b0bc39df Binary files /dev/null and b/drivers/chrome/images/icons/HP ProCurve.png differ diff --git a/drivers/chrome/images/icons/Highstock.png b/drivers/chrome/images/icons/Highstock.png new file mode 100755 index 000000000..6e8391d36 Binary files /dev/null and b/drivers/chrome/images/icons/Highstock.png differ diff --git a/drivers/chrome/images/icons/Indico.png b/drivers/chrome/images/icons/Indico.png new file mode 100755 index 000000000..02636b6cc Binary files /dev/null and b/drivers/chrome/images/icons/Indico.png differ diff --git a/drivers/chrome/images/icons/Intercom.png b/drivers/chrome/images/icons/Intercom.png new file mode 100644 index 000000000..40d2321a0 Binary files /dev/null and b/drivers/chrome/images/icons/Intercom.png differ diff --git a/drivers/chrome/images/icons/Jetty.png b/drivers/chrome/images/icons/Jetty.png new file mode 100755 index 000000000..807b88634 Binary files /dev/null and b/drivers/chrome/images/icons/Jetty.png differ diff --git a/drivers/chrome/images/icons/KS_HTTP.png b/drivers/chrome/images/icons/KS_HTTP.png new file mode 100755 index 000000000..40ed3b98d Binary files /dev/null and b/drivers/chrome/images/icons/KS_HTTP.png differ diff --git a/drivers/chrome/images/icons/LabVIEW.png b/drivers/chrome/images/icons/LabVIEW.png new file mode 100755 index 000000000..c832bdc54 Binary files /dev/null and b/drivers/chrome/images/icons/LabVIEW.png differ diff --git a/drivers/chrome/images/icons/Less.png b/drivers/chrome/images/icons/Less.png new file mode 100644 index 000000000..9e1de2359 Binary files /dev/null and b/drivers/chrome/images/icons/Less.png differ diff --git a/drivers/chrome/images/icons/LiveStreet CMS.png b/drivers/chrome/images/icons/LiveStreet CMS.png new file mode 100644 index 000000000..75a0029aa Binary files /dev/null and b/drivers/chrome/images/icons/LiveStreet CMS.png differ diff --git a/drivers/chrome/images/icons/Logitech Media Server.png b/drivers/chrome/images/icons/Logitech Media Server.png new file mode 100755 index 000000000..b2e6cb1f2 Binary files /dev/null and b/drivers/chrome/images/icons/Logitech Media Server.png differ diff --git a/drivers/chrome/images/icons/MOBOTIX.png b/drivers/chrome/images/icons/MOBOTIX.png new file mode 100755 index 000000000..321f9a8b1 Binary files /dev/null and b/drivers/chrome/images/icons/MOBOTIX.png differ diff --git a/drivers/chrome/images/icons/MiniServ.png b/drivers/chrome/images/icons/MiniServ.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/chrome/images/icons/MiniServ.png differ diff --git a/drivers/chrome/images/icons/Mono.png b/drivers/chrome/images/icons/Mono.png new file mode 100644 index 000000000..912809eb2 Binary files /dev/null and b/drivers/chrome/images/icons/Mono.png differ diff --git a/drivers/chrome/images/icons/PerfSONAR-PS.png b/drivers/chrome/images/icons/PerfSONAR-PS.png new file mode 100755 index 000000000..13be42d00 Binary files /dev/null and b/drivers/chrome/images/icons/PerfSONAR-PS.png differ diff --git a/drivers/chrome/images/icons/Posterous.png b/drivers/chrome/images/icons/Posterous.png new file mode 100644 index 000000000..3150f4f93 Binary files /dev/null and b/drivers/chrome/images/icons/Posterous.png differ diff --git a/drivers/chrome/images/icons/Prefix-Free.png b/drivers/chrome/images/icons/Prefix-Free.png new file mode 100644 index 000000000..87a646815 Binary files /dev/null and b/drivers/chrome/images/icons/Prefix-Free.png differ diff --git a/drivers/chrome/images/icons/SAP.png b/drivers/chrome/images/icons/SAP.png new file mode 100644 index 000000000..9217c8f87 Binary files /dev/null and b/drivers/chrome/images/icons/SAP.png differ diff --git a/drivers/chrome/images/icons/Sentinel Keys Server.png b/drivers/chrome/images/icons/Sentinel Keys Server.png new file mode 100755 index 000000000..50e127fbf Binary files /dev/null and b/drivers/chrome/images/icons/Sentinel Keys Server.png differ diff --git a/drivers/chrome/images/icons/Sentinel License Monitor.png b/drivers/chrome/images/icons/Sentinel License Monitor.png new file mode 100755 index 000000000..50e127fbf Binary files /dev/null and b/drivers/chrome/images/icons/Sentinel License Monitor.png differ diff --git a/drivers/chrome/images/icons/Sentinel Protection Server.png b/drivers/chrome/images/icons/Sentinel Protection Server.png new file mode 100755 index 000000000..50e127fbf Binary files /dev/null and b/drivers/chrome/images/icons/Sentinel Protection Server.png differ diff --git a/drivers/chrome/images/icons/Splunk.png b/drivers/chrome/images/icons/Splunk.png new file mode 100755 index 000000000..bd2a1a514 Binary files /dev/null and b/drivers/chrome/images/icons/Splunk.png differ diff --git a/drivers/chrome/images/icons/Splunkd.png b/drivers/chrome/images/icons/Splunkd.png new file mode 100755 index 000000000..bd2a1a514 Binary files /dev/null and b/drivers/chrome/images/icons/Splunkd.png differ diff --git a/drivers/chrome/images/icons/SunOS.png b/drivers/chrome/images/icons/SunOS.png new file mode 100755 index 000000000..725070080 Binary files /dev/null and b/drivers/chrome/images/icons/SunOS.png differ diff --git a/drivers/chrome/images/icons/TWiki.png b/drivers/chrome/images/icons/TWiki.png new file mode 100644 index 000000000..f6573b7fa Binary files /dev/null and b/drivers/chrome/images/icons/TWiki.png differ diff --git a/drivers/chrome/images/icons/Underscore.js.png b/drivers/chrome/images/icons/Underscore.js.png index 10262b99d..030496838 100644 Binary files a/drivers/chrome/images/icons/Underscore.js.png and b/drivers/chrome/images/icons/Underscore.js.png differ diff --git a/drivers/chrome/images/icons/Wink.png b/drivers/chrome/images/icons/Wink.png new file mode 100644 index 000000000..3e7204032 Binary files /dev/null and b/drivers/chrome/images/icons/Wink.png differ diff --git a/drivers/chrome/images/icons/Wowza Media Server.png b/drivers/chrome/images/icons/Wowza Media Server.png new file mode 100755 index 000000000..2e7c25e2b Binary files /dev/null and b/drivers/chrome/images/icons/Wowza Media Server.png differ diff --git a/drivers/chrome/images/icons/XAMPP.png b/drivers/chrome/images/icons/XAMPP.png new file mode 100755 index 000000000..7104b0e4d Binary files /dev/null and b/drivers/chrome/images/icons/XAMPP.png differ diff --git a/drivers/chrome/images/icons/Xajax.png b/drivers/chrome/images/icons/Xajax.png new file mode 100644 index 000000000..bba0d40ab Binary files /dev/null and b/drivers/chrome/images/icons/Xajax.png differ diff --git a/drivers/chrome/images/icons/Zabbix.png b/drivers/chrome/images/icons/Zabbix.png new file mode 100755 index 000000000..c7384dc3e Binary files /dev/null and b/drivers/chrome/images/icons/Zabbix.png differ diff --git a/drivers/chrome/images/icons/debut.png b/drivers/chrome/images/icons/debut.png new file mode 100755 index 000000000..fbc41595e Binary files /dev/null and b/drivers/chrome/images/icons/debut.png differ diff --git a/drivers/chrome/images/icons/default.png b/drivers/chrome/images/icons/default.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/chrome/images/icons/default.png differ diff --git a/drivers/chrome/images/icons/dwhttpd.png b/drivers/chrome/images/icons/dwhttpd.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/chrome/images/icons/dwhttpd.png differ diff --git a/drivers/chrome/images/icons/eHTTP.png b/drivers/chrome/images/icons/eHTTP.png new file mode 100644 index 000000000..7f74461f2 Binary files /dev/null and b/drivers/chrome/images/icons/eHTTP.png differ diff --git a/drivers/chrome/images/icons/libwww-perl-daemon.png b/drivers/chrome/images/icons/libwww-perl-daemon.png new file mode 100755 index 000000000..2110788f2 Binary files /dev/null and b/drivers/chrome/images/icons/libwww-perl-daemon.png differ diff --git a/drivers/chrome/images/icons/mod_auth_pam.png b/drivers/chrome/images/icons/mod_auth_pam.png new file mode 100755 index 000000000..d268dcca8 Binary files /dev/null and b/drivers/chrome/images/icons/mod_auth_pam.png differ diff --git a/drivers/chrome/images/icons/mod_jk.png b/drivers/chrome/images/icons/mod_jk.png new file mode 100755 index 000000000..d268dcca8 Binary files /dev/null and b/drivers/chrome/images/icons/mod_jk.png differ diff --git a/drivers/chrome/images/icons/mod_perl.png b/drivers/chrome/images/icons/mod_perl.png new file mode 100755 index 000000000..3f0559995 Binary files /dev/null and b/drivers/chrome/images/icons/mod_perl.png differ diff --git a/drivers/chrome/images/icons/posterous.png b/drivers/chrome/images/icons/posterous.png index 3730d31aa..3150f4f93 100644 Binary files a/drivers/chrome/images/icons/posterous.png and b/drivers/chrome/images/icons/posterous.png differ diff --git a/drivers/chrome/js/background.js b/drivers/chrome/js/background.js deleted file mode 100644 index e354989a4..000000000 --- a/drivers/chrome/js/background.js +++ /dev/null @@ -1,3 +0,0 @@ -wappalyzer.log('bg.html'); - -wappalyzer.init(); diff --git a/drivers/chrome/js/content.js b/drivers/chrome/js/content.js index 1d9d3fb0e..e160070dd 100644 --- a/drivers/chrome/js/content.js +++ b/drivers/chrome/js/content.js @@ -1,9 +1,15 @@ (function() { var c = { init: function() { + var html = document.documentElement.outerHTML; + c.log('init'); - chrome.extension.sendRequest({ id: 'analyze', subject: { html: document.documentElement.outerHTML } }); + if ( html.length > 50000 ) { + html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length); + } + + chrome.extension.sendRequest({ id: 'analyze', subject: { html: html } }); c.getEnvironmentVars(); }, @@ -13,6 +19,8 @@ }, getEnvironmentVars: function() { + var container, script; + c.log('getEnvironmentVars'); if ( typeof document.documentElement.innerHTML === 'undefined' ) { @@ -20,26 +28,15 @@ } try { - var container = document.createElement('wappalyzerData'); + container = document.createElement('wappalyzerData'); container.setAttribute('id', 'wappalyzerData'); container.setAttribute('style', 'display: none'); - var script = document.createElement('script'); + script = document.createElement('script'); script.setAttribute('id', 'wappalyzerEnvDetection'); - - script.innerHTML = - '(function() {' + - 'try {' + - 'var i, environmentVars, event = document.createEvent("Events");' + - 'event.initEvent("wappalyzerEvent", true, false);' + - 'for ( i in window ) { environmentVars += i + " "; }' + - 'document.getElementById("wappalyzerData").appendChild(document.createComment(environmentVars));' + - 'document.getElementById("wappalyzerData").dispatchEvent(event);' + - '}' + - 'catch(e) { }' + - '})();'; + script.setAttribute('src', chrome.extension.getURL('js/inject.js')); container.addEventListener('wappalyzerEvent', (function(event) { var environmentVars = event.target.childNodes[0].nodeValue; diff --git a/drivers/chrome/js/driver.js b/drivers/chrome/js/driver.js index ff6135a2a..514daf50e 100644 --- a/drivers/chrome/js/driver.js +++ b/drivers/chrome/js/driver.js @@ -101,7 +101,7 @@ } }); - chrome.tabs.getAllInWindow(null, function(tabs) { + chrome.tabs.query({}, function(tabs) { tabs.map(function(tab) { if ( tab.url.match(/^https?:\/\//) ) { chrome.tabs.executeScript(tab.id, { file: 'js/content.js' }); @@ -233,4 +233,4 @@ }; w.init(); -})(); +}()); diff --git a/drivers/chrome/js/inject.js b/drivers/chrome/js/inject.js new file mode 100644 index 000000000..fd734182e --- /dev/null +++ b/drivers/chrome/js/inject.js @@ -0,0 +1,14 @@ +(function() { + try { + var i, environmentVars, e = document.createEvent('Events'); + + e.initEvent('wappalyzerEvent', true, false); + + for ( i in window ) { + environmentVars += i + ' '; + } + + document.getElementById('wappalyzerData').appendChild(document.createComment(environmentVars)); + document.getElementById('wappalyzerData').dispatchEvent(e); + } catch(e) { } +}()); diff --git a/drivers/chrome/js/wappalyzer.js b/drivers/chrome/js/wappalyzer.js index 6257ac81e..3bb3d9ad2 100644 --- a/drivers/chrome/js/wappalyzer.js +++ b/drivers/chrome/js/wappalyzer.js @@ -13,64 +13,64 @@ var wappalyzer = (function() { * Application class */ var Application = function(app, detected) { - var self = this; - - self.app = app; - self.confidence = {}; - self.confidenceTotal = 0; - self.detected = Boolean(detected); - self.version = ''; - self.versions = []; + this.app = app; + this.confidence = {}; + this.confidenceTotal = 0; + this.detected = Boolean(detected); + this.version = ''; + this.versions = []; + }; + Application.prototype = { /** * Calculate confidence total */ - self.getConfidence = function() { + getConfidence: function() { var total = 0; - for ( id in self.confidence ) { - total += self.confidence[id]; + for ( id in this.confidence ) { + total += this.confidence[id]; } - return self.confidenceTotal = Math.min(total, 100); - } + return this.confidenceTotal = Math.min(total, 100); + }, /** * Resolve version number (find the longest version number that contains all shorter detected version numbers) */ - self.getVersion = function() { - var next, resolved; + getVersion: function() { + var i, next, resolved; - if ( !self.versions.length ) { + if ( !this.versions.length ) { return; } - self.versions.sort(function(a, b) { + this.versions.sort(function(a, b) { return a.length > b.length ? 1 : ( a.length < b.length ? -1 : 0 ); }); - resolved = self.versions[0]; + resolved = this.versions[0]; - for ( i in self.versions ) { + for ( i in this.versions ) { next = parseInt(i) + 1; - if ( next < self.versions.length ) { - if ( self.versions[next].indexOf(self.versions[i]) !== -1 ) { - resolved = self.versions[next]; + if ( next < this.versions.length ) { + if ( this.versions[next].indexOf(this.versions[i]) !== -1 ) { + resolved = this.versions[next]; } else { break; } } } - return self.version = resolved; - } + return this.version = resolved; + }, - self.setDetected = function(pattern, type, value, key) { - self.detected = true; + setDetected: function(pattern, type, value, key) { + this.detected = true; // Set confidence level - self.confidence[type + ' ' + ( key ? key + ' ' : '' ) + pattern.regex] = pattern.confidence ? pattern.confidence : 100; + this.confidence[type + ' ' + ( key ? key + ' ' : '' ) + pattern.regex] = pattern.confidence ? pattern.confidence : 100; // Detect version number if ( pattern.version ) { @@ -79,13 +79,20 @@ var wappalyzer = (function() { matches = pattern.regex.exec(value) ; + w.log({ matches: matches, version: version }); + if ( matches ) { matches.map(function(match, i) { // Parse ternary operator var ternary = new RegExp('\\\\' + i + '\\?([^:]+):(.+)$').exec(version); if ( ternary && ternary.length === 3 ) { + + w.log({ match: match, i: i, ternary: ternary }); + version = version.replace(ternary[0], match ? ternary[1] : ternary[2]); + + w.log({ version: version }); } // Replace back references @@ -93,14 +100,43 @@ var wappalyzer = (function() { }); if ( version ) { - self.versions.push(version); + this.versions.push(version); } - self.getVersion(); + this.getVersion(); } } } - } + }; + + var Profiler = function() { + this.regexCount = 0; + this.startTime = new Date().getTime(); + this.lastTime = new Date().getTime(); + this.slowest = { duration: null, app: '', type: '', pattern: '' }; + this.timedOut = false; + }; + + Profiler.prototype = { + checkPoint: function(app, type, regex) { + var duration = new Date().getTime() - this.lastTime; + + if ( !this.slowest.duration || duration > this.slowest.duration ) { + this.slowest.duration = duration; + this.slowest.app = app; + this.slowest.type = type; + this.slowest.regex = regex; + } + + this.lastTime = new Date().getTime(); + + this.timedOut = this.getDuration() > 1000; + }, + + getDuration: function() { + return new Date().getTime() - this.startTime; + } + }; /** * Call driver functions @@ -172,15 +208,9 @@ var wappalyzer = (function() { config: { environment: 'dev', // dev | live - - version: false, - websiteURL: 'http://wappalyzer.com/', twitterURL: 'https://twitter.com/Wappalyzer', githubURL: 'https://github.com/ElbertF/Wappalyzer', - - firstRun: false, - upgraded: false }, /** @@ -214,19 +244,7 @@ var wappalyzer = (function() { } // Initialize driver - driver('init', function() { - if ( w.config.firstRun ) { - driver('goToURL', { url: w.config.websiteURL + 'installed', medium: 'install' }); - - w.config.firstRun = false; - } - - if ( w.config.upgraded ) { - driver('goToURL', { url: w.config.websiteURL + 'upgraded', medium: 'upgrade' }); - - w.config.upgraded = false; - } - }); + driver('init'); }, /** @@ -235,10 +253,7 @@ var wappalyzer = (function() { analyze: function(hostname, url, data) { var i, j, app, confidence, type, regexMeta, regexScript, match, content, meta, header, version, - profiler = { - regexCount: 0, - startTime: new Date().getTime() - }, + profiler = new Profiler(), apps = {} ; @@ -257,13 +272,21 @@ var wappalyzer = (function() { } for ( app in w.apps ) { + // Exit loop after one second to prevent CPU hogging + // Remaining patterns will not be evaluated + if ( profiler.timedOut ) { + w.log('Timeout, exiting loop'); + + break; + } + apps[app] = w.detected[url] && w.detected[url][app] ? w.detected[url][app] : new Application(app); for ( type in w.apps[app] ) { switch ( type ) { case 'url': parse(w.apps[app][type]).map(function(pattern) { - profiler.regexCount ++; + profiler.checkPoint(app, type, pattern.regex); if ( pattern.regex.test(url) ) { apps[app].setDetected(pattern, type, url); @@ -277,7 +300,7 @@ var wappalyzer = (function() { } parse(w.apps[app][type]).map(function(pattern) { - profiler.regexCount ++; + profiler.checkPoint(app, type, pattern.regex); if ( pattern.regex.test(data[type]) ) { apps[app].setDetected(pattern, type, data[type]); @@ -293,10 +316,10 @@ var wappalyzer = (function() { regexScript = new RegExp('