86 lines
2.9 KiB
JavaScript
86 lines
2.9 KiB
JavaScript
const crypto = require("node:crypto")
|
|
const os = require("node:os")
|
|
const { readFileSync } = require("fs")
|
|
const { execSync } = require("child_process")
|
|
|
|
function getDiskSerial() {
|
|
try {
|
|
let command
|
|
if (os.platform() === "win32") {
|
|
command = "wmic diskdrive get serialnumber"
|
|
const output = execSync(command).toString()
|
|
const serial = output.split("\n")[1].trim()
|
|
return serial
|
|
} else if (os.platform() === "darwin") {
|
|
command = "system_profiler SPHardwareDataType | grep 'Serial Number'"
|
|
const output = execSync(command).toString()
|
|
const serial = output.match(/Serial Number: (.+)/)?.[1]?.trim()
|
|
return serial
|
|
} else if (os.platform() === "linux") {
|
|
const serialPath = "/sys/class/block/sda/device/serial"
|
|
const serial = readFileSync(serialPath, "utf8").trim()
|
|
return serial
|
|
} else {
|
|
throw new Error("Unsupported OS")
|
|
}
|
|
} catch (error) {
|
|
console.error("Error retrieving disk serial number:", error)
|
|
return ""
|
|
}
|
|
}
|
|
|
|
function getMotherboardSerial() {
|
|
try {
|
|
let command
|
|
if (os.platform() === "win32") {
|
|
command = "wmic baseboard get serialnumber"
|
|
const output = execSync(command).toString()
|
|
const serial = output.split("\n")[1].trim()
|
|
return serial
|
|
} else if (os.platform() === "darwin") {
|
|
command = "ioreg -l | grep IOPlatformSerialNumber"
|
|
const output = execSync(command).toString()
|
|
const serial = output.match(/"IOPlatformSerialNumber" = "(.+?)"/)?.[1]?.trim()
|
|
return serial
|
|
} else if (os.platform() === "linux") {
|
|
const serialPath = "/sys/class/dmi/id/board_serial"
|
|
const serial = readFileSync(serialPath, "utf8").trim()
|
|
return serial
|
|
} else {
|
|
throw new Error("Unsupported OS")
|
|
}
|
|
} catch (error) {
|
|
console.error("Error retrieving motherboard serial number:", error)
|
|
return ""
|
|
}
|
|
}
|
|
|
|
function getMacAddresses() {
|
|
const networkInterfaces = os.networkInterfaces()
|
|
const macs = []
|
|
|
|
for (const iface of Object.values(networkInterfaces)) {
|
|
for (const nic of iface) {
|
|
if (!nic.internal && nic.mac !== "00:00:00:00:00:00") {
|
|
macs.push(nic.mac)
|
|
}
|
|
}
|
|
}
|
|
|
|
return macs.join("")
|
|
}
|
|
|
|
function generateHWID() {
|
|
const diskSerial = getDiskSerial()
|
|
const motherboardSerial = getMotherboardSerial()
|
|
const macAddresses = getMacAddresses()
|
|
const cpuInfo = os.cpus().map(cpu => cpu.model).join("")
|
|
const user = os.userInfo().username
|
|
|
|
const uniqueData = `${diskSerial}-${motherboardSerial}-${macAddresses}-${cpuInfo}-${user}`
|
|
const hwid = crypto.createHash("sha256").update(uniqueData).digest("hex")
|
|
|
|
return hwid
|
|
}
|
|
|
|
module.exports.getHWID = generateHWID |