# 历史变更记录 [Chinese, since 2019] 这篇文档记录本项目的一些历史变更记录。 This document records the history changes of this project. 2019.1.5 1、整理垃圾排版,优化上线下线处理逻辑。 2、修复部分内存泄漏问题,改善线程处理逻辑。 3、修复客户端不停断线重连的缺陷。解决部分内存泄漏缺陷。 4、解决几处缺陷。【遗留问题】文件管理对话框释放资源导致第2次打开崩溃。 2019.1.6 1、改用EnumDisplaySettings获取屏幕大小,原方法获取屏幕大小不准。 2、将FileManagerDlg、InputDlg、FileTransferModeDlg、TrueColorToolBar还原到gh0st最初版本。 3、新增项目"ghost",不通过TestRun调用dll,而是直接生成可执行文件。 4、修复开启视频,客户端产生的一处内存泄漏缺陷,m_pCapture需要释放。 2019.1.7 1、ghost单台电脑只允许启动唯一的实例。 2、远程桌面反应迟钝,改用每秒传送8帧屏幕,后续有待优化。 2019.1.8 1、发现传屏的瓶颈在zlib压缩数据,更新zlib到版本V1.2.11,提高传送屏幕速度到每秒10帧。 2、ghost的类CBuffer不需要临界区。 2019.1.9 1、服务端IOCPServer类的工作线程改为计算机核心个数的2倍。 2、解决服务端主动退出的内存泄漏问题,泄漏源在OVERLAPPEDPLUS。 2019.1.10 1、服务端远程控制增加全屏(系统右键菜单)、退出全屏(F11)的功能。 2、修复客户端机器屏幕缩放时远程桌面鼠标光标位置不准确的问题。(跟踪光标受影响) 3、发现服务端需要采用默认英文输入法,才能在远程桌面输入中文(怀疑本地输入法截获消息)。 4、添加崩溃时写dump文件的代码。 2019.1.11 1、修复文件管理对话框多次打开崩溃的问题(【遗留问题】)。 2、遗留问题:远程cmd窗口总是将输入命令输出2次、文件对话框的菜单操作可能已失效。 2019.1.12 1、还原客户端的文件管理模块代码为gh0st的源码3.6版本. 2、修复上述"cmd窗口总是将输入命令输出2次"遗留问题。 3、打开注册表关闭后崩溃,参照按对文件管理窗口的修改进行处理。遗留问题: 并无内存泄漏,但退出时报"HEAP: Free Heap modified after it was freed"问题。 4、退出时睡眠一会,等待服务端清理,发现这样可以避免退出时崩溃的概率。 5、发布稍微稳定的版本V1.0.0.1。 2019.1.13 1、在主对话框清理子窗口的资源(原先在各自的OnClose函数),通过CLOSE_DELETE_DLG控制。 2、修正CFileManagerDlg的构造函数调用SHGetFileInfo和FromHandle方法,解决多次打开崩溃。 3、更新服务端zlib版本为V1.2.11。(与客户端不同,因inflate_fast 崩溃,没有采用汇编) 2019.1.15 1、修复主控端CTalkDlg的内存泄漏问题,被控端即时消息对话框置于顶层。 2、SAFE_DELETE(ContextObject->olps)有崩溃概率。改为主控端退出时先令被控端退出,就没有内存泄漏。 3、开关音频时偶有内存泄漏,waveInCallBack线程不能正常退出。 2019.1.16 1、智能计时宏AUTO_TICK有问题,不应该用无名的局部变量auto_tick。 2、采用由Facebook所开发的速度更快的压缩库zstd,提高程序运行效率。 参看:https://github.com/facebook/zstd 2019.1.17 1、添加比zstd更快的压缩库(压缩率不如zstd和zlib)lz4 1.8.3,参看 https://github.com/lz4/lz4 2、修复被控端屏幕被缩放显示时远程桌面跟踪鼠标的位置不准的问题。 3、修复语音监听的问题,2个事件CAudio修改为非"Manual Reset"。 2019.1.18 1、整理部分垃圾代码。 2、发布V1.0.0.2。 2018.1.19 1、发现使用lz4压缩库时监控端程序进行远程桌面操作时容易崩溃,原因不明。 2、修复内存泄漏缺陷,在throw "Bad Buffer"的情况需要释放申请的内存。 2019.1.20 1、发现不管是采用zstd还是zlib,主控端在进行桌面控制时均有崩溃的几率(zlib较小)。 2、改用zlib压缩解压库。 3、完善追踪鼠标时鼠标形态变化时的展现效果。 4、当退出远程桌面窗口全屏状态时,不再向远程被控端发送F11。 5、发现在有线网络条件下主控端崩溃几率较小。 6、禁用主控端输入法,解决使用远程桌面在被控端输入时的麻烦问题。 2019.1.21 减少远程桌面new缓冲区的频率,将部分从堆上new固定内存的操作改用从栈上分配内存。 2019.1.22 减少音频视频捕获过程中频繁申请内存。 2019.1.25 1、修复被控端消息提示对话框在消息换行时显示不完整的问题。 2、添加/完善录制远程被控端视频的功能。 3、修复语音监听对话框显示已收到数据不更新状态的问题。 4、发现"发送本地语音"会导致主控端容易崩溃的问题,现象类似于操作远程桌面时的随机崩溃。 5、设置视频监控对话框为可调整大小,为其设置图标。 2019.1.26 1、发布V1.0.0.3。 2、修复Release模式打不开远程视频,或打开视频时画面卡住的问题,问题出在CCaptureVideo GetDIB。 2019.2.4 清理垃圾注释、整理不良排版,对代码略有改动。 遗留问题:文件管理功能无效、主控端随机崩溃。因此有必要将文件管理的功能屏蔽。 发布V1.0.0.4。 2019.3.24 1、将"2015Remote.rc"的一个光标文件"4.cur"的路径由绝对路径改为相对路径。 2、新增Release模式编译后控制台运行时不可见,新增TestRun向注册表写入开机自启动项。 2019.3.29 1、主控端和受控端同时修改LOGIN_INFOR结构,修复了受控端上报的操作系统信息不准确的问题。 2、发布V1.0.0.5。 注意:此次更新后的主控端需要和受控端匹配使用,否则可能出现问题。 2019.4.4 ghost项目采用VS2012 xp模式编译,以便支持在XP系统上运行。 2019.4.14 在2015RemoteDlg.h添加宏CLIENT_EXIT_WITH_SERVER,用于控制ghost是否随Yama退出。 2019.4.15 明确区分开退出被控端和退出主控端2个消息,只有发送退出被控端消息才会停止Socket客户端。 2019.4.19 1、TestRun读取配置文件改为setting.ini,配置项为 [settings] localIp 和 ghost。 2、CAudio的线程waveInCallBack在while循环有一处return,已改为break. 2019.4.20 TestRun在写入开机自启动项时先提升权限,以防止因权限不足而写注册表失败。 2019.4.30 升级全部项目采用Visual Studio Community 2015编译。 2019.5.6 当TestRun、ClientDemo运行时若未成功加载ServerDll.dll,则给出提示。 所有项目均采用平台工具集"Visual Studio 2012 - Windows XP (v110_xp)",以支持在XP上运行。 2019.5.7 1、添加对远程IP使用域名时的支持,若IP为域名,先将域名进行解析后再连接。 2、添加文档“使用花生壳.txt”,介绍了如何使用花生壳软件搭建远程监控系统。 2019.5.8 优化左键点击Yama托盘图标的效果。 2019.5.11 优化远程桌面发送屏幕的功能,可动态调整发送屏幕的速率。 2019.8.25 调整项目设置,解决采用VS2015编译时某些项目不通过的问题。 2021.3.14 修复了若干个问题。 2024.9.6 1.新增"2019Remote.sln"支持使用Visual Studio 2019编译项目。 2.增加了使用VLD的操作方法,详见"server\2015Remote\stdafx.h"。 注意:自VS2019开始,不支持XP系统了(微软已经声明这个变更)。如果有需要在XP系统进行监控的需求,推荐使用"2015Remote.sln"。 如果使用VS2015编译,需将WindowsTargetPlatformVersion修改为8.1,将PlatformToolset修改为v140_xp。 2024.12.26 解决主控程序概率性崩溃的问题,增强主控程序运行的稳定性。本人未进行广泛测试,不保证彻底根治,但稳定性有明显改观。 fix: client threads number excceeding bug fix: #19 the CBuffer causing server crash fix: showing the wrong host quantity in status bar 2024.12.27 solve some issues according to code analysis result reorg: Move commands to common/commands.h 此次提交的重点是将重复代码移动到公共目录,减少代码的冗余。 2024.12.28 1.修改了注册指令内容,新生成的主控程序和被控程序不能和以往的程序混用!! 预留了字段,以便未来之需。 2.解决客户端接收大数据包的问题! 主控程序增加显示被控端版本信息,以便实现针对老版本在线更新(仅限基于TestRun的服务)的能力。 在主控程序上面增加了显示被控端启动时间的功能,以便掌握被控端程序的稳定性。 3.完善生成服务程序的功能。 2024.12.29 增加显示被控程序"类型"的功能:如果被控程序为单个EXE则显示为"EXE",如果被控程序为EXE调用动态库形式,则显示为"DLL". 当前,只有类型为DLL的服务支持在线升级。本次提交借机对前一个更新中的"预留字段"进行了验证。 在动态链接库中增加导出函数Run,以便通过rundll32.exe调用动态链接库。这种形式也是支持在线对DLL进行升级的。 2024.12.31 生成服务时增加加密选项,当前支持XOR加密。配合使用解密程序来加载加密后的服务。 2025.01.12 修复被控程序关于远程桌面相关可能的2处问题(#28 #29)。增加对主控端列表窗口的排序功能(#26 #27),以便快速定位窗口、服务或进程。 发布一个运行**非常稳定**的版本v1.0.6,该版本不支持在较老的Windows XP系统运行(注:VS2019及以后版本已不支持XP工具集,为此需要更早的VS)。 您可以从GitHub下载最新的Release,也可以clone该项目在相关目录找到。如果杀毒软件报告病毒,这是正常现象,请信任即可,或者您可以亲自编译。 2025.02.01 参考[Gh0st](https://github.com/yuanyuanxiang/Gh0st/pull/2),增加键盘记录功能。实质上就是拷贝如下四个文件: *KeyboardManager.h、KeyboardManager.cpp、KeyBoardDlg.h、KeyBoardDlg.cpp* **2025.04.05** 发布 v1.0.7,主要修复或新增以下功能: - 更新第三方库,将压缩算法从 zlib 更换为 zstd,旧版本 v1.0.6 仍兼容; - 支持编译为 Win64; - 修复若干 Bug,提高程序稳定性; - 提升远程控制效率,新增更多位图压缩方式; - 对部分代码结构进行了重构。 **2025.04.12** 自 v1.0.7 于 4 月 5 日发布以来: - 功能改进:确保 `Shelldlg` 输入命令始终定位在末尾,并构建了一个**简易的 Linux 客户端**; - 修复 Bug:#62、#74、#75; - 将原标志位 0x1234567 更改为更具可读性的字符串;改进构建服务功能,允许选择其他文件进行构建; - 增加展示用户活动和监控指定软件的功能; - 清理全局变量,使得一个程序中可以轻松创建多个客户端,便于测试主控端的负载能力; - 实现内存加载 DLL,便于客户端程序热更新。 **2025.04.21** 发布 v1.0.8: - 支持与其他主控共享在线主机; - 实现服务端生成授权的能力,增加序列号生成菜单; - 引入 `HPSocket` 库,为未来使用做准备,并引入静态 ffmpeg 库以支持构建 Win64 主控端; - 实现内存中运行 DLL:`TestRun` 程序从主控请求 DLL 并在内存中执行。 **2025.04.30** 发布 v1.0.9: - 更新客户端构建功能 / 一体化生成;主控仅接受由自身构建的客户端连接; - 优化授权功能。 **2025.06.01** 发布 v1.1.0: - 修复:IOCPClient 断开连接时清空缓冲区; - 实现 SOCKS 代理功能; - 增加菜单项,修改列表样式,添加日志记录; - 新增功能:增加一个用于执行 Shellcode 的 C 程序; - 新增功能:对服务器地址进行加密; - 新增特性:支持虚拟远程桌面监控; - 新增命令:支持执行代码(64位 DLL)。 **2025.06.21** 发布 v1.1.1: *自该版本开始,主控程序需要授权,并且会自动连接到授权服务器,您可以联系作者请求授权。 如果对这个有意见,请使用早期版本(=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 **2026.01.01** Release v1.2.1 This release enhances remote desktop features (FPS control, screen switching, file drag-and-drop support), improves Windows service mode, and fixes several stability issues. * Improve: Append shellcode to file end when building client * Fix: `TestRun` run as Windows service can't unlock screen * Feature: Add FPS control menu for remote desktop * Fix: Exist-check include checking client IP in `AddList` * Fix: Revert #242 and improve security when sending files to client * Fix: Switch screen and support dragging files to remote * Fix: #266 CloseHandle close an invalid handle * Improve: Add more system hot key to forward * Feature: Add menu to control if run master as service * Improve: `ToolbarDlg` slide in / slide out performance **2026.01.11** Release v1.2.2 This release enhances remote desktop settings persistence, file management features, and improves authorization and keyboard forwarding. * Improve: Save remote desktop screen settings in registry * Fix: Authorization return failure if date is out of range * Improve: `GetForegroundSelectedFiles` if `GetClipboardFiles` failed * Feature: Show screen resolution and client id in popup window * Feature: Support customizing client name and install directory * Feature: Add menu to set screen strategy for remote control * Improve: Showing file transmit progress dialog * Feature: Support compress files in file management dialog * Improve: Add F10, WM_SYSKEYDOWN, WM_SYSKEYUP to forward