diff --git a/core/main/client/browser.js b/core/main/client/browser.js index a3bf1a77f..2177fe8fe 100644 --- a/core/main/client/browser.js +++ b/core/main/client/browser.js @@ -4028,7 +4028,8 @@ beef.browser = { var os_version = beef.os.getVersion(); var default_browser = beef.os.getDefaultBrowser(); var hw_name = beef.hardware.getName(); - var cpu_type = beef.hardware.getCpuType(); + var cpu_arch = beef.hardware.getCpuArch(); + var cpu_cores = beef.hardware.getCpuCores(); var touch_enabled = (beef.hardware.isTouchEnabled()) ? "Yes" : "No"; var browser_platform = (typeof(navigator.platform) != "undefined" && navigator.platform != "") ? navigator.platform : 'Unknown'; var browser_type = JSON.stringify(beef.browser.type(), function (key, value) { @@ -4074,7 +4075,8 @@ beef.browser = { if (os_version) details['OsVersion'] = os_version; if (default_browser) details['DefaultBrowser'] = default_browser; if (hw_name) details['Hardware'] = hw_name; - if (cpu_type) details['CPU'] = cpu_type; + if (cpu_arch) details['CpuArch'] = cpu_arch; + if (cpu_cores) details['CpuCores'] = cpu_cores; if (touch_enabled) details['TouchEnabled'] = touch_enabled; if (date_stamp) details['DateStamp'] = date_stamp; if (browser_platform) details['BrowserPlatform'] = browser_platform; diff --git a/core/main/client/hardware.js b/core/main/client/hardware.js index aeb2942b8..cf93d8964 100644 --- a/core/main/client/hardware.js +++ b/core/main/client/hardware.js @@ -11,7 +11,7 @@ beef.hardware = { /* * @return: {String} CPU type **/ - getCpuType: function() { + getCpuArch: function() { var arch = 'UNKNOWN'; // note that actually WOW64 means IE 32bit and Windows 64 bit. we are more interested // in detecting the OS arch rather than the browser build @@ -37,6 +37,69 @@ beef.hardware = { return arch; }, + /** + * Returns number of CPU cores + **/ + getCpuCores: function() { + var cores = 'unknown'; + try { + if(typeof navigator.hardwareConcurrency != 'undefined') { + cores = navigator.hardwareConcurrency; + } + } catch(e) { + cores = 'unknown'; + } + return cores; + }, + + /** + * Returns CPU details + **/ + getCpuDetails: function() { + return { + arch: beef.hardware.getCpuArch(), + cores: beef.hardware.getCpuCores() + } + }, + + /** + * Returns RAM (GiB) + **/ + getMemory: function() { + var memory = 'unknown'; + try { + if(typeof navigator.deviceMemory != 'undefined') { + memory = navigator.deviceMemory; + } + } catch(e) { + memory = 'unknown'; + } + return memory; + }, + + /** + * Returns battery details + **/ + getBatteryDetails: function() { + var battery = navigator.battery || navigator.webkitBattery || navigator.mozBattery; + + if (!!battery) { + return { + chargingStatus: battery.charging, + batteryLevel: battery.level * 100 + "%", + chargingTime: battery.chargingTime, + dischargingTime: battery.dischargingTime + } + } else { + return { + chargingStatus: 'unknown', + batteryLevel: 'unknown', + chargingTime: 'unknown', + dischargingTime: 'unknown' + } + } + }, + /** * Returns zombie screen size and color depth. */ diff --git a/core/main/handlers/browserdetails.rb b/core/main/handlers/browserdetails.rb index fe5fe8acf..8b4ced2d0 100644 --- a/core/main/handlers/browserdetails.rb +++ b/core/main/handlers/browserdetails.rb @@ -333,12 +333,20 @@ module BeEF end end - # get and store the value for CPU - cpu_type = get_param(@data['results'], 'CPU') - if BeEF::Filters.is_valid_cpu?(cpu_type) - BD.set(session_id, 'CPU', cpu_type) + # get and store the value for CpuArch + cpu_arch = get_param(@data['results'], 'CpuArch') + if BeEF::Filters.is_valid_cpu?(cpu_arch) + BD.set(session_id, 'CpuArch', cpu_arch) else - self.err_msg "Invalid value for CPU returned from the hook browser's initial connection." + self.err_msg "Invalid value for CpuArch returned from the hook browser's initial connection." + end + + # get and store the value for CpuCores + cpu_cores = get_param(@data['results'], 'CpuCores') + if BeEF::Filters.alphanums_only?(cpu_cores) + BD.set(session_id, 'CpuCores', cpu_cores) + else + self.err_msg "Invalid value for CpuCores returned from the hook browser's initial connection." end # get and store the value for TouchEnabled diff --git a/extensions/admin_ui/controllers/modules/modules.rb b/extensions/admin_ui/controllers/modules/modules.rb index ea5ffe925..180133afb 100644 --- a/extensions/admin_ui/controllers/modules/modules.rb +++ b/extensions/admin_ui/controllers/modules/modules.rb @@ -123,7 +123,8 @@ class Modules < BeEF::Extension::AdminUI::HttpController ['Host', 'Date', 'DateStamp'], ['Host', 'Operating System', 'OsName'], ['Host', 'Hardware', 'Hardware'], - ['Host', 'CPU', 'CPU'], + ['Host', 'CPU Arch', 'CpuArch'], + ['Host', 'CPU Cores', 'CpuCores'], ['Host', 'Default Browser', 'DefaultBrowser'], ['Host', 'Screen Size', 'ScreenSize'], ['Host', 'Touch Screen', 'TouchEnabled'] diff --git a/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js b/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js index d2a44ec2f..8d66275b1 100644 --- a/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js +++ b/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js @@ -36,7 +36,7 @@ var ZombiesMgr = function(zombies_tree_lists) { text+= ip; balloon_text = "IP: " + ip; - balloon_text+= "
Origin: " + domain + ":" + port; + balloon_text+= "
Origin: " + domain + ":" + port; balloon_text+= "
Browser: " + browser_name + " " + browser_version; balloon_text+= "
System: " + os_name; balloon_text+= "
Hardware: " + hw_name;