diff --git a/core/main/client/browser.js b/core/main/client/browser.js index f39fec33d..696601bd4 100644 --- a/core/main/client/browser.js +++ b/core/main/client/browser.js @@ -10,31 +10,31 @@ * Basic browser functions. */ beef.browser = { - + /** * Returns the user agent that the browser is claiming to be. * @example: beef.browser.getBrowserReportedName() */ - getBrowserReportedName: function() { + getBrowserReportedName: function() { return navigator.userAgent; }, - + /** * Returns true if IE6. * @example: beef.browser.isIE6() */ - isIE6: function() { + isIE6: function() { return !window.XMLHttpRequest && !window.globalStorage; }, - + /** * Returns true if IE7. * @example: beef.browser.isIE7() */ - isIE7: function() { + isIE7: function() { return !!window.XMLHttpRequest && !window.chrome && !window.opera && !window.getComputedStyle && !window.globalStorage && !document.documentMode; }, - + /** * Returns true if IE8. * @example: beef.browser.isIE8() @@ -42,7 +42,7 @@ beef.browser = { isIE8: function() { return !!window.XMLHttpRequest && !window.chrome && !window.opera && !!document.documentMode && !!window.XDomainRequest && !window.performance; }, - + /** * Returns true if IE9. * @example: beef.browser.isIE9() @@ -50,7 +50,7 @@ beef.browser = { isIE9: function() { return !!window.XMLHttpRequest && !window.chrome && !window.opera && !!document.documentMode && !!window.XDomainRequest && !!window.performance; }, - + /** * * Returns true if IE10. @@ -68,7 +68,7 @@ beef.browser = { isIE: function() { return this.isIE6() || this.isIE7() || this.isIE8() || this.isIE9() || this.isIE10(); }, - + /** * Returns true if FF2. * @example: beef.browser.isFF2() @@ -76,7 +76,7 @@ beef.browser = { isFF2: function() { return !!window.globalStorage && !window.postMessage; }, - + /** * Returns true if FF3. * @example: beef.browser.isFF3() @@ -84,7 +84,7 @@ beef.browser = { isFF3: function() { return !!window.globalStorage && !!window.postMessage && !JSON.parse; }, - + /** * Returns true if FF3.5. * @example: beef.browser.isFF3_5() @@ -92,7 +92,7 @@ beef.browser = { isFF3_5: function() { return !!window.globalStorage && !!JSON.parse && !window.FileReader; }, - + /** * Returns true if FF3.6. * @example: beef.browser.isFF3_6() @@ -108,7 +108,7 @@ beef.browser = { isFF4: function() { return !!window.globalStorage && !!window.history.replaceState && window.navigator.userAgent.match(/Firefox\/4\./) != null; }, - + /** * Returns true if FF5. * @example: beef.browser.isFF5() @@ -228,7 +228,7 @@ beef.browser = { isS4: function() { return (window.navigator.userAgent.match(/ Version\/4\.\d/) != null && window.navigator.userAgent.match(/Safari\/\d/) != null && !window.globalStorage && !!window.getComputedStyle && !window.opera && !window.chrome && !("MozWebSocket" in window)); }, - + /** * Returns true if Safari 5.xx * @example: beef.browser.isS5() @@ -244,7 +244,7 @@ beef.browser = { isS6: function() { return (window.navigator.userAgent.match(/ Version\/6\.\d/) != null && window.navigator.userAgent.match(/Safari\/\d/) != null && !window.globalStorage && !!window.getComputedStyle && !window.opera && !window.chrome && !("MozWebSocket" in window)); }, - + /** * Returns true if Safari. * @example: beef.browser.isS() @@ -260,7 +260,7 @@ beef.browser = { isC5: function() { return (!!window.chrome && !window.webkitPerformance) && ((parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10)==5)?true:false); }, - + /** * Returns true if Chrome 6. * @example: beef.browser.isC6() @@ -284,7 +284,7 @@ beef.browser = { isC8: function() { return (!!window.chrome && !!window.webkitPerformance) && ((parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10)==8)?true:false); }, - + /** * Returns true if Chrome 9. * @example: beef.browser.isC9() @@ -292,7 +292,7 @@ beef.browser = { isC9: function() { return (!!window.chrome && !!window.webkitPerformance) && ((parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10)==9)?true:false); }, - + /** * Returns true if Chrome 10. * @example: beef.browser.isC10() @@ -308,7 +308,7 @@ beef.browser = { isC11: function() { return (!!window.chrome && !window.webkitPerformance) && ((parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10)==11)?true:false); }, - + /** * Returns true if Chrome 12. * @example: beef.browser.isC12() @@ -460,7 +460,7 @@ beef.browser = { isO: function() { return this.isO9_52() || this.isO9_60() || this.isO10() || this.isO11() || this.isO12(); }, - + /** * Returns the type of browser being used. * @example: beef.browser.type().IE6 @@ -468,7 +468,7 @@ beef.browser = { * @example: beef.browser.type().O */ type: function() { - + return { C5: this.isC5(), // Chrome 5 C6: this.isC6(), // Chrome 6 @@ -531,7 +531,7 @@ beef.browser = { S: this.isS() // Safari any version } }, - + /** * Returns the type of browser being used. * @return: {String} User agent software and version. @@ -539,7 +539,7 @@ beef.browser = { * @example: beef.browser.getBrowserVersion() */ getBrowserVersion: function() { - + if (this.isC5()) { return '5' }; // Chrome 5 if (this.isC6()) { return '6' }; // Chrome 6 if (this.isC7()) { return '7' }; // Chrome 7 @@ -597,7 +597,7 @@ beef.browser = { return 'UNKNOWN'; // Unknown UA }, - + /** * Returns the type of user agent by hooked browser. * @return: {String} User agent software. @@ -605,7 +605,7 @@ beef.browser = { * @example: beef.browser.getBrowserName() */ getBrowserName: function() { - + if (this.isC()) { return 'C' }; // Chrome any version if (this.isFF()) { return 'FF'}; // Firefox any version if (this.isIE()) { return 'IE'}; // Internet Explorer any version @@ -613,7 +613,7 @@ beef.browser = { if (this.isS()) { return 'S' }; // Safari any version return 'UN'; // Unknown UA }, - + /** * Checks if the zombie has flash installed and enabled. * @return: {Boolean} true or false. @@ -622,7 +622,7 @@ beef.browser = { */ hasFlash: function() { if (!this.type().IE) { - return (navigator.mimeTypes && navigator.mimeTypes["application/x-shockwave-flash"]); + return (navigator.mimeTypes && navigator.mimeTypes["application/x-shockwave-flash"]); } else { flash_versions = 11; flash_installed = false; @@ -683,7 +683,7 @@ beef.browser = { */ hasCors: function() { if ('withCredentials' in new XMLHttpRequest()) - return true; + return true; else if (typeof XDomainRequest !== "undefined") return true; else @@ -726,7 +726,7 @@ beef.browser = { return false; } }, - + /** * Checks if the zombie has VBScript enabled. * @return: {Boolean} true or false. @@ -740,7 +740,7 @@ beef.browser = { return false; } }, - + /** * Returns the list of plugins installed in the browser. */ @@ -778,20 +778,20 @@ beef.browser = { // Return results return results; }, - + /** * Returns a list of plugins detected by IE. This is a hack because IE doesn't - * support navigator.plugins + * support navigator.plugins */ getPluginsIE: function() { var results = ''; var plugins = {'AdobePDF6':{ - 'control':'PDF.PdfCtrl', + 'control':'PDF.PdfCtrl', 'return': function(control) { version = control.getVersions().split(','); version = version[0].split('='); return 'Acrobat Reader v'+parseFloat(version[1]); - }}, + }}, 'AdobePDF7':{ 'control':'AcroPDF.PDF', 'return': function(control) { @@ -851,10 +851,10 @@ beef.browser = { /** * Returns zombie screen size and color depth. - */ + */ getScreenSize: function() { return { - width: window.screen.width, + width: window.screen.width, height: window.screen.height, colordepth: window.screen.colorDepth } @@ -863,7 +863,7 @@ beef.browser = { /** * Returns zombie browser window size. * @from: http://www.howtocreate.co.uk/tutorials/javascript/browserwindow - */ + */ getWindowSize: function() { var myWidth = 0, myHeight = 0; if( typeof( window.innerWidth ) == 'number' ) { @@ -884,13 +884,13 @@ beef.browser = { height: myHeight } }, - + /** * Construct hash from browser details. This function is used to grab the browser details during the hooking process - */ + */ getDetails: function() { var details = new Array(); - + var browser_name = beef.browser.getBrowserName(); var browser_version = beef.browser.getBrowserVersion(); var browser_reported_name = beef.browser.getBrowserReportedName(); @@ -903,7 +903,7 @@ beef.browser = { var browser_plugins = beef.browser.getPlugins(); var date_stamp = new Date().toString(); var os_name = beef.os.getName(); - var hw_name = beef.hardware.getName(); + var hw_name = beef.hardware.getMobileName(); var system_platform = (typeof(navigator.platform) != "undefined" && navigator.platform != "") ? navigator.platform : null; var browser_type = JSON.stringify(beef.browser.type(), function (key, value) {if (value == true) return value; else if (typeof value == 'object') return value; else return;}); var screen_size = beef.browser.getScreenSize(); @@ -947,7 +947,7 @@ beef.browser = { return details; }, - + /** * Returns array of results, whether or not the target zombie has visited the specified URL */ @@ -970,7 +970,7 @@ beef.browser = { a.href = u; ifdoc.body.appendChild(a); var width = null; - (a.currentStyle) ? width = a.currentStyle['width'] : width = ifdoc.defaultView.getComputedStyle(a, null).getPropertyValue("width"); + (a.currentStyle) ? width = a.currentStyle['width'] : width = ifdoc.defaultView.getComputedStyle(a, null).getPropertyValue("width"); if (width == '0px') { success = true; } @@ -979,7 +979,7 @@ beef.browser = { } } beef.dom.removeElement(iframe); - if (results.length == 0) + if (results.length == 0) { return false; } @@ -1136,7 +1136,7 @@ beef.browser = { return deferredObject.promise(); } - + }; beef.regCmp('beef.browser'); diff --git a/core/main/client/hardware.js b/core/main/client/hardware.js index 5e64e9ab2..32732e5ec 100644 --- a/core/main/client/hardware.js +++ b/core/main/client/hardware.js @@ -7,39 +7,15 @@ beef.hardware = { ua: navigator.userAgent, - - isWinPhone: function() { - return (this.ua.match('(Windows Phone)')) ? true : false; - }, - - isIphone: function() { - return (this.ua.indexOf('iPhone') != -1) ? true : false; - }, - - isIpad: function() { - return (this.ua.indexOf('iPad') != -1) ? true : false; - }, - - isIpod: function() { - return (this.ua.indexOf('iPod') != -1) ? true : false; - }, isNokia: function() { return (this.ua.match('(Maemo Browser)|(Symbian)|(Nokia)')) ? true : false; }, - isBlackBerry: function() { - return (this.ua.match('BlackBerry')) ? true : false; - }, - isZune: function() { return (this.ua.match('ZuneWP7')) ? true : false; }, - isKindle: function() { - return (this.ua.match('Kindle')) ? true : false; - }, - isHtc: function() { return (this.ua.match('HTC')) ? true : false; }, @@ -48,10 +24,6 @@ beef.hardware = { return (this.ua.match('Ericsson')) ? true : false; }, - isNokia: function() { - return (this.ua.match('Nokia')) ? true : false; - }, - isMotorola: function() { return (this.ua.match('Motorola')) ? true : false; }, @@ -60,20 +32,57 @@ beef.hardware = { return (this.ua.match('Nexus One')) ? true : false; }, - getName: function() { + /** + * Returns true if the browser is on a Mobile Phone + * @return: {Boolean} true or false + * + * @example: if(beef.browser.isMobilePhone()) { ... } + **/ + isMobilePhone: function() { + return DetectMobileQuick(); + }, - if (this.isNokia()) return 'Nokia'; - if (this.isWinPhone()) return 'Windows Phone'; - if (this.isBlackBerry()) return 'BlackBerry'; - if (this.isIphone()) return 'iPhone'; - if (this.isIpad()) return 'iPad'; - if (this.isIpod()) return 'iPod'; - if (this.isKindle()) return 'Kindle'; - if (this.isHtc()) return 'HTC'; - if (this.isMotorola()) return 'Motorola'; - if (this.isZune()) return 'Zune'; - if (this.isGoogle()) return 'Google'; - if (this.isEricsson()) return 'Ericsson'; + getMobileName: function() { + var ua = navigator.userAgent.toLowerCase(); + if(DetectIphone()) { return "iPhone"}; + if(DetectIpod()) { return "iPod Touch"}; + if(DetectIpad()) { return "iPad"}; + if (this.isHtc()) { return 'HTC'}; + if (this.isMotorola()) { return 'Motorola'}; + if (this.isZune()) { return 'Zune'}; + if (this.isGoogle()) { return 'Google Nexus One'}; + if (this.isEricsson()) { return 'Ericsson'}; + if(DetectAndroidPhone()) { return "Android Phone"}; + if(DetectAndroidTablet()) { return "Android Tablet"}; + if(DetectS60OssBrowser()) { return "Nokia S60 Open Source"}; + if(ua.search(deviceS60) > -1) { return "Nokia S60"}; + if(ua.search(deviceS70) > -1) { return "Nokia S70"}; + if(ua.search(deviceS80) > -1) { return "Nokia S80"}; + if(ua.search(deviceS90) > -1) { return "Nokia S90"}; + if(ua.search(deviceSymbian) > -1) { return "Nokia Symbian"}; + if (this.isNokia()) { return 'Nokia'}; + if(DetectWindowsPhone7()) { return "Windows Phone 7"}; + if(DetectWindowsMobile()) { return "Windows Mobile"}; + if(DetectBlackBerryTablet()) { return "BlackBerry Tablet"}; + if(DetectBlackBerryWebKit()) { return "BlackBerry OS 6"}; + if(DetectBlackBerryTouch()) { return "BlackBerry Touch"}; + if(DetectBlackBerryHigh()) { return "BlackBerry OS 5"}; + if(DetectBlackBerry()) { return "BlackBerry"}; + if(DetectPalmOS()) { return "Palm OS"}; + if(DetectPalmWebOS()) { return "Palm Web OS"}; + if(DetectGarminNuvifone()) { return "Gamin Nuvifone"}; + if(DetectArchos()) { return "Archos"} + if(DetectBrewDevice()) { return "Brew"}; + if(DetectDangerHiptop()) { return "Danger Hiptop"}; + if(DetectMaemoTablet()) { return "Maemo Tablet"}; + if(DetectSonyMylo()) { return "Sony Mylo"}; + if(DetectAmazonSilk()) { return "Kindle Fire"}; + if(DetectKindle()) { return "Kindle"}; + if(DetectSonyPlaystation()) { return "Playstation" }; + if(ua.search(deviceNintendoDs) > -1) { return "Nintendo DS"}; + if(ua.search(deviceWii) > -1) { return "Nintendo Wii"}; + if(ua.search(deviceNintendo) > -1) { return "Nintendo"}; + if(DetectXbox()) { return "Xbox"}; return 'Unknown'; } diff --git a/core/main/client/lib/mdetect.js b/core/main/client/lib/mdetect.js new file mode 100644 index 000000000..8fa1ad199 --- /dev/null +++ b/core/main/client/lib/mdetect.js @@ -0,0 +1,706 @@ + +/* ******************************************* +// Copyright 2010-2012, Anthony Hand +// mdetect : http://code.google.com/p/mobileesp/source/browse/JavaScript/mdetect.js r215 +// LICENSE INFORMATION +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +// either express or implied. See the License for the specific +// language governing permissions and limitations under the License. +// ******************************************* +*/ + +var isIphone = false; +var isAndroidPhone = false; +var isTierTablet = false; +var isTierIphone = false; +var isTierRichCss = false; +var isTierGenericMobile = false; + +var engineWebKit = "webkit"; +var deviceIphone = "iphone"; +var deviceIpod = "ipod"; +var deviceIpad = "ipad"; +var deviceMacPpc = "macintosh"; //Used for disambiguation + +var deviceAndroid = "android"; +var deviceGoogleTV = "googletv"; +var deviceXoom = "xoom"; //Motorola Xoom +var deviceHtcFlyer = "htc_flyer"; //HTC Flyer + +var deviceNuvifone = "nuvifone"; //Garmin Nuvifone + +var deviceSymbian = "symbian"; +var deviceS60 = "series60"; +var deviceS70 = "series70"; +var deviceS80 = "series80"; +var deviceS90 = "series90"; + +var deviceWinPhone7 = "windows phone os 7"; +var deviceWinMob = "windows ce"; +var deviceWindows = "windows"; +var deviceIeMob = "iemobile"; +var devicePpc = "ppc"; //Stands for PocketPC +var enginePie = "wm5 pie"; //An old Windows Mobile + +var deviceBB = "blackberry"; +var vndRIM = "vnd.rim"; //Detectable when BB devices emulate IE or Firefox +var deviceBBStorm = "blackberry95"; //Storm 1 and 2 +var deviceBBBold = "blackberry97"; //Bold 97x0 (non-touch) +var deviceBBBoldTouch = "blackberry 99"; //Bold 99x0 (touchscreen) +var deviceBBTour = "blackberry96"; //Tour +var deviceBBCurve = "blackberry89"; //Curve 2 +var deviceBBCurveTouch = "blackberry 938"; //Curve Touch 9380 +var deviceBBTorch = "blackberry 98"; //Torch +var deviceBBPlaybook = "playbook"; //PlayBook tablet + +var devicePalm = "palm"; +var deviceWebOS = "webos"; //For Palm's line of WebOS devices +var deviceWebOShp = "hpwos"; //For HP's line of WebOS devices + +var engineBlazer = "blazer"; //Old Palm browser +var engineXiino = "xiino"; + +var deviceKindle = "kindle"; //Amazon Kindle, eInk one +var engineSilk = "silk"; //Amazon's accelerated Silk browser for Kindle Fire + +var vndwap = "vnd.wap"; +var wml = "wml"; + +var deviceTablet = "tablet"; //Generic term for slate and tablet devices +var deviceBrew = "brew"; +var deviceDanger = "danger"; +var deviceHiptop = "hiptop"; +var devicePlaystation = "playstation"; +var deviceNintendoDs = "nitro"; +var deviceNintendo = "nintendo"; +var deviceWii = "wii"; +var deviceXbox = "xbox"; +var deviceArchos = "archos"; + +var engineOpera = "opera"; //Popular browser +var engineNetfront = "netfront"; //Common embedded OS browser +var engineUpBrowser = "up.browser"; //common on some phones +var engineOpenWeb = "openweb"; //Transcoding by OpenWave server +var deviceMidp = "midp"; //a mobile Java technology +var uplink = "up.link"; +var engineTelecaQ = 'teleca q'; //a modern feature phone browser + +var devicePda = "pda"; +var mini = "mini"; //Some mobile browsers put 'mini' in their names. +var mobile = "mobile"; //Some mobile browsers put 'mobile' in their user agent strings. +var mobi = "mobi"; //Some mobile browsers put 'mobi' in their user agent strings. + +var maemo = "maemo"; +var linux = "linux"; +var qtembedded = "qt embedded"; //for Sony Mylo and others +var mylocom2 = "com2"; //for Sony Mylo also + +var manuSonyEricsson = "sonyericsson"; +var manuericsson = "ericsson"; +var manuSamsung1 = "sec-sgh"; +var manuSony = "sony"; +var manuHtc = "htc"; //Popular Android and WinMo manufacturer + +var svcDocomo = "docomo"; +var svcKddi = "kddi"; +var svcVodafone = "vodafone"; + +var disUpdate = "update"; //pda vs. update + +var uagent = ""; +if (navigator && navigator.userAgent) + uagent = navigator.userAgent.toLowerCase(); + +function DetectIphone() +{ + if (uagent.search(deviceIphone) > -1) + { + if (DetectIpad() || DetectIpod()) + return false; + else + return true; + } + else + return false; +} + +function DetectIpod() +{ + if (uagent.search(deviceIpod) > -1) + return true; + else + return false; +} + +function DetectIpad() +{ + if (uagent.search(deviceIpad) > -1 && DetectWebkit()) + return true; + else + return false; +} + +function DetectIphoneOrIpod() +{ + if (uagent.search(deviceIphone) > -1 || + uagent.search(deviceIpod) > -1) + return true; + else + return false; +} + +function DetectIos() +{ + if (DetectIphoneOrIpod() || DetectIpad()) + return true; + else + return false; +} + +function DetectAndroid() +{ + if ((uagent.search(deviceAndroid) > -1) || DetectGoogleTV()) + return true; + if (uagent.search(deviceHtcFlyer) > -1) + return true; + else + return false; +} + +function DetectAndroidPhone() +{ + if (DetectAndroid() && (uagent.search(mobile) > -1)) + return true; + if (DetectOperaAndroidPhone()) + return true; + if (uagent.search(deviceHtcFlyer) > -1) + return true; + else + return false; +} + +function DetectAndroidTablet() +{ + if (!DetectAndroid()) + return false; + + if (DetectOperaMobile()) + return false; + if (uagent.search(deviceHtcFlyer) > -1) + return false; + + if (uagent.search(mobile) > -1) + return false; + else + return true; +} + + +function DetectAndroidWebKit() +{ + if (DetectAndroid() && DetectWebkit()) + return true; + else + return false; +} + + +function DetectGoogleTV() +{ + if (uagent.search(deviceGoogleTV) > -1) + return true; + else + return false; +} + + +function DetectWebkit() +{ + if (uagent.search(engineWebKit) > -1) + return true; + else + return false; +} + +function DetectS60OssBrowser() +{ + if (DetectWebkit()) + { + if ((uagent.search(deviceS60) > -1 || + uagent.search(deviceSymbian) > -1)) + return true; + else + return false; + } + else + return false; +} + +function DetectSymbianOS() +{ + if (uagent.search(deviceSymbian) > -1 || + uagent.search(deviceS60) > -1 || + uagent.search(deviceS70) > -1 || + uagent.search(deviceS80) > -1 || + uagent.search(deviceS90) > -1) + return true; + else + return false; +} + +function DetectWindowsPhone7() +{ + if (uagent.search(deviceWinPhone7) > -1) + return true; + else + return false; +} + +function DetectWindowsMobile() +{ + if (DetectWindowsPhone7()) + return false; + if (uagent.search(deviceWinMob) > -1 || + uagent.search(deviceIeMob) > -1 || + uagent.search(enginePie) > -1) + return true; + if ((uagent.search(devicePpc) > -1) && + !(uagent.search(deviceMacPpc) > -1)) + return true; + if (uagent.search(manuHtc) > -1 && + uagent.search(deviceWindows) > -1) + return true; + else + return false; +} + +function DetectBlackBerry() +{ + if (uagent.search(deviceBB) > -1) + return true; + if (uagent.search(vndRIM) > -1) + return true; + else + return false; +} + +function DetectBlackBerryTablet() +{ + if (uagent.search(deviceBBPlaybook) > -1) + return true; + else + return false; +} + +function DetectBlackBerryWebKit() +{ + if (DetectBlackBerry() && + uagent.search(engineWebKit) > -1) + return true; + else + return false; +} + +function DetectBlackBerryTouch() +{ + if (DetectBlackBerry() && + ((uagent.search(deviceBBStorm) > -1) || + (uagent.search(deviceBBTorch) > -1) || + (uagent.search(deviceBBBoldTouch) > -1) || + (uagent.search(deviceBBCurveTouch) > -1) )) + return true; + else + return false; +} + +function DetectBlackBerryHigh() +{ + if (DetectBlackBerryWebKit()) + return false; + if (DetectBlackBerry()) + { + if (DetectBlackBerryTouch() || + uagent.search(deviceBBBold) > -1 || + uagent.search(deviceBBTour) > -1 || + uagent.search(deviceBBCurve) > -1) + return true; + else + return false; + } + else + return false; +} + +function DetectBlackBerryLow() +{ + if (DetectBlackBerry()) + { + if (DetectBlackBerryHigh() || DetectBlackBerryWebKit()) + return false; + else + return true; + } + else + return false; +} + + +function DetectPalmOS() +{ + if (uagent.search(devicePalm) > -1 || + uagent.search(engineBlazer) > -1 || + uagent.search(engineXiino) > -1) + { + if (DetectPalmWebOS()) + return false; + else + return true; + } + else + return false; +} + +function DetectPalmWebOS() +{ + if (uagent.search(deviceWebOS) > -1) + return true; + else + return false; +} + +function DetectWebOSTablet() +{ + if (uagent.search(deviceWebOShp) > -1 && + uagent.search(deviceTablet) > -1) + return true; + else + return false; +} + +function DetectGarminNuvifone() +{ + if (uagent.search(deviceNuvifone) > -1) + return true; + else + return false; +} + + +function DetectSmartphone() +{ + if (DetectIphoneOrIpod() + || DetectAndroidPhone() + || DetectS60OssBrowser() + || DetectSymbianOS() + || DetectWindowsMobile() + || DetectWindowsPhone7() + || DetectBlackBerry() + || DetectPalmWebOS() + || DetectPalmOS() + || DetectGarminNuvifone()) + return true; + + return false; +}; + +function DetectArchos() +{ + if (uagent.search(deviceArchos) > -1) + return true; + else + return false; +} + +function DetectBrewDevice() +{ + if (uagent.search(deviceBrew) > -1) + return true; + else + return false; +} + +function DetectDangerHiptop() +{ + if (uagent.search(deviceDanger) > -1 || + uagent.search(deviceHiptop) > -1) + return true; + else + return false; +} + +function DetectMaemoTablet() +{ + if (uagent.search(maemo) > -1) + return true; + if ((uagent.search(linux) > -1) + && (uagent.search(deviceTablet) > -1) + && !DetectWebOSTablet() + && !DetectAndroid()) + return true; + else + return false; +} + +function DetectSonyMylo() +{ + if (uagent.search(manuSony) > -1) + { + if (uagent.search(qtembedded) > -1 || + uagent.search(mylocom2) > -1) + return true; + else + return false; + } + else + return false; +} + +function DetectOperaMobile() +{ + if (uagent.search(engineOpera) > -1) + { + if (uagent.search(mini) > -1 || + uagent.search(mobi) > -1) + return true; + else + return false; + } + else + return false; +} + +function DetectOperaAndroidPhone() +{ + if ((uagent.search(engineOpera) > -1) && + (uagent.search(deviceAndroid) > -1) && + (uagent.search(mobi) > -1)) + return true; + else + return false; +} + +function DetectOperaAndroidTablet() +{ + if ((uagent.search(engineOpera) > -1) && + (uagent.search(deviceAndroid) > -1) && + (uagent.search(deviceTablet) > -1)) + return true; + else + return false; +} + +function DetectSonyPlaystation() +{ + if (uagent.search(devicePlaystation) > -1) + return true; + else + return false; +}; + +function DetectNintendo() +{ + if (uagent.search(deviceNintendo) > -1 || + uagent.search(deviceWii) > -1 || + uagent.search(deviceNintendoDs) > -1) + return true; + else + return false; +}; + +function DetectXbox() +{ + if (uagent.search(deviceXbox) > -1) + return true; + else + return false; +}; + +function DetectGameConsole() +{ + if (DetectSonyPlaystation()) + return true; + if (DetectNintendo()) + return true; + if (DetectXbox()) + return true; + else + return false; +}; + +function DetectKindle() +{ + if (uagent.search(deviceKindle) > -1 && + !DetectAndroid()) + return true; + else + return false; +} + +function DetectAmazonSilk() +{ + if (uagent.search(engineSilk) > -1) + return true; + else + return false; +} + +function DetectMobileQuick() +{ + if (DetectTierTablet()) + return false; + + if (DetectSmartphone()) + return true; + + if (uagent.search(deviceMidp) > -1 || + DetectBrewDevice()) + return true; + + if (DetectOperaMobile()) + return true; + + if (uagent.search(engineNetfront) > -1) + return true; + if (uagent.search(engineUpBrowser) > -1) + return true; + if (uagent.search(engineOpenWeb) > -1) + return true; + + if (DetectDangerHiptop()) + return true; + + if (DetectMaemoTablet()) + return true; + if (DetectArchos()) + return true; + + if ((uagent.search(devicePda) > -1) && + !(uagent.search(disUpdate) > -1)) + return true; + if (uagent.search(mobile) > -1) + return true; + + if (DetectKindle() || + DetectAmazonSilk()) + return true; + + return false; +}; + + +function DetectMobileLong() +{ + if (DetectMobileQuick()) + return true; + if (DetectGameConsole()) + return true; + if (DetectSonyMylo()) + return true; + + if (uagent.search(manuSamsung1) > -1 || + uagent.search(manuSonyEricsson) > -1 || + uagent.search(manuericsson) > -1) + return true; + + if (uagent.search(svcDocomo) > -1) + return true; + if (uagent.search(svcKddi) > -1) + return true; + if (uagent.search(svcVodafone) > -1) + return true; + + + return false; +}; + + +function DetectTierTablet() +{ + if (DetectIpad() + || DetectAndroidTablet() + || DetectBlackBerryTablet() + || DetectWebOSTablet()) + return true; + else + return false; +}; + +function DetectTierIphone() +{ + if (DetectIphoneOrIpod()) + return true; + if (DetectAndroidPhone()) + return true; + if (DetectBlackBerryWebKit() && DetectBlackBerryTouch()) + return true; + if (DetectWindowsPhone7()) + return true; + if (DetectPalmWebOS()) + return true; + if (DetectGarminNuvifone()) + return true; + else + return false; +}; + +function DetectTierRichCss() +{ + if (DetectMobileQuick()) + { + if (DetectTierIphone() || DetectKindle()) + return false; + + if (DetectWebkit()) + return true; + if (DetectS60OssBrowser()) + return true; + + if (DetectBlackBerryHigh()) + return true; + + if (DetectWindowsMobile()) + return true; + + if (uagent.search(engineTelecaQ) > -1) + return true; + + else + return false; + } + else + return false; +}; + +function DetectTierOtherPhones() +{ + if (DetectMobileLong()) + { + if (DetectTierIphone() || DetectTierRichCss()) + return false; + + else + return true; + } + else + return false; +}; + + +function InitDeviceScan() +{ + isIphone = DetectIphoneOrIpod(); + isAndroidPhone = DetectAndroidPhone(); + isTierIphone = DetectTierIphone(); + isTierTablet = DetectTierTablet(); + + isTierRichCss = DetectTierRichCss(); + isTierGenericMobile = DetectTierOtherPhones(); +}; + +InitDeviceScan() diff --git a/core/main/handlers/modules/beefjs.rb b/core/main/handlers/modules/beefjs.rb index e0338d660..f120f7814 100644 --- a/core/main/handlers/modules/beefjs.rb +++ b/core/main/handlers/modules/beefjs.rb @@ -21,7 +21,7 @@ module BeEF beef_js_path = "#{$root_dir}/core/main/client/" # @note External libraries (like jQuery) that are not evaluated with Eruby and possibly not obfuscated - ext_js_sub_files = %w(lib/jquery-1.5.2.min.js lib/evercookie.js lib/json2.js lib/jools.min.js) + ext_js_sub_files = %w(lib/jquery-1.5.2.min.js lib/evercookie.js lib/json2.js lib/jools.min.js lib/mdetect.js) # @note BeEF libraries: need Eruby evaluation and obfuscation beef_js_sub_files = %w(beef.js browser.js browser/cookie.js browser/popup.js session.js os.js hardware.js dom.js logger.js net.js updater.js encode/base64.js encode/json.js net/local.js init.js mitb.js net/dns.js net/cors.js are.js) @@ -102,7 +102,7 @@ module BeEF if config.get("beef.extension.evasion.enable") evasion = BeEF::Extension::Evasion::Evasion.instance - @final_hook = ext_js_to_not_obfuscate + evasion.add_bootstrapper + evasion.obfuscate(ext_js_to_obfuscate + @hook) + @final_hook = ext_js_to_not_obfuscate + evasion.add_bootstrapper + evasion.obfuscate(ext_js_to_obfuscate + @hook) else @final_hook = ext_js_to_not_obfuscate + @hook end diff --git a/extensions/evasion/config.yaml b/extensions/evasion/config.yaml index 95536e9f4..06a1b803d 100644 --- a/extensions/evasion/config.yaml +++ b/extensions/evasion/config.yaml @@ -9,7 +9,7 @@ beef: enable: true name: 'Evasion' authors: ["antisnatchor"] - exclude_core_js: ["lib/jquery-1.5.2.min.js", "lib/json2.js", "lib/jools.min.js"] + exclude_core_js: ["lib/jquery-1.5.2.min.js", "lib/json2.js", "lib/jools.min.js","lib/mdetect.js"] scramble_variables: true scramble_cookies: true scramble: