//
// Copyright (c) 2006-2024 Wade Alcorn - wade@bindshell.net
// Browser Exploitation Framework (BeEF) - https://beefproject.com
// See the file 'doc/COPYING' for copying permission
//
/** @namespace beef.os */
beef.os = {
ua: navigator.userAgent,
/**
* Detect default browser (IE only)
* Written by unsticky
* http://ha.ckers.org/blog/20070319/detecting-default-browser-in-ie/
* @return {string}
*/
getDefaultBrowser: function() {
var result = "Unknown"
try {
var mt = document.mimeType;
if (mt) {
if (mt == "Safari Document") result = "Safari";
if (mt == "Firefox HTML Document") result = "Firefox";
if (mt == "Chrome HTML Document") result = "Chrome";
if (mt == "HTML Document") result = "Internet Explorer";
if (mt == "Opera Web Document") result = "Opera";
}
} catch (e) {
beef.debug("[os] getDefaultBrowser: "+e.message);
}
return result;
},
// the likelihood that we hook Windows 3.11 (which has only Win in the UA string) is zero in 2015
/**
* @return {boolean}
*/
isWin311: function() {
return (this.ua.match('(Win16)')) ? true : false;
},
/**
* @return {boolean}
*/
isWinNT4: function() {
return (this.ua.match('(Windows NT 4.0)')) ? true : false;
},
/**
* @return {boolean}
*/
isWin95: function() {
return (this.ua.match('(Windows 95)|(Win95)|(Windows_95)')) ? true : false;
},
/**
* @return {boolean}
*/
isWinCE: function() {
return (this.ua.match('(Windows CE)')) ? true : false;
},
/**
* @return {boolean}
*/
isWin98: function() {
return (this.ua.match('(Windows 98)|(Win98)')) ? true : false;
},
/**
* @return {boolean}
*/
isWinME: function() {
return (this.ua.match('(Windows ME)|(Win 9x 4.90)')) ? true : false;
},
/**
* @return {boolean}
*/
isWin2000: function() {
return (this.ua.match('(Windows NT 5.0)|(Windows 2000)')) ? true : false;
},
/**
* @return {boolean}
*/
isWin2000SP1: function() {
return (this.ua.match('Windows NT 5.01 ')) ? true : false;
},
/**
* @return {boolean}
*/
isWinXP: function() {
return (this.ua.match('(Windows NT 5.1)|(Windows XP)')) ? true : false;
},
/**
* @return {boolean}
*/
isWinServer2003: function() {
return (this.ua.match('(Windows NT 5.2)')) ? true : false;
},
/**
* @return {boolean}
*/
isWinVista: function() {
return (this.ua.match('(Windows NT 6.0)')) ? true : false;
},
/**
* @return {boolean}
*/
isWin7: function() {
return (this.ua.match('(Windows NT 6.1)|(Windows NT 7.0)')) ? true : false;
},
/**
* @return {boolean}
*/
isWin8: function() {
return (this.ua.match('(Windows NT 6.2)')) ? true : false;
},
/**
* @return {boolean}
*/
isWin81: function() {
return (this.ua.match('(Windows NT 6.3)')) ? true : false;
},
/**
* @return {boolean}
*/
isWin10: function() {
return (this.ua.match('Windows NT 10.0')) ? true : false;
},
/**
* @return {boolean}
*/
isOpenBSD: function() {
return (this.ua.indexOf('OpenBSD') != -1) ? true : false;
},
/**
* @return {boolean}
*/
isSunOS: function() {
return (this.ua.indexOf('SunOS') != -1) ? true : false;
},
/**
* @return {boolean}
*/
isLinux: function() {
return (this.ua.match('(Linux)|(X11)')) ? true : false;
},
/**
* @return {boolean}
*/
isMacintosh: function() {
return (this.ua.match('(Mac_PowerPC)|(Macintosh)|(MacIntel)')) ? true : false;
},
/**
* @return {boolean}
*/
isOsxYosemite: function(){ // TODO
return (this.ua.match('(OS X 10_10)|(OS X 10.10)')) ? true : false;
},
/**
* @return {boolean}
*/
isOsxMavericks: function(){ // TODO
return (this.ua.match('(OS X 10_9)|(OS X 10.9)')) ? true : false;
},
/**
* @return {boolean}
*/
isOsxSnowLeopard: function(){ // TODO
return (this.ua.match('(OS X 10_8)|(OS X 10.8)')) ? true : false;
},
/**
* @return {boolean}
*/
isOsxLeopard: function(){ // TODO
return (this.ua.match('(OS X 10_7)|(OS X 10.7)')) ? true : false;
},
/**
* @return {boolean}
*/
isWinPhone: function() {
return (this.ua.match('(Windows Phone)')) ? true : false;
},
/**
* @return {boolean}
*/
isIphone: function() {
return (this.ua.indexOf('iPhone') != -1) ? true : false;
},
/**
* @return {boolean}
*/
isIpad: function() {
return (this.ua.indexOf('iPad') != -1) ? true : false;
},
/**
* @return {boolean}
*/
isIpod: function() {
return (this.ua.indexOf('iPod') != -1) ? true : false;
},
/**
* @return {boolean}
*/
isNokia: function() {
return (this.ua.match('(Maemo Browser)|(Symbian)|(Nokia)')) ? true : false;
},
/**
* @return {boolean}
*/
isAndroid: function() {
return (this.ua.match('Android')) ? true : false;
},
/**
* @return {boolean}
*/
isBlackBerry: function() {
return (this.ua.match('BlackBerry')) ? true : false;
},
/**
* @return {boolean}
*/
isWebOS: function() {
return (this.ua.match('webOS')) ? true : false;
},
/**
* @return {boolean}
*/
isQNX: function() {
return (this.ua.match('QNX')) ? true : false;
},
/**
* @return {boolean}
*/
isBeOS: function() {
return (this.ua.match('BeOS')) ? true : false;
},
/**
* @return {boolean}
*/
isAros: function() {
return (this.ua.match('AROS')) ? true : false;
},
/**
* @return {boolean}
*/
isWindows: function() {
return (this.ua.match('Windows')) ? true : false;
},
/**
* @return {string}
*/
getName: function() {
if(this.isWindows()){
return 'Windows';
}
if(this.isMacintosh()) {
return 'OSX';
}
//Nokia
if(this.isNokia()) {
if (this.ua.indexOf('Maemo Browser') != -1) return 'Maemo';
if (this.ua.match('(SymbianOS)|(Symbian OS)')) return 'SymbianOS';
if (this.ua.indexOf('Symbian') != -1) return 'Symbian';
}
// BlackBerry
if(this.isBlackBerry()) return 'BlackBerry OS';
// Android
if(this.isAndroid()) return 'Android';
// SunOS
if(this.isSunOS()) return 'SunOS';
//Linux
if(this.isLinux()) return 'Linux';
//iPhone
if (this.isIphone()) return 'iOS';
//iPad
if (this.isIpad()) return 'iOS';
//iPod
if (this.isIpod()) return 'iOS';
//others
if(this.isQNX()) return 'QNX';
if(this.isBeOS()) return 'BeOS';
if(this.isWebOS()) return 'webOS';
if(this.isAros()) return 'AROS';
return 'unknown';
},
/**
* Get OS architecture.
* This may not be the same as the browser arch or CPU arch.
* ie, 32bit OS on 64bit hardware
*/
getArch: function() {
var arch = 'unknown';
try {
var arch = platform.os.architecture;
if (!!arch)
return arch;
} catch (e) {}
return arch;
},
/**
* Get OS family
*/
getFamily: function() {
var family = 'unknown';
try {
var family = platform.os.family;
if (!!family)
return family;
} catch (e) {}
return arch;
},
/**
* Get OS name
* @return {string}
*/
getVersion: function(){
//Windows
if(this.isWindows()) {
if (this.isWin10()) return '10';
if (this.isWin81()) return '8.1';
if (this.isWin8()) return '8';
if (this.isWin7()) return '7';
if (this.isWinVista()) return 'Vista';
if (this.isWinXP()) return 'XP';
if (this.isWinServer2003()) return 'Server 2003';
if (this.isWin2000SP1()) return '2000 SP1';
if (this.isWin2000()) return '2000';
if (this.isWinME()) return 'Millenium';
if (this.isWinNT4()) return 'NT 4';
if (this.isWinCE()) return 'CE';
if (this.isWin95()) return '95';
if (this.isWin98()) return '98';
}
// OS X
if(this.isMacintosh()) {
if (this.isOsxYosemite()) return '10.10';
if (this.isOsxMavericks()) return '10.9';
if (this.isOsxSnowLeopard()) return '10.8';
if (this.isOsxLeopard()) return '10.7';
}
// TODO add Android/iOS version detection
}
};
beef.regCmp('beef.net.os');