mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-22 07:14:15 +08:00
style: Change files encoding format to UTF8-BOM
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#include "stdafx.h"
|
||||
#else
|
||||
@@ -21,52 +21,52 @@
|
||||
#pragma comment(lib, "Advapi32.lib")
|
||||
#pragma comment(lib, "bcrypt.lib")
|
||||
|
||||
// ִ<EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡӲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// 执行系统命令,获取硬件信息
|
||||
std::string execCommand(const char* cmd)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ùܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 设置管道,用于捕获命令的输出
|
||||
SECURITY_ATTRIBUTES saAttr;
|
||||
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
|
||||
saAttr.bInheritHandle = TRUE;
|
||||
saAttr.lpSecurityDescriptor = NULL;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺܵ<EFBFBD>
|
||||
// 创建用于接收输出的管道
|
||||
HANDLE hStdOutRead, hStdOutWrite;
|
||||
if (!CreatePipe(&hStdOutRead, &hStdOutWrite, &saAttr, 0)) {
|
||||
Mprintf("CreatePipe failed with error: %d\n", GetLastError());
|
||||
return "ERROR";
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// 设置启动信息
|
||||
STARTUPINFO si = { sizeof(si) };
|
||||
PROCESS_INFORMATION pi;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 设置窗口隐藏
|
||||
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
|
||||
si.wShowWindow = SW_HIDE;
|
||||
si.hStdOutput = hStdOutWrite; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD>ܵ<EFBFBD>
|
||||
si.hStdOutput = hStdOutWrite; // 将标准输出重定向到管道
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 创建进程
|
||||
if (!CreateProcess(
|
||||
NULL, // Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
(LPSTR)cmd, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
NULL, // <EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
NULL, // <EFBFBD>̰߳<EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TRUE, // <EFBFBD>Ƿ<EFBFBD><EFBFBD>̳о<EFBFBD><EFBFBD><EFBFBD>
|
||||
0, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||||
NULL, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
NULL, // <EFBFBD><EFBFBD>ǰĿ¼
|
||||
&si, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
&pi // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
NULL, // 应用程序名称
|
||||
(LPSTR)cmd, // 命令行
|
||||
NULL, // 进程安全属性
|
||||
NULL, // 线程安全属性
|
||||
TRUE, // 是否继承句柄
|
||||
0, // 创建标志
|
||||
NULL, // 环境变量
|
||||
NULL, // 当前目录
|
||||
&si, // 启动信息
|
||||
&pi // 进程信息
|
||||
)) {
|
||||
Mprintf("CreateProcess failed with error: %d\n", GetLastError());
|
||||
return "ERROR";
|
||||
}
|
||||
|
||||
// <EFBFBD>ر<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 关闭写入端句柄
|
||||
SAFE_CLOSE_HANDLE(hStdOutWrite);
|
||||
|
||||
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 读取命令输出
|
||||
char buffer[128];
|
||||
std::string result = "";
|
||||
DWORD bytesRead;
|
||||
@@ -74,27 +74,27 @@ std::string execCommand(const char* cmd)
|
||||
result.append(buffer, bytesRead);
|
||||
}
|
||||
|
||||
// <EFBFBD>رն<EFBFBD>ȡ<EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 关闭读取端句柄
|
||||
SAFE_CLOSE_HANDLE(hStdOutRead);
|
||||
|
||||
// <EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 等待进程完成
|
||||
WaitForSingleObject(pi.hProcess, INFINITE);
|
||||
|
||||
// <EFBFBD>رս<EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD>߳̾<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 关闭进程和线程句柄
|
||||
SAFE_CLOSE_HANDLE(pi.hProcess);
|
||||
SAFE_CLOSE_HANDLE(pi.hThread);
|
||||
|
||||
// ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD>Ϳո<EFBFBD>
|
||||
// 去除换行符和空格
|
||||
result.erase(remove(result.begin(), result.end(), '\n'), result.end());
|
||||
result.erase(remove(result.begin(), result.end(), '\r'), result.end());
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 返回命令的输出结果
|
||||
return result.empty() ? "ERROR" : result;
|
||||
}
|
||||
|
||||
std::string getHardwareID_PS()
|
||||
{
|
||||
// Get-WmiObject <EFBFBD><EFBFBD> PowerShell 2.0+ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (>=Win7)
|
||||
// Get-WmiObject 在 PowerShell 2.0+ 都可用 (>=Win7)
|
||||
const char* psScript =
|
||||
"(Get-WmiObject Win32_Processor).ProcessorId + '|' + "
|
||||
"(Get-WmiObject Win32_BaseBoard).SerialNumber + '|' + "
|
||||
@@ -111,16 +111,16 @@ std::string getHardwareID_PS()
|
||||
return combinedID;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>ȡӲ<EFBFBD><EFBFBD> ID<EFBFBD><EFBFBD>CPU + <EFBFBD><EFBFBD><EFBFBD><EFBFBD> + Ӳ<>̣<EFBFBD>
|
||||
// 获取硬件 ID(CPU + 主板 + 硬盘)
|
||||
std::string getHardwareID()
|
||||
{
|
||||
// wmic<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// wmic在新系统可能被移除了
|
||||
std::string cpuID = execCommand("wmic cpu get processorid");
|
||||
std::string boardID = execCommand("wmic baseboard get serialnumber");
|
||||
std::string diskID = execCommand("wmic diskdrive get serialnumber");
|
||||
std::string combinedID = cpuID + "|" + boardID + "|" + diskID;
|
||||
if (combinedID.find("ERROR") != std::string::npos) {
|
||||
// ʧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD> PowerShell <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 失败再使用 PowerShell 方法
|
||||
std::string psID = getHardwareID_PS();
|
||||
if (!psID.empty()) {
|
||||
Mprintf("Get hardware info with PowerShell: %s\n", psID.c_str());
|
||||
@@ -133,7 +133,7 @@ std::string getHardwareID()
|
||||
return combinedID;
|
||||
}
|
||||
|
||||
// ʹ<EFBFBD><EFBFBD> SHA-256 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ
|
||||
// 使用 SHA-256 计算哈希
|
||||
std::string hashSHA256(const std::string& data)
|
||||
{
|
||||
HCRYPTPROV hProv;
|
||||
@@ -167,7 +167,7 @@ std::string genHMAC(const std::string& pwdHash, const std::string& superPass)
|
||||
return hashSHA256(pwdHash + " - " + key).substr(0, 16);
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16 <20>ַ<EFBFBD><D6B7><EFBFBD>Ψһ<CEA8>豸 ID
|
||||
// 生成 16 字符的唯一设备 ID
|
||||
std::string getFixedLengthID(const std::string& hash)
|
||||
{
|
||||
return hash.substr(0, 4) + "-" + hash.substr(4, 4) + "-" + hash.substr(8, 4) + "-" + hash.substr(12, 4);
|
||||
|
||||
Reference in New Issue
Block a user