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+= "