2019-01-05 20:21:43 +08:00
// 2015RemoteDlg.cpp : ʵ<> <CAB5> <EFBFBD> ļ<EFBFBD>
//
# include "stdafx.h"
# include "2015Remote.h"
# include "2015RemoteDlg.h"
# include "afxdialogex.h"
# include "SettingDlg.h"
# include "IOCPServer.h"
# include "ScreenSpyDlg.h"
# include "FileManagerDlg.h"
# include "TalkDlg.h"
# include "ShellDlg.h"
# include "SystemDlg.h"
# include "BuildDlg.h"
# include "AudioDlg.h"
# include "RegisterDlg.h"
# include "ServicesDlg.h"
# include "VideoDlg.h"
2019-01-11 21:40:11 +08:00
# include <vector>
2025-01-31 22:22:16 +08:00
# include "KeyBoardDlg.h"
2025-04-15 21:37:01 +08:00
# include "InputDlg.h"
2025-04-16 23:31:34 +08:00
# include "CPasswordDlg.h"
# include "pwd_gen.h"
2025-05-03 20:57:22 +08:00
# include "parse_ip.h"
# include <proxy/ProxyMapDlg.h>
2025-04-20 21:24:31 +08:00
# include "DateVerify.h"
2025-04-28 16:08:16 +08:00
# include <fstream>
# include "common/skCrypter.h"
2025-05-03 20:57:22 +08:00
# include "common/commands.h"
2025-05-04 04:02:34 +08:00
# include <algorithm>
2019-01-05 20:21:43 +08:00
# ifdef _DEBUG
# define new DEBUG_NEW
# endif
2025-05-03 17:23:01 +08:00
# ifndef GET_FILEPATH
# define GET_FILEPATH(dir,file) [](char*d,const char*f){char*p=d;while(*p)++p;while('\\'!=*p&&p!=d)--p;strcpy(p+1,f);return d;}(dir,file)
# endif
2019-01-05 20:21:43 +08:00
# define UM_ICONNOTIFY WM_USER+100
2025-04-27 03:52:33 +08:00
# define TIMER_CHECK 1
2019-01-11 21:40:11 +08:00
2019-01-05 20:21:43 +08:00
typedef struct
{
2019-02-04 14:49:11 +08:00
const char * szTitle ; //<2F> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
int nWidth ; //<2F> б <EFBFBD> <D0B1> Ŀ<EFBFBD> <C4BF> <EFBFBD>
} COLUMNSTRUCT ;
2024-12-28 04:34:54 +08:00
const int g_Column_Count_Online = ONLINELIST_MAX ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
2019-02-04 14:49:11 +08:00
COLUMNSTRUCT g_Column_Data_Online [ g_Column_Count_Online ] =
2019-01-05 20:21:43 +08:00
{
2025-05-03 20:57:22 +08:00
{ " IP " , 130 } ,
{ " <EFBFBD> ˿<EFBFBD> " , 60 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <EFBFBD> " , 130 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> /<2F> <> ע" , 150 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϵͳ" , 120 } ,
2019-02-04 14:49:11 +08:00
{ " CPU " , 80 } ,
2025-05-03 20:57:22 +08:00
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͷ" , 70 } ,
{ " PING " , 70 } ,
{ " <EFBFBD> 汾" , 90 } ,
{ " <EFBFBD> <EFBFBD> װʱ<EFBFBD> <EFBFBD> " , 120 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 140 } ,
2024-12-29 01:09:06 +08:00
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 50 } ,
2019-01-05 20:21:43 +08:00
} ;
// <20> <> <EFBFBD> <EFBFBD> Ӧ<EFBFBD> ó<EFBFBD> <C3B3> <EFBFBD> <F2A1B0B9> ڡ<EFBFBD> <DAA1> ˵<EFBFBD> <CBB5> <EFBFBD> <EFBFBD> <EFBFBD> CAboutDlg <20> Ի<EFBFBD> <D4BB> <EFBFBD>
2019-02-04 14:49:11 +08:00
const int g_Column_Count_Message = 3 ; // <20> б <EFBFBD> <D0B1> ĸ<EFBFBD> <C4B8> <EFBFBD>
COLUMNSTRUCT g_Column_Data_Message [ g_Column_Count_Message ] =
2019-01-05 20:21:43 +08:00
{
{ " <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 200 } ,
{ " ʱ<EFBFBD> <EFBFBD> " , 200 } ,
{ " <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 490 }
} ;
2019-02-04 14:49:11 +08:00
int g_Column_Online_Width = 0 ;
int g_Column_Message_Width = 0 ;
2025-04-07 18:18:36 +08:00
2019-01-05 20:21:43 +08:00
CMy2015RemoteDlg * g_2015RemoteDlg = NULL ;
static UINT Indicators [ ] =
{
IDR_STATUSBAR_STRING
} ;
2025-05-03 20:57:22 +08:00
//////////////////////////////////////////////////////////////////////////
// <20> <> <EFBFBD> <EFBFBD> unordered_map <20> <> <EFBFBD> ļ<EFBFBD>
void SaveToFile ( const ComputerNoteMap & data , const std : : string & filename )
{
std : : ofstream outFile ( filename , std : : ios : : binary ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> ģʽ <C4A3> <CABD>
if ( outFile . is_open ( ) ) {
for ( const auto & pair : data ) {
outFile . write ( reinterpret_cast < const char * > ( & pair . first ) , sizeof ( ClientKey ) ) ; // <20> <> <EFBFBD> <EFBFBD> key
int valueSize = pair . second . GetLength ( ) ;
outFile . write ( reinterpret_cast < const char * > ( & valueSize ) , sizeof ( int ) ) ; // <20> <> <EFBFBD> <EFBFBD> value <20> Ĵ<EFBFBD> С
outFile . write ( ( char * ) & pair . second , valueSize ) ; // <20> <> <EFBFBD> <EFBFBD> value <20> ַ<EFBFBD> <D6B7> <EFBFBD>
}
outFile . close ( ) ;
}
else {
Mprintf ( " Unable to open file '%s' for writing! \n " , filename . c_str ( ) ) ;
}
}
// <20> <> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> ȡ unordered_map <20> <> <EFBFBD> <EFBFBD>
void LoadFromFile ( ComputerNoteMap & data , const std : : string & filename )
{
std : : ifstream inFile ( filename , std : : ios : : binary ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> ģʽ <C4A3> <CABD>
if ( inFile . is_open ( ) ) {
while ( inFile . peek ( ) ! = EOF ) {
ClientKey key ;
inFile . read ( reinterpret_cast < char * > ( & key ) , sizeof ( ClientKey ) ) ; // <20> <> ȡ key
int valueSize ;
inFile . read ( reinterpret_cast < char * > ( & valueSize ) , sizeof ( int ) ) ; // <20> <> ȡ value <20> Ĵ<EFBFBD> С
ClientValue value ;
inFile . read ( ( char * ) & value , valueSize ) ; // <20> <> ȡ value <20> ַ<EFBFBD> <D6B7> <EFBFBD>
data [ key ] = value ; // <20> <> <EFBFBD> 뵽 map <20> <>
}
inFile . close ( ) ;
}
else {
Mprintf ( " Unable to open file '%s' for reading! \n " , filename . c_str ( ) ) ;
}
}
//////////////////////////////////////////////////////////////////////////
2019-01-05 20:21:43 +08:00
class CAboutDlg : public CDialogEx
{
public :
CAboutDlg ( ) ;
// <20> Ի<EFBFBD> <D4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
enum { IDD = IDD_ABOUTBOX } ;
protected :
virtual void DoDataExchange ( CDataExchange * pDX ) ; // DDX/DDV ֧<> <D6A7>
// ʵ<> <CAB5>
protected :
DECLARE_MESSAGE_MAP ( )
} ;
CAboutDlg : : CAboutDlg ( ) : CDialogEx ( CAboutDlg : : IDD )
{
}
void CAboutDlg : : DoDataExchange ( CDataExchange * pDX )
{
CDialogEx : : DoDataExchange ( pDX ) ;
}
BEGIN_MESSAGE_MAP ( CAboutDlg , CDialogEx )
END_MESSAGE_MAP ( )
// CMy2015RemoteDlg <20> Ի<EFBFBD> <D4BB> <EFBFBD>
2025-04-07 18:18:36 +08:00
CMy2015RemoteDlg : : CMy2015RemoteDlg ( IOCPServer * iocpServer , CWnd * pParent ) : CDialogEx ( CMy2015RemoteDlg : : IDD , pParent )
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
m_iocpServer = iocpServer ;
m_hExit = CreateEvent ( NULL , TRUE , FALSE , NULL ) ;
2019-01-05 20:21:43 +08:00
m_hIcon = AfxGetApp ( ) - > LoadIcon ( IDR_MAINFRAME ) ;
m_bmOnline [ 0 ] . LoadBitmap ( IDB_BITMAP_ONLINE ) ;
2024-12-28 18:35:34 +08:00
m_bmOnline [ 1 ] . LoadBitmap ( IDB_BITMAP_UPDATE ) ;
m_bmOnline [ 2 ] . LoadBitmap ( IDB_BITMAP_DELETE ) ;
2025-04-15 21:37:01 +08:00
m_bmOnline [ 3 ] . LoadBitmap ( IDB_BITMAP_SHARE ) ;
2025-05-03 20:57:22 +08:00
m_bmOnline [ 4 ] . LoadBitmap ( IDB_BITMAP_PROXY ) ;
m_bmOnline [ 5 ] . LoadBitmap ( IDB_BITMAP_HOSTNOTE ) ;
2019-01-05 20:21:43 +08:00
2025-05-25 20:57:43 +08:00
for ( int i = 0 ; i < PAYLOAD_MAXTYPE ; i + + ) {
m_ServerDLL [ i ] = nullptr ;
m_ServerBin [ i ] = nullptr ;
}
2019-01-05 20:21:43 +08:00
InitializeCriticalSection ( & m_cs ) ;
}
2019-01-11 21:40:11 +08:00
CMy2015RemoteDlg : : ~ CMy2015RemoteDlg ( )
{
DeleteCriticalSection ( & m_cs ) ;
2025-05-25 20:57:43 +08:00
for ( int i = 0 ; i < PAYLOAD_MAXTYPE ; i + + ) {
2025-04-07 18:18:36 +08:00
SAFE_DELETE ( m_ServerDLL [ i ] ) ;
2025-05-25 20:57:43 +08:00
SAFE_DELETE ( m_ServerBin [ i ] ) ;
}
2019-01-11 21:40:11 +08:00
}
2019-01-05 20:21:43 +08:00
void CMy2015RemoteDlg : : DoDataExchange ( CDataExchange * pDX )
{
CDialogEx : : DoDataExchange ( pDX ) ;
DDX_Control ( pDX , IDC_ONLINE , m_CList_Online ) ;
DDX_Control ( pDX , IDC_MESSAGE , m_CList_Message ) ;
}
BEGIN_MESSAGE_MAP ( CMy2015RemoteDlg , CDialogEx )
ON_WM_SYSCOMMAND ( )
ON_WM_PAINT ( )
ON_WM_QUERYDRAGICON ( )
ON_WM_SIZE ( )
ON_WM_TIMER ( )
ON_WM_CLOSE ( )
ON_NOTIFY ( NM_RCLICK , IDC_ONLINE , & CMy2015RemoteDlg : : OnNMRClickOnline )
2025-01-15 00:28:37 +08:00
ON_NOTIFY ( HDN_ITEMCLICK , 0 , & CMy2015RemoteDlg : : OnHdnItemclickList )
2019-01-05 20:21:43 +08:00
ON_COMMAND ( ID_ONLINE_MESSAGE , & CMy2015RemoteDlg : : OnOnlineMessage )
ON_COMMAND ( ID_ONLINE_DELETE , & CMy2015RemoteDlg : : OnOnlineDelete )
2024-12-28 18:35:34 +08:00
ON_COMMAND ( ID_ONLINE_UPDATE , & CMy2015RemoteDlg : : OnOnlineUpdate )
2019-01-05 20:21:43 +08:00
ON_COMMAND ( IDM_ONLINE_ABOUT , & CMy2015RemoteDlg : : OnAbout )
ON_COMMAND ( IDM_ONLINE_CMD , & CMy2015RemoteDlg : : OnOnlineCmdManager )
ON_COMMAND ( IDM_ONLINE_PROCESS , & CMy2015RemoteDlg : : OnOnlineProcessManager )
ON_COMMAND ( IDM_ONLINE_WINDOW , & CMy2015RemoteDlg : : OnOnlineWindowManager )
ON_COMMAND ( IDM_ONLINE_DESKTOP , & CMy2015RemoteDlg : : OnOnlineDesktopManager )
ON_COMMAND ( IDM_ONLINE_FILE , & CMy2015RemoteDlg : : OnOnlineFileManager )
ON_COMMAND ( IDM_ONLINE_AUDIO , & CMy2015RemoteDlg : : OnOnlineAudioManager )
ON_COMMAND ( IDM_ONLINE_VIDEO , & CMy2015RemoteDlg : : OnOnlineVideoManager )
ON_COMMAND ( IDM_ONLINE_SERVER , & CMy2015RemoteDlg : : OnOnlineServerManager )
ON_COMMAND ( IDM_ONLINE_REGISTER , & CMy2015RemoteDlg : : OnOnlineRegisterManager )
2025-01-31 22:22:16 +08:00
ON_COMMAND ( IDM_KEYBOARD , & CMy2015RemoteDlg : : OnOnlineKeyboardManager )
2019-01-05 20:21:43 +08:00
ON_COMMAND ( IDM_ONLINE_BUILD , & CMy2015RemoteDlg : : OnOnlineBuildClient ) //<2F> <> <EFBFBD> <EFBFBD> Client
ON_MESSAGE ( UM_ICONNOTIFY , ( LRESULT ( __thiscall CWnd : : * ) ( WPARAM , LPARAM ) ) OnIconNotify )
ON_COMMAND ( IDM_NOTIFY_SHOW , & CMy2015RemoteDlg : : OnNotifyShow )
ON_COMMAND ( ID_NOTIFY_EXIT , & CMy2015RemoteDlg : : OnNotifyExit )
ON_COMMAND ( ID_MAIN_SET , & CMy2015RemoteDlg : : OnMainSet )
ON_COMMAND ( ID_MAIN_EXIT , & CMy2015RemoteDlg : : OnMainExit )
ON_MESSAGE ( WM_USERTOONLINELIST , OnUserToOnlineList )
ON_MESSAGE ( WM_USEROFFLINEMSG , OnUserOfflineMsg )
ON_MESSAGE ( WM_OPENSCREENSPYDIALOG , OnOpenScreenSpyDialog )
ON_MESSAGE ( WM_OPENFILEMANAGERDIALOG , OnOpenFileManagerDialog )
ON_MESSAGE ( WM_OPENTALKDIALOG , OnOpenTalkDialog )
ON_MESSAGE ( WM_OPENSHELLDIALOG , OnOpenShellDialog )
ON_MESSAGE ( WM_OPENSYSTEMDIALOG , OnOpenSystemDialog )
ON_MESSAGE ( WM_OPENAUDIODIALOG , OnOpenAudioDialog )
ON_MESSAGE ( WM_OPENSERVICESDIALOG , OnOpenServicesDialog )
ON_MESSAGE ( WM_OPENREGISTERDIALOG , OnOpenRegisterDialog )
ON_MESSAGE ( WM_OPENWEBCAMDIALOG , OnOpenVideoDialog )
2025-02-25 03:43:15 +08:00
ON_MESSAGE ( WM_HANDLEMESSAGE , OnHandleMessage )
2025-01-31 22:22:16 +08:00
ON_MESSAGE ( WM_OPENKEYBOARDDIALOG , OnOpenKeyboardDialog )
2025-05-03 20:57:22 +08:00
ON_MESSAGE ( WM_OPENPROXYDIALOG , OnOpenProxyDialog )
2025-05-03 17:23:01 +08:00
ON_MESSAGE ( WM_UPXTASKRESULT , UPXProcResult )
2019-01-12 18:21:42 +08:00
ON_WM_HELPINFO ( )
2025-04-15 21:37:01 +08:00
ON_COMMAND ( ID_ONLINE_SHARE , & CMy2015RemoteDlg : : OnOnlineShare )
2025-04-20 21:24:31 +08:00
ON_COMMAND ( ID_TOOL_AUTH , & CMy2015RemoteDlg : : OnToolAuth )
2025-04-28 16:08:16 +08:00
ON_COMMAND ( ID_TOOL_GEN_MASTER , & CMy2015RemoteDlg : : OnToolGenMaster )
2025-05-03 20:57:22 +08:00
ON_COMMAND ( ID_MAIN_PROXY , & CMy2015RemoteDlg : : OnMainProxy )
ON_COMMAND ( ID_ONLINE_HOSTNOTE , & CMy2015RemoteDlg : : OnOnlineHostnote )
2025-05-07 03:55:58 +08:00
ON_COMMAND ( ID_HELP_IMPORTANT , & CMy2015RemoteDlg : : OnHelpImportant )
ON_COMMAND ( ID_HELP_FEEDBACK , & CMy2015RemoteDlg : : OnHelpFeedback )
2019-01-05 20:21:43 +08:00
END_MESSAGE_MAP ( )
// CMy2015RemoteDlg <20> <> Ϣ<EFBFBD> <CFA2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
void CMy2015RemoteDlg : : OnIconNotify ( WPARAM wParam , LPARAM lParam )
{
switch ( ( UINT ) lParam )
{
2019-05-08 11:47:55 +08:00
case WM_LBUTTONDOWN :
2019-01-05 20:21:43 +08:00
{
2019-05-08 11:47:55 +08:00
if ( IsIconic ( ) )
{
2024-12-29 22:13:37 +08:00
ShowWindow ( SW_SHOW ) ;
2019-05-08 11:47:55 +08:00
break ;
}
2024-12-29 22:13:37 +08:00
ShowWindow ( IsWindowVisible ( ) ? SW_HIDE : SW_SHOW ) ;
2019-05-08 11:47:55 +08:00
SetForegroundWindow ( ) ;
2019-01-05 20:21:43 +08:00
break ;
}
case WM_RBUTTONDOWN :
{
CMenu Menu ;
Menu . LoadMenu ( IDR_MENU_NOTIFY ) ;
CPoint Point ;
GetCursorPos ( & Point ) ;
SetForegroundWindow ( ) ; //<2F> <> <EFBFBD> õ<EFBFBD> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD>
Menu . GetSubMenu ( 0 ) - > TrackPopupMenu (
TPM_LEFTBUTTON | TPM_RIGHTBUTTON ,
Point . x , Point . y , this , NULL ) ;
break ;
}
}
}
VOID CMy2015RemoteDlg : : CreateSolidMenu ( )
{
2025-04-28 16:08:16 +08:00
m_MainMenu . LoadMenu ( IDR_MENU_MAIN ) ;
CMenu * SubMenu = m_MainMenu . GetSubMenu ( 1 ) ;
std : : string masterHash ( skCrypt ( MASTER_HASH ) ) ;
if ( GetPwdHash ( ) ! = masterHash ) {
SubMenu - > DeleteMenu ( ID_TOOL_GEN_MASTER , MF_BYCOMMAND ) ;
}
: : SetMenu ( this - > GetSafeHwnd ( ) , m_MainMenu . GetSafeHmenu ( ) ) ; //Ϊ<> <CEAA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ò˵<C3B2>
: : DrawMenuBar ( this - > GetSafeHwnd ( ) ) ; //<2F> <> ʾ <EFBFBD> ˵<EFBFBD>
2019-01-05 20:21:43 +08:00
}
VOID CMy2015RemoteDlg : : CreatStatusBar ( )
{
if ( ! m_StatusBar . Create ( this ) | |
! m_StatusBar . SetIndicators ( Indicators ,
sizeof ( Indicators ) / sizeof ( UINT ) ) ) //<2F> <> <EFBFBD> <EFBFBD> ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> Դ<EFBFBD> <D4B4> ID
{
return ;
}
CRect rect ;
GetWindowRect ( & rect ) ;
rect . bottom + = 20 ;
MoveWindow ( rect ) ;
}
VOID CMy2015RemoteDlg : : CreateNotifyBar ( )
{
m_Nid . cbSize = sizeof ( NOTIFYICONDATA ) ; //<2F> <> С <EFBFBD> <D0A1> ֵ
m_Nid . hWnd = m_hWnd ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> DZ<EFBFBD> <C7B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڸ<EFBFBD> <DAB8> <EFBFBD> CWnd<6E> <64> <EFBFBD> <EFBFBD>
m_Nid . uID = IDR_MAINFRAME ; //icon ID
m_Nid . uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӵ<EFBFBD> е <EFBFBD> ״̬
m_Nid . uCallbackMessage = UM_ICONNOTIFY ; //<2F> ص<EFBFBD> <D8B5> <EFBFBD> Ϣ
m_Nid . hIcon = m_hIcon ; //icon <20> <> <EFBFBD> <EFBFBD>
2019-01-11 21:40:11 +08:00
CString strTips = " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : Զ<> <D4B6> Э<EFBFBD> <D0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʾ
2019-01-05 20:21:43 +08:00
lstrcpyn ( m_Nid . szTip , ( LPCSTR ) strTips , sizeof ( m_Nid . szTip ) / sizeof ( m_Nid . szTip [ 0 ] ) ) ;
Shell_NotifyIcon ( NIM_ADD , & m_Nid ) ; //<2F> <> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD>
}
VOID CMy2015RemoteDlg : : CreateToolBar ( )
{
if ( ! m_ToolBar . CreateEx ( this , TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC ) | |
! m_ToolBar . LoadToolBar ( IDR_TOOLBAR_MAIN ) ) //<2F> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ
{
return ;
}
m_ToolBar . LoadTrueColorToolBar
(
48 , //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <CAB9> <EFBFBD> <EFBFBD> <EFBFBD>
IDB_BITMAP_MAIN ,
IDB_BITMAP_MAIN ,
IDB_BITMAP_MAIN
) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> ǵ<EFBFBD> λͼ<CEBB> <CDBC> Դ<EFBFBD> <D4B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
RECT Rect , RectMain ;
GetWindowRect ( & RectMain ) ; //<2F> õ<EFBFBD> <C3B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڵĴ<DAB5> С
Rect . left = 0 ;
Rect . top = 0 ;
Rect . bottom = 80 ;
Rect . right = RectMain . right - RectMain . left + 10 ;
m_ToolBar . MoveWindow ( & Rect , TRUE ) ;
m_ToolBar . SetButtonText ( 0 , " <EFBFBD> ն˹<EFBFBD> <EFBFBD> <EFBFBD> " ) ; //<2F> <> λͼ<CEBB> <CDBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD>
m_ToolBar . SetButtonText ( 1 , " <EFBFBD> <EFBFBD> <EFBFBD> ̹<EFBFBD> <EFBFBD> <EFBFBD> " ) ;
m_ToolBar . SetButtonText ( 2 , " <EFBFBD> <EFBFBD> <EFBFBD> ڹ<EFBFBD> <EFBFBD> <EFBFBD> " ) ;
m_ToolBar . SetButtonText ( 3 , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
m_ToolBar . SetButtonText ( 4 , " <EFBFBD> ļ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
m_ToolBar . SetButtonText ( 5 , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
m_ToolBar . SetButtonText ( 6 , " <EFBFBD> <EFBFBD> Ƶ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
m_ToolBar . SetButtonText ( 7 , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
m_ToolBar . SetButtonText ( 8 , " ע<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
2025-01-31 22:22:16 +08:00
m_ToolBar . SetButtonText ( 9 , " <EFBFBD> <EFBFBD> <EFBFBD> ̼<EFBFBD> ¼" ) ;
m_ToolBar . SetButtonText ( 10 , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
m_ToolBar . SetButtonText ( 11 , " <EFBFBD> <EFBFBD> <EFBFBD> ɷ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
m_ToolBar . SetButtonText ( 12 , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
2019-01-05 20:21:43 +08:00
RepositionBars ( AFX_IDW_CONTROLBAR_FIRST , AFX_IDW_CONTROLBAR_LAST , 0 ) ; //<2F> <> ʾ
}
VOID CMy2015RemoteDlg : : InitControl ( )
{
//ר<> <D7A8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
CRect rect ;
GetWindowRect ( & rect ) ;
rect . bottom + = 20 ;
MoveWindow ( rect ) ;
2025-05-07 03:55:58 +08:00
auto style = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_DOUBLEBUFFER | LVS_EX_HEADERDRAGDROP | LVS_EX_LABELTIP ;
2019-01-18 17:37:15 +08:00
for ( int i = 0 ; i < g_Column_Count_Online ; + + i )
2019-01-05 20:21:43 +08:00
{
m_CList_Online . InsertColumn ( i , g_Column_Data_Online [ i ] . szTitle , LVCFMT_CENTER , g_Column_Data_Online [ i ] . nWidth ) ;
g_Column_Online_Width + = g_Column_Data_Online [ i ] . nWidth ;
}
2025-05-07 03:55:58 +08:00
m_CList_Online . SetExtendedStyle ( style ) ;
2019-01-05 20:21:43 +08:00
2019-01-18 17:37:15 +08:00
for ( int i = 0 ; i < g_Column_Count_Message ; + + i )
2019-01-05 20:21:43 +08:00
{
m_CList_Message . InsertColumn ( i , g_Column_Data_Message [ i ] . szTitle , LVCFMT_CENTER , g_Column_Data_Message [ i ] . nWidth ) ;
g_Column_Message_Width + = g_Column_Data_Message [ i ] . nWidth ;
}
2025-05-07 03:55:58 +08:00
m_CList_Message . SetExtendedStyle ( style ) ;
2019-01-05 20:21:43 +08:00
}
VOID CMy2015RemoteDlg : : TestOnline ( )
{
ShowMessage ( true , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <EFBFBD> <EFBFBD> ɹ<EFBFBD> ..." ) ;
}
2024-12-29 03:27:01 +08:00
bool IsExitItem ( CListCtrl & list , DWORD_PTR data ) {
for ( int i = 0 , n = list . GetItemCount ( ) ; i < n ; i + + )
{
DWORD_PTR v = list . GetItemData ( i ) ;
if ( v = = data ) {
return true ;
}
}
return false ;
}
2019-01-05 20:21:43 +08:00
2025-04-03 03:48:48 +08:00
std : : vector < CString > SplitCString ( CString strData ) {
std : : vector < CString > vecItems ;
CString strItem ;
int i = 0 ;
while ( AfxExtractSubString ( strItem , strData , i , _T ( ' | ' ) ) )
{
vecItems . push_back ( strItem ) ; // Add to vector
i + + ;
}
return vecItems ;
}
2019-01-05 20:21:43 +08:00
VOID CMy2015RemoteDlg : : AddList ( CString strIP , CString strAddr , CString strPCName , CString strOS ,
2025-05-03 20:57:22 +08:00
CString strCPU , CString strVideo , CString strPing , CString ver ,
CString startTime , const std : : vector < std : : string > & v , CONTEXT_OBJECT * ContextObject )
2019-01-05 20:21:43 +08:00
{
EnterCriticalSection ( & m_cs ) ;
2025-02-06 04:15:34 +08:00
if ( IsExitItem ( m_CList_Online , ( ULONG_PTR ) ContextObject ) ) {
2024-12-29 03:27:01 +08:00
LeaveCriticalSection ( & m_cs ) ;
2025-05-03 20:57:22 +08:00
OutputDebugStringA ( CString ( " ===> ' " ) + strIP + CString ( " ' already exist!! \n " ) ) ;
2024-12-29 03:27:01 +08:00
return ;
}
2025-05-03 20:57:22 +08:00
LeaveCriticalSection ( & m_cs ) ;
CString install = v [ 6 ] . empty ( ) ? " ? " : v [ 6 ] . c_str ( ) , path = v [ 4 ] . empty ( ) ? " ? " : v [ 4 ] . c_str ( ) ;
CString data [ ONLINELIST_MAX ] = { strIP , strAddr , " " , strPCName , strOS , strCPU , strVideo , strPing ,
ver , install , startTime , v [ 0 ] . empty ( ) ? " ? " : v [ 0 ] . c_str ( ) , path } ;
auto id = CONTEXT_OBJECT : : CalculateID ( data ) ;
bool modify = false ;
CString loc = GetClientMapData ( id , MAP_LOCATION ) ;
if ( loc . IsEmpty ( ) ) {
loc = GetGeoLocation ( data [ ONLINELIST_IP ] . GetString ( ) ) . c_str ( ) ;
if ( ! loc . IsEmpty ( ) ) {
modify = true ;
SetClientMapData ( id , MAP_LOCATION , loc ) ;
}
}
data [ ONLINELIST_LOCATION ] = loc ;
2025-01-14 23:47:43 +08:00
ContextObject - > SetClientInfo ( data ) ;
2025-05-03 20:57:22 +08:00
ContextObject - > SetID ( id ) ;
EnterCriticalSection ( & m_cs ) ;
if ( modify )
SaveToFile ( m_ClientMap , DB_FILENAME ) ;
auto & m = m_ClientMap [ ContextObject - > ID ] ;
int i = m_CList_Online . InsertItem ( m_CList_Online . GetItemCount ( ) , strIP ) ;
for ( int n = ONLINELIST_ADDR ; n < = ONLINELIST_CLIENTTYPE ; n + + ) {
n = = ONLINELIST_COMPUTER_NAME ?
m_CList_Online . SetItemText ( i , n , m . GetNote ( ) [ 0 ] ? m . GetNote ( ) : data [ n ] ) :
m_CList_Online . SetItemText ( i , n , data [ n ] . IsEmpty ( ) ? " ? " : data [ n ] ) ;
}
2019-01-05 20:21:43 +08:00
m_CList_Online . SetItemData ( i , ( DWORD_PTR ) ContextObject ) ;
ShowMessage ( true , strIP + " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
LeaveCriticalSection ( & m_cs ) ;
2025-04-07 18:18:36 +08:00
SendMasterSettings ( ContextObject ) ;
2019-01-05 20:21:43 +08:00
}
VOID CMy2015RemoteDlg : : ShowMessage ( BOOL bOk , CString strMsg )
{
2019-02-04 14:49:11 +08:00
CTime Timer = CTime : : GetCurrentTime ( ) ;
CString strTime = Timer . Format ( " %H:%M:%S " ) ;
CString strIsOK = bOk ? " ִ<EFBFBD> г ɹ<EFBFBD> " : " ִ<EFBFBD> <EFBFBD> ʧ<EFBFBD> <EFBFBD> " ;
2019-01-05 20:21:43 +08:00
m_CList_Message . InsertItem ( 0 , strIsOK ) ; //<2F> <> <EFBFBD> ؼ<EFBFBD> <D8BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
m_CList_Message . SetItemText ( 0 , 1 , strTime ) ;
m_CList_Message . SetItemText ( 0 , 2 , strMsg ) ;
CString strStatusMsg ;
2024-12-26 21:58:44 +08:00
EnterCriticalSection ( & m_cs ) ;
int m_iCount = m_CList_Online . GetItemCount ( ) ;
LeaveCriticalSection ( & m_cs ) ;
2019-01-05 20:21:43 +08:00
strStatusMsg . Format ( " <EFBFBD> <EFBFBD> %d<> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , m_iCount ) ;
m_StatusBar . SetPaneText ( 0 , strStatusMsg ) ; //<2F> <> ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD>
}
2025-05-25 20:57:43 +08:00
BOOL ConvertToShellcode ( LPVOID inBytes , DWORD length , DWORD userFunction , LPVOID userData , DWORD userLength ,
DWORD flags , LPSTR & outBytes , DWORD & outLength ) ;
bool MakeShellcode ( LPBYTE & compressedBuffer , int & ulTotalSize , LPBYTE originBuffer , int ulOriginalLength ) {
if ( originBuffer [ 0 ] = = ' M ' & & originBuffer [ 1 ] = = ' Z ' ) {
LPSTR finalShellcode = NULL ;
DWORD finalSize ;
if ( ! ConvertToShellcode ( originBuffer , ulOriginalLength , NULL , NULL , 0 , 0x1 , finalShellcode , finalSize ) ) {
return false ;
}
compressedBuffer = new BYTE [ finalSize ] ;
ulTotalSize = finalSize ;
memcpy ( compressedBuffer , finalShellcode , finalSize ) ;
free ( finalShellcode ) ;
return true ;
}
return false ;
}
Buffer * ReadKernelDll ( bool is64Bit , bool isDLL = true ) {
2025-04-07 18:18:36 +08:00
BYTE * szBuffer = NULL ;
int dwFileSize = 0 ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ MY_BINARY_FILE <20> <> BINARY <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ
auto id = is64Bit ? IDR_SERVERDLL_X64 : IDR_SERVERDLL_X86 ;
HRSRC hResource = FindResourceA ( NULL , MAKEINTRESOURCE ( id ) , " BINARY " ) ;
if ( hResource = = NULL ) {
return NULL ;
}
// <20> <> ȡ<EFBFBD> <C8A1> Դ<EFBFBD> Ĵ<EFBFBD> С
DWORD dwSize = SizeofResource ( NULL , hResource ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ
HGLOBAL hLoadedResource = LoadResource ( NULL , hResource ) ;
if ( hLoadedResource = = NULL ) {
return NULL ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ<EFBFBD> <D4B4> <EFBFBD> <EFBFBD> ȡָ<C8A1> <D6B8> <EFBFBD> <EFBFBD> Դ<EFBFBD> <D4B4> <EFBFBD> ݵ<EFBFBD> ָ<EFBFBD> <D6B8>
LPVOID pData = LockResource ( hLoadedResource ) ;
if ( pData = = NULL ) {
return NULL ;
}
2025-05-25 20:57:43 +08:00
LPBYTE srcData = ( LPBYTE ) pData ;
int srcLen = dwSize ;
if ( ! isDLL ) { // Convert DLL -> Shell code.
if ( ! MakeShellcode ( srcData , srcLen , ( LPBYTE ) pData , dwSize ) ) {
Mprintf ( " MakeShellcode failed \n " ) ;
return false ;
}
}
dwFileSize = srcLen ;
2025-04-07 18:18:36 +08:00
szBuffer = new BYTE [ sizeof ( int ) + dwFileSize + 2 ] ;
szBuffer [ 0 ] = CMD_DLLDATA ;
2025-05-25 20:57:43 +08:00
szBuffer [ 1 ] = isDLL ? MEMORYDLL : SHELLCODE ;
2025-04-07 18:18:36 +08:00
memcpy ( szBuffer + 2 , & dwFileSize , sizeof ( int ) ) ;
2025-05-25 20:57:43 +08:00
memcpy ( szBuffer + 2 + sizeof ( int ) , srcData , dwFileSize ) ;
2025-04-07 18:18:36 +08:00
// CMD_DLLDATA + SHELLCODE + dwFileSize + pData
auto ret = new Buffer ( szBuffer , sizeof ( int ) + dwFileSize + 2 ) ;
delete [ ] szBuffer ;
2025-05-25 20:57:43 +08:00
if ( srcData ! = pData )
SAFE_DELETE_ARRAY ( srcData ) ;
2025-04-07 18:18:36 +08:00
return ret ;
}
2019-01-05 20:21:43 +08:00
BOOL CMy2015RemoteDlg : : OnInitDialog ( )
{
CDialogEx : : OnInitDialog ( ) ;
2025-05-03 17:23:01 +08:00
if ( ! IsPwdHashValid ( ) ) {
MessageBox ( " <EFBFBD> ˳<EFBFBD> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> Ƿ<EFBFBD> <EFBFBD> <EFBFBD> Ӧ<EFBFBD> ó<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !" , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , MB_ICONERROR ) ;
OnMainExit ( ) ;
return FALSE ;
}
2019-01-05 20:21:43 +08:00
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ...<2E> <> <EFBFBD> ˵<EFBFBD> <CBB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӵ<EFBFBD> ϵͳ<CFB5> ˵<EFBFBD> <CBB5> С <EFBFBD>
2019-01-11 21:40:11 +08:00
SetWindowText ( _T ( " Yama " ) ) ;
2025-05-03 20:57:22 +08:00
LoadFromFile ( m_ClientMap , DB_FILENAME ) ;
2019-01-05 20:21:43 +08:00
// IDM_ABOUTBOX <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϵͳ<CFB5> <CDB3> <EFBFBD> Χ <EEB7B6> ڡ<EFBFBD>
ASSERT ( ( IDM_ABOUTBOX & 0xFFF0 ) = = IDM_ABOUTBOX ) ;
ASSERT ( IDM_ABOUTBOX < 0xF000 ) ;
CMenu * pSysMenu = GetSystemMenu ( FALSE ) ;
if ( pSysMenu ! = NULL )
{
BOOL bNameValid ;
CString strAboutMenu ;
bNameValid = strAboutMenu . LoadString ( IDS_ABOUTBOX ) ;
ASSERT ( bNameValid ) ;
if ( ! strAboutMenu . IsEmpty ( ) )
{
pSysMenu - > AppendMenu ( MF_SEPARATOR ) ;
pSysMenu - > AppendMenu ( MF_STRING , IDM_ABOUTBOX , strAboutMenu ) ;
}
}
2025-04-07 18:18:36 +08:00
m_ServerDLL [ PAYLOAD_DLL_X86 ] = ReadKernelDll ( false ) ;
m_ServerDLL [ PAYLOAD_DLL_X64 ] = ReadKernelDll ( true ) ;
2025-05-25 20:57:43 +08:00
m_ServerBin [ PAYLOAD_DLL_X86 ] = ReadKernelDll ( false , false ) ;
m_ServerBin [ PAYLOAD_DLL_X64 ] = ReadKernelDll ( true , false ) ;
2019-01-05 20:21:43 +08:00
// <20> <> <EFBFBD> ô˶Ի<CBB6> <D4BB> <EFBFBD> <EFBFBD> <EFBFBD> ͼ<EFBFBD> ꡣ<EFBFBD> <EAA1A3> Ӧ<EFBFBD> ó<EFBFBD> <C3B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڲ<EFBFBD> <DAB2> ǶԻ<C7B6> <D4BB> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> ܽ<EFBFBD> <DCBD> Զ<EFBFBD>
// ִ<> д˲<D0B4> <CBB2> <EFBFBD>
SetIcon ( m_hIcon , TRUE ) ; // <20> <> <EFBFBD> ô<EFBFBD> ͼ<EFBFBD> <CDBC>
SetIcon ( m_hIcon , FALSE ) ; // <20> <> <EFBFBD> <EFBFBD> С ͼ<D0A1> <CDBC>
// TODO: <20> ڴ<EFBFBD> <DAB4> <EFBFBD> <EFBFBD> Ӷ<EFBFBD> <D3B6> <EFBFBD> <EFBFBD> ij<EFBFBD> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2024-12-26 17:07:43 +08:00
isClosed = FALSE ;
2019-01-05 20:21:43 +08:00
g_2015RemoteDlg = this ;
CreateToolBar ( ) ;
InitControl ( ) ;
CreatStatusBar ( ) ;
CreateNotifyBar ( ) ;
CreateSolidMenu ( ) ;
2024-12-29 22:13:37 +08:00
if ( ! ListenPort ( ) ) {
OnCancel ( ) ;
return FALSE ;
}
2025-04-07 18:18:36 +08:00
int m = atoi ( ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetStr ( " settings " , " ReportInterval " , " 5 " ) ) ;
int n = ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetInt ( " settings " , " SoftwareDetect " ) ;
m_settings = { m , sizeof ( void * ) = = 8 , __DATE__ , n } ;
std : : map < int , std : : string > myMap = { { SOFTWARE_CAMERA , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͷ" } , { SOFTWARE_TELEGRAM , " <EFBFBD> 籨" } } ;
std : : string str = myMap [ n ] ;
LVCOLUMN lvColumn ;
memset ( & lvColumn , 0 , sizeof ( LVCOLUMN ) ) ;
lvColumn . mask = LVCF_TEXT ;
lvColumn . pszText = ( char * ) str . data ( ) ;
m_CList_Online . SetColumn ( ONLINELIST_VIDEO , & lvColumn ) ;
2019-09-07 10:47:50 +08:00
timeBeginPeriod ( 1 ) ;
2025-04-27 03:52:33 +08:00
# ifdef _DEBUG
SetTimer ( TIMER_CHECK , 60 * 1000 , NULL ) ;
# else
SetTimer ( TIMER_CHECK , 600 * 1000 , NULL ) ;
# endif
2019-09-07 10:47:50 +08:00
2019-01-05 20:21:43 +08:00
return TRUE ; // <20> <> <EFBFBD> ǽ<EFBFBD> <C7BD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> õ<EFBFBD> <C3B5> ؼ<EFBFBD> <D8BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> TRUE
}
void CMy2015RemoteDlg : : OnSysCommand ( UINT nID , LPARAM lParam )
{
if ( ( nID & 0xFFF0 ) = = IDM_ABOUTBOX )
{
CAboutDlg dlgAbout ;
dlgAbout . DoModal ( ) ;
}
else
{
CDialogEx : : OnSysCommand ( nID , lParam ) ;
}
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ի<EFBFBD> <D4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> ť<EFBFBD> <C5A5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> <EFBFBD> <EFBFBD> Ĵ<EFBFBD> <C4B4> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƹ<EFBFBD> ͼ<EFBFBD> ꡣ<EFBFBD> <EAA1A3> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <CAB9> <EFBFBD> ĵ<EFBFBD> /<2F> <> ͼģ<CDBC> ͵<EFBFBD> MFC Ӧ<> ó<EFBFBD> <C3B3> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> ⽫<EFBFBD> ɿ<EFBFBD> <C9BF> <EFBFBD> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> ɡ <EFBFBD>
void CMy2015RemoteDlg : : OnPaint ( )
{
if ( IsIconic ( ) )
{
CPaintDC dc ( this ) ; // <20> <> <EFBFBD> ڻ<EFBFBD> <DABB> Ƶ<EFBFBD> <C6B5> 豸<EFBFBD> <E8B1B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
SendMessage ( WM_ICONERASEBKGND , reinterpret_cast < WPARAM > ( dc . GetSafeHdc ( ) ) , 0 ) ;
// ʹ ͼ<CAB9> <CDBC> <EFBFBD> ڹ<EFBFBD> <DAB9> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> о <EFBFBD> <D0BE> <EFBFBD>
int cxIcon = GetSystemMetrics ( SM_CXICON ) ;
int cyIcon = GetSystemMetrics ( SM_CYICON ) ;
CRect rect ;
GetClientRect ( & rect ) ;
int x = ( rect . Width ( ) - cxIcon + 1 ) / 2 ;
int y = ( rect . Height ( ) - cyIcon + 1 ) / 2 ;
// <20> <> <EFBFBD> <EFBFBD> ͼ<EFBFBD> <CDBC>
dc . DrawIcon ( x , y , m_hIcon ) ;
}
else
{
CDialogEx : : OnPaint ( ) ;
}
}
//<2F> <> <EFBFBD> û<EFBFBD> <C3BB> ϶<EFBFBD> <CFB6> <EFBFBD> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱϵͳ<CFB5> <CDB3> <EFBFBD> ô˺<C3B4> <CBBA> <EFBFBD> ȡ<EFBFBD> ù<EFBFBD> <C3B9> <EFBFBD>
//<2F> <> ʾ <EFBFBD> <CABE>
HCURSOR CMy2015RemoteDlg : : OnQueryDragIcon ( )
{
return static_cast < HCURSOR > ( m_hIcon ) ;
}
void CMy2015RemoteDlg : : OnSize ( UINT nType , int cx , int cy )
{
CDialogEx : : OnSize ( nType , cx , cy ) ;
// TODO: <20> ڴ˴ <DAB4> <CBB4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <CFA2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( SIZE_MINIMIZED = = nType )
{
return ;
}
2024-12-26 21:58:44 +08:00
EnterCriticalSection ( & m_cs ) ;
2019-01-05 20:21:43 +08:00
if ( m_CList_Online . m_hWnd ! = NULL ) //<2F> <> <EFBFBD> ؼ<EFBFBD> Ҳ<EFBFBD> Ǵ<EFBFBD> <C7B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҳ<EFBFBD> о <EFBFBD> <D0BE> <EFBFBD> <EFBFBD> <EFBFBD>
{
CRect rc ;
rc . left = 1 ; //<2F> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
rc . top = 80 ; //<2F> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
rc . right = cx - 1 ; //<2F> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
rc . bottom = cy - 160 ; //<2F> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
m_CList_Online . MoveWindow ( rc ) ;
2019-01-18 17:37:15 +08:00
for ( int i = 0 ; i < g_Column_Count_Online ; + + i ) { //<2F> <> <EFBFBD> <EFBFBD> ÿһ <C3BF> <D2BB> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
double Temp = g_Column_Data_Online [ i ] . nWidth ; //<2F> õ<EFBFBD> <C3B5> <EFBFBD> ǰ<EFBFBD> е Ŀ<D0B5> <C4BF> <EFBFBD> 138
Temp / = g_Column_Online_Width ; //<2F> <> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> ռ <EFBFBD> ܳ<EFBFBD> <DCB3> ȵļ<C8B5> <C4BC> <EFBFBD> ֮<EFBFBD> <D6AE>
Temp * = cx ; //<2F> <> ԭ<EFBFBD> <D4AD> <EFBFBD> ij<EFBFBD> <C4B3> ȳ<EFBFBD> <C8B3> <EFBFBD> <EFBFBD> <EFBFBD> ռ <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> ֮<EFBFBD> <D6AE> <EFBFBD> õ<EFBFBD> <C3B5> <EFBFBD> ǰ<EFBFBD> Ŀ<EFBFBD> <C4BF> <EFBFBD>
int lenth = Temp ; //ת<> <D7AA> Ϊint <20> <> <EFBFBD> <EFBFBD>
m_CList_Online . SetColumnWidth ( i , ( lenth ) ) ; //<2F> <> <EFBFBD> õ<EFBFBD> ǰ<EFBFBD> Ŀ<EFBFBD> <C4BF> <EFBFBD>
}
}
2024-12-26 21:58:44 +08:00
LeaveCriticalSection ( & m_cs ) ;
2019-01-05 20:21:43 +08:00
if ( m_CList_Message . m_hWnd ! = NULL )
{
CRect rc ;
rc . left = 1 ; //<2F> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
rc . top = cy - 156 ; //<2F> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
rc . right = cx - 1 ; //<2F> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
rc . bottom = cy - 20 ; //<2F> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
m_CList_Message . MoveWindow ( rc ) ;
2019-01-18 17:37:15 +08:00
for ( int i = 0 ; i < g_Column_Count_Message ; + + i ) { //<2F> <> <EFBFBD> <EFBFBD> ÿһ <C3BF> <D2BB> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
double Temp = g_Column_Data_Message [ i ] . nWidth ; //<2F> õ<EFBFBD> <C3B5> <EFBFBD> ǰ<EFBFBD> е Ŀ<D0B5> <C4BF> <EFBFBD>
Temp / = g_Column_Message_Width ; //<2F> <> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> ռ <EFBFBD> ܳ<EFBFBD> <DCB3> ȵļ<C8B5> <C4BC> <EFBFBD> ֮<EFBFBD> <D6AE>
Temp * = cx ; //<2F> <> ԭ<EFBFBD> <D4AD> <EFBFBD> ij<EFBFBD> <C4B3> ȳ<EFBFBD> <C8B3> <EFBFBD> <EFBFBD> <EFBFBD> ռ <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> ֮<EFBFBD> <D6AE> <EFBFBD> õ<EFBFBD> <C3B5> <EFBFBD> ǰ<EFBFBD> Ŀ<EFBFBD> <C4BF> <EFBFBD>
int lenth = Temp ; //ת<> <D7AA> Ϊint <20> <> <EFBFBD> <EFBFBD>
m_CList_Message . SetColumnWidth ( i , ( lenth ) ) ; //<2F> <> <EFBFBD> õ<EFBFBD> ǰ<EFBFBD> Ŀ<EFBFBD> <C4BF> <EFBFBD>
}
}
if ( m_StatusBar . m_hWnd ! = NULL ) { //<2F> <> <EFBFBD> Ի<EFBFBD> <D4BB> <EFBFBD> <EFBFBD> <EFBFBD> С <EFBFBD> ı <EFBFBD> ʱ ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> С Ҳ<D0A1> <D2B2> ֮<EFBFBD> ı <EFBFBD>
CRect Rect ;
Rect . top = cy - 20 ;
Rect . left = 0 ;
Rect . right = cx ;
Rect . bottom = cy ;
m_StatusBar . MoveWindow ( Rect ) ;
m_StatusBar . SetPaneInfo ( 0 , m_StatusBar . GetItemID ( 0 ) , SBPS_POPOUT , cx - 10 ) ;
}
if ( m_ToolBar . m_hWnd ! = NULL ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
CRect rc ;
rc . top = rc . left = 0 ;
rc . right = cx ;
rc . bottom = 80 ;
m_ToolBar . MoveWindow ( rc ) ; //<2F> <> <EFBFBD> ù<EFBFBD> <C3B9> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> С λ<D0A1> <CEBB>
}
}
void CMy2015RemoteDlg : : OnTimer ( UINT_PTR nIDEvent )
{
2025-04-27 03:52:33 +08:00
if ( nIDEvent = = TIMER_CHECK )
{
if ( ! CheckValid ( ) )
{
KillTimer ( nIDEvent ) ;
2025-04-28 16:08:16 +08:00
CInputDialog dlg ( this ) ;
dlg . Init ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> س<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :" ) ;
dlg . DoModal ( ) ;
if ( hashSHA256 ( dlg . m_str . GetString ( ) ) ! = std : : string ( skCrypt ( MASTER_HASH ) ) )
return OnMainExit ( ) ;
MessageBox ( " <EFBFBD> 뼰ʱ<EFBFBD> Ե<EFBFBD> ǰ<EFBFBD> <EFBFBD> <EFBFBD> س<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȩ: <20> ڹ<EFBFBD> <DAB9> ߲˵<DFB2> <CBB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɿ<EFBFBD> <C9BF> <EFBFBD> !" , " <EFBFBD> <EFBFBD> ʾ " , MB_ICONWARNING ) ;
2025-04-27 03:52:33 +08:00
}
}
2019-01-05 20:21:43 +08:00
}
void CMy2015RemoteDlg : : OnClose ( )
{
2024-12-29 22:13:37 +08:00
// <20> <> <EFBFBD> ش<EFBFBD> <D8B4> ڶ<EFBFBD> <DAB6> <EFBFBD> <EFBFBD> ǹر<C7B9>
ShowWindow ( SW_HIDE ) ;
2025-04-27 01:16:16 +08:00
Mprintf ( " ======> Hide \n " ) ;
2024-12-29 22:13:37 +08:00
}
void CMy2015RemoteDlg : : Release ( ) {
2025-04-27 01:16:16 +08:00
Mprintf ( " ======> Release \n " ) ;
2024-12-26 17:07:43 +08:00
isClosed = TRUE ;
2021-03-14 12:15:53 +08:00
ShowWindow ( SW_HIDE ) ;
2025-02-25 03:43:15 +08:00
2019-01-05 20:21:43 +08:00
Shell_NotifyIcon ( NIM_DELETE , & m_Nid ) ;
2019-01-13 00:04:50 +08:00
2019-04-15 16:24:32 +08:00
BYTE bToken = CLIENT_EXIT_WITH_SERVER ? COMMAND_BYE : SERVER_EXIT ;
2024-12-26 21:58:44 +08:00
EnterCriticalSection ( & m_cs ) ;
2019-01-15 21:48:37 +08:00
int n = m_CList_Online . GetItemCount ( ) ;
for ( int Pos = 0 ; Pos < n ; + + Pos )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) m_CList_Online . GetItemData ( Pos ) ;
m_iocpServer - > OnClientPreSending ( ContextObject , & bToken , sizeof ( BYTE ) ) ;
}
2024-12-26 21:58:44 +08:00
LeaveCriticalSection ( & m_cs ) ;
2025-04-07 18:18:36 +08:00
Sleep ( 500 ) ;
2019-01-15 21:48:37 +08:00
2025-04-07 18:18:36 +08:00
if ( m_iocpServer ! = NULL )
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
m_iocpServer - > Destroy ( ) ;
2019-01-05 20:21:43 +08:00
m_iocpServer = NULL ;
}
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg = NULL ;
SetEvent ( m_hExit ) ;
CloseHandle ( m_hExit ) ;
m_hExit = NULL ;
Sleep ( 500 ) ;
2019-09-07 10:47:50 +08:00
timeEndPeriod ( 1 ) ;
2019-01-05 20:21:43 +08:00
}
2025-01-15 00:28:37 +08:00
int CALLBACK CMy2015RemoteDlg : : CompareFunction ( LPARAM lParam1 , LPARAM lParam2 , LPARAM lParamSort ) {
auto * pSortInfo = reinterpret_cast < std : : pair < int , bool > * > ( lParamSort ) ;
int nColumn = pSortInfo - > first ;
bool bAscending = pSortInfo - > second ;
// <20> <> ȡ<EFBFBD> <C8A1> ֵ
CONTEXT_OBJECT * context1 = ( CONTEXT_OBJECT * ) lParam1 ;
CONTEXT_OBJECT * context2 = ( CONTEXT_OBJECT * ) lParam2 ;
CString s1 = context1 - > GetClientData ( nColumn ) ;
CString s2 = context2 - > GetClientData ( nColumn ) ;
int result = s1 > s2 ? 1 : - 1 ;
return bAscending ? result : - result ;
}
void CMy2015RemoteDlg : : SortByColumn ( int nColumn ) {
static int m_nSortColumn = 0 ;
static bool m_bSortAscending = false ;
if ( nColumn = = m_nSortColumn ) {
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͬһ <CDAC> У <EFBFBD> <D0A3> л<EFBFBD> <D0BB> <EFBFBD> <EFBFBD> <EFBFBD> ˳<EFBFBD> <CBB3>
m_bSortAscending = ! m_bSortAscending ;
}
else {
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> л<EFBFBD> <D0BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> в<EFBFBD> <D0B2> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD>
m_nSortColumn = nColumn ;
m_bSortAscending = true ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ
std : : pair < int , bool > sortInfo ( m_nSortColumn , m_bSortAscending ) ;
EnterCriticalSection ( & m_cs ) ;
m_CList_Online . SortItems ( CompareFunction , reinterpret_cast < LPARAM > ( & sortInfo ) ) ;
LeaveCriticalSection ( & m_cs ) ;
}
void CMy2015RemoteDlg : : OnHdnItemclickList ( NMHDR * pNMHDR , LRESULT * pResult ) {
LPNMHEADER pNMHeader = reinterpret_cast < LPNMHEADER > ( pNMHDR ) ;
int nColumn = pNMHeader - > iItem ; // <20> <> ȡ<EFBFBD> <C8A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
SortByColumn ( nColumn ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* pResult = 0 ;
}
2019-01-05 20:21:43 +08:00
void CMy2015RemoteDlg : : OnNMRClickOnline ( NMHDR * pNMHDR , LRESULT * pResult )
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast < LPNMITEMACTIVATE > ( pNMHDR ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> ˵<EFBFBD>
CMenu Menu ;
Menu . LoadMenu ( IDR_MENU_LIST_ONLINE ) ; //<2F> <> <EFBFBD> ز˵<D8B2> <CBB5> <EFBFBD> Դ <20> <> Դ<EFBFBD> <D4B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
CMenu * SubMenu = Menu . GetSubMenu ( 0 ) ;
CPoint Point ;
GetCursorPos ( & Point ) ;
int iCount = SubMenu - > GetMenuItemCount ( ) ;
2024-12-26 21:58:44 +08:00
EnterCriticalSection ( & m_cs ) ;
int n = m_CList_Online . GetSelectedCount ( ) ;
LeaveCriticalSection ( & m_cs ) ;
if ( n = = 0 ) //<2F> <> <EFBFBD> <EFBFBD> û<EFBFBD> <C3BB> ѡ <EFBFBD> <D1A1>
2019-01-05 20:21:43 +08:00
{
2019-01-18 17:37:15 +08:00
for ( int i = 0 ; i < iCount ; + + i )
2019-01-05 20:21:43 +08:00
{
SubMenu - > EnableMenuItem ( i , MF_BYPOSITION | MF_DISABLED | MF_GRAYED ) ; //<2F> ˵<EFBFBD> ȫ<EFBFBD> <C8AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
}
}
Menu . SetMenuItemBitmaps ( ID_ONLINE_MESSAGE , MF_BYCOMMAND , & m_bmOnline [ 0 ] , & m_bmOnline [ 0 ] ) ;
2024-12-28 18:35:34 +08:00
Menu . SetMenuItemBitmaps ( ID_ONLINE_UPDATE , MF_BYCOMMAND , & m_bmOnline [ 1 ] , & m_bmOnline [ 1 ] ) ;
Menu . SetMenuItemBitmaps ( ID_ONLINE_DELETE , MF_BYCOMMAND , & m_bmOnline [ 2 ] , & m_bmOnline [ 2 ] ) ;
2025-04-15 21:37:01 +08:00
Menu . SetMenuItemBitmaps ( ID_ONLINE_SHARE , MF_BYCOMMAND , & m_bmOnline [ 3 ] , & m_bmOnline [ 3 ] ) ;
2025-05-03 20:57:22 +08:00
Menu . SetMenuItemBitmaps ( ID_MAIN_PROXY , MF_BYCOMMAND , & m_bmOnline [ 4 ] , & m_bmOnline [ 4 ] ) ;
Menu . SetMenuItemBitmaps ( ID_ONLINE_HOSTNOTE , MF_BYCOMMAND , & m_bmOnline [ 5 ] , & m_bmOnline [ 5 ] ) ;
2019-01-05 20:21:43 +08:00
SubMenu - > TrackPopupMenu ( TPM_LEFTALIGN , Point . x , Point . y , this ) ;
* pResult = 0 ;
}
void CMy2015RemoteDlg : : OnOnlineMessage ( )
{
BYTE bToken = COMMAND_TALK ; //<2F> ض˷<D8B6> <CBB7> <EFBFBD> һ <EFBFBD> <D2BB> COMMAND_SYSTEM
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ;
}
2024-12-28 18:35:34 +08:00
char * ReadFileToMemory ( const CString & filePath , ULONGLONG & fileSize ) {
fileSize = 0 ;
try {
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> ֻ<EFBFBD> <D6BB> ģʽ <C4A3> <CABD>
CFile file ( filePath , CFile : : modeRead | CFile : : typeBinary ) ;
// <20> <> ȡ<EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> С
fileSize = file . GetLength ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ڴ滺<DAB4> <E6BBBA> <EFBFBD> <EFBFBD> : ͷ+<2B> ļ<EFBFBD> <C4BC> <EFBFBD> С +<2B> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD>
char * buffer = new char [ 1 + sizeof ( ULONGLONG ) + static_cast < size_t > ( fileSize ) + 1 ] ;
if ( ! buffer ) {
return NULL ;
}
memcpy ( buffer + 1 , & fileSize , sizeof ( ULONGLONG ) ) ;
// <20> <> ȡ<EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> ݵ<EFBFBD> <DDB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
file . Read ( buffer + 1 + sizeof ( ULONGLONG ) , static_cast < UINT > ( fileSize ) ) ;
buffer [ 1 + sizeof ( ULONGLONG ) + fileSize ] = ' \0 ' ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> ͷ<EFBFBD> <CDB7> ڴ<EFBFBD>
return buffer ;
}
catch ( CFileException * e ) {
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> 쳣
TCHAR errorMessage [ 256 ] ;
e - > GetErrorMessage ( errorMessage , 256 ) ;
e - > Delete ( ) ;
return NULL ;
}
}
void CMy2015RemoteDlg : : OnOnlineUpdate ( )
{
2025-03-13 23:34:33 +08:00
if ( IDYES ! = MessageBox ( _T ( " ȷ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ѡ <EFBFBD> <EFBFBD> <EFBFBD> ı <EFBFBD> <EFBFBD> س<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ? \n <EFBFBD> <EFBFBD> <EFBFBD> ܿس<EFBFBD> <EFBFBD> <EFBFBD> ֧<EFBFBD> ַ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ч!" ) ,
_T ( " <EFBFBD> <EFBFBD> ʾ " ) , MB_ICONQUESTION | MB_YESNO ) )
return ;
2024-12-28 18:35:34 +08:00
char path [ _MAX_PATH ] , * p = path ;
GetModuleFileNameA ( NULL , path , sizeof ( path ) ) ;
while ( * p ) + + p ;
while ( ' \\ ' ! = * p ) - - p ;
strcpy ( p + 1 , " ServerDll.dll " ) ;
ULONGLONG fileSize = 0 ;
char * buffer = ReadFileToMemory ( path , fileSize ) ;
if ( buffer ) {
buffer [ 0 ] = COMMAND_UPDATE ;
SendSelectedCommand ( ( PBYTE ) buffer , 1 + sizeof ( ULONGLONG ) + fileSize + 1 ) ;
delete [ ] buffer ;
}
else {
AfxMessageBox ( " <EFBFBD> <EFBFBD> ȡ<EFBFBD> ļ<EFBFBD> ʧ<EFBFBD> <EFBFBD> : " + CString ( path ) ) ;
}
}
2019-01-05 20:21:43 +08:00
void CMy2015RemoteDlg : : OnOnlineDelete ( )
{
// TODO: <20> ڴ<EFBFBD> <DAB4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EEB4A6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2019-01-17 11:58:26 +08:00
if ( IDYES ! = MessageBox ( _T ( " ȷ<EFBFBD> <EFBFBD> ɾ<EFBFBD> <EFBFBD> ѡ <EFBFBD> <EFBFBD> <EFBFBD> ı <EFBFBD> <EFBFBD> ؼ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ? " ) , _T ( " <EFBFBD> <EFBFBD> ʾ " ) , MB_ICONQUESTION | MB_YESNO ) )
return ;
2019-01-05 20:21:43 +08:00
BYTE bToken = COMMAND_BYE ; //<2F> ض˷<D8B6> <CBB7> <EFBFBD> һ <EFBFBD> <D2BB> COMMAND_SYSTEM
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ; //Context PreSending PostSending
2024-12-26 21:58:44 +08:00
EnterCriticalSection ( & m_cs ) ;
2019-01-05 20:21:43 +08:00
int iCount = m_CList_Online . GetSelectedCount ( ) ;
2019-02-04 14:49:11 +08:00
for ( int i = 0 ; i < iCount ; + + i )
2019-01-05 20:21:43 +08:00
{
POSITION Pos = m_CList_Online . GetFirstSelectedItemPosition ( ) ;
int iItem = m_CList_Online . GetNextSelectedItem ( Pos ) ;
2019-02-04 14:49:11 +08:00
CString strIP = m_CList_Online . GetItemText ( iItem , ONLINELIST_IP ) ;
2019-01-05 20:21:43 +08:00
m_CList_Online . DeleteItem ( iItem ) ;
strIP + = " <EFBFBD> Ͽ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ;
ShowMessage ( true , strIP ) ;
}
2024-12-26 21:58:44 +08:00
LeaveCriticalSection ( & m_cs ) ;
2019-01-05 20:21:43 +08:00
}
VOID CMy2015RemoteDlg : : OnOnlineCmdManager ( )
{
BYTE bToken = COMMAND_SHELL ;
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ;
}
VOID CMy2015RemoteDlg : : OnOnlineProcessManager ( )
{
BYTE bToken = COMMAND_SYSTEM ;
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ;
}
VOID CMy2015RemoteDlg : : OnOnlineWindowManager ( )
{
BYTE bToken = COMMAND_WSLIST ;
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ;
}
VOID CMy2015RemoteDlg : : OnOnlineDesktopManager ( )
2025-03-13 23:34:33 +08:00
{
int n = ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetInt ( " settings " , " DXGI " ) ;
2025-03-30 18:03:01 +08:00
CString algo = ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetStr ( " settings " , " ScreenCompress " , " " ) ;
BYTE bToken [ 32 ] = { COMMAND_SCREEN_SPY , n , algo . IsEmpty ( ) ? ALGORITHM_DIFF : atoi ( algo . GetString ( ) ) } ;
2025-03-13 23:34:33 +08:00
SendSelectedCommand ( bToken , sizeof ( bToken ) ) ;
2019-01-05 20:21:43 +08:00
}
VOID CMy2015RemoteDlg : : OnOnlineFileManager ( )
{
2019-02-04 14:49:11 +08:00
BYTE bToken = COMMAND_LIST_DRIVE ;
2019-01-05 20:21:43 +08:00
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ;
}
VOID CMy2015RemoteDlg : : OnOnlineAudioManager ( )
{
2019-02-04 14:49:11 +08:00
BYTE bToken = COMMAND_AUDIO ;
2019-01-05 20:21:43 +08:00
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ;
}
VOID CMy2015RemoteDlg : : OnOnlineVideoManager ( )
{
2019-02-04 14:49:11 +08:00
BYTE bToken = COMMAND_WEBCAM ;
2019-01-05 20:21:43 +08:00
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ;
}
VOID CMy2015RemoteDlg : : OnOnlineServerManager ( )
{
2019-02-04 14:49:11 +08:00
BYTE bToken = COMMAND_SERVICES ;
2019-01-05 20:21:43 +08:00
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ;
}
VOID CMy2015RemoteDlg : : OnOnlineRegisterManager ( )
{
BYTE bToken = COMMAND_REGEDIT ;
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ;
}
2025-01-31 22:22:16 +08:00
VOID CMy2015RemoteDlg : : OnOnlineKeyboardManager ( )
{
BYTE bToken = COMMAND_KEYBOARD ;
SendSelectedCommand ( & bToken , sizeof ( BYTE ) ) ;
}
2025-04-16 23:31:34 +08:00
std : : vector < std : : string > splitString ( const std : : string & str , char delimiter ) {
std : : vector < std : : string > result ;
std : : stringstream ss ( str ) ;
std : : string item ;
while ( std : : getline ( ss , item , delimiter ) ) {
result . push_back ( item ) ;
}
return result ;
}
std : : string joinString ( const std : : vector < std : : string > & tokens , char delimiter ) {
std : : ostringstream oss ;
for ( size_t i = 0 ; i < tokens . size ( ) ; + + i ) {
oss < < tokens [ i ] ;
if ( i ! = tokens . size ( ) - 1 ) { // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> Ԫ<EFBFBD> غ<EFBFBD> <D8BA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӷָ<D3B7> <D6B8> <EFBFBD>
oss < < delimiter ;
}
}
return oss . str ( ) ;
}
2025-04-20 21:24:31 +08:00
bool CMy2015RemoteDlg : : CheckValid ( ) {
DateVerify verify ;
# ifdef _DEBUG
BOOL isTrail = verify . isTrail ( 0 ) ;
# else
BOOL isTrail = verify . isTrail ( 14 ) ;
# endif
2025-04-16 23:31:34 +08:00
2025-04-20 21:24:31 +08:00
if ( ! isTrail ) {
2025-04-16 23:31:34 +08:00
auto THIS_APP = ( CMy2015RemoteApp * ) AfxGetApp ( ) ;
auto settings = " settings " , pwdKey = " Password " ;
// <20> <> ֤<EFBFBD> <D6A4> <EFBFBD> <EFBFBD>
CPasswordDlg dlg ;
2025-04-28 16:08:16 +08:00
static std : : string hardwareID = getHardwareID ( ) ;
static std : : string hashedID = hashSHA256 ( hardwareID ) ;
static std : : string deviceID = getFixedLengthID ( hashedID ) ;
2025-04-16 23:31:34 +08:00
CString pwd = THIS_APP - > m_iniFile . GetStr ( settings , pwdKey , " " ) ;
dlg . m_sDeviceID = deviceID . c_str ( ) ;
dlg . m_sPassword = pwd ;
if ( pwd . IsEmpty ( ) & & IDOK ! = dlg . DoModal ( ) | | dlg . m_sPassword . IsEmpty ( ) )
2025-04-20 21:24:31 +08:00
return false ;
2025-04-16 23:31:34 +08:00
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʽ <EFBFBD> <CABD> 20250209 - 20350209: SHA256
auto v = splitString ( dlg . m_sPassword . GetBuffer ( ) , ' - ' ) ;
if ( v . size ( ) ! = 6 )
{
THIS_APP - > m_iniFile . SetStr ( settings , pwdKey , " " ) ;
MessageBox ( " <EFBFBD> <EFBFBD> ʽ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !" , " <EFBFBD> <EFBFBD> ʾ " , MB_ICONINFORMATION ) ;
2025-04-20 21:24:31 +08:00
return false ;
2025-04-16 23:31:34 +08:00
}
std : : vector < std : : string > subvector ( v . begin ( ) + 2 , v . end ( ) ) ;
2025-04-28 16:08:16 +08:00
std : : string password = v [ 0 ] + " - " + v [ 1 ] + " : " + GetPwdHash ( ) ;
2025-04-16 23:31:34 +08:00
std : : string finalKey = deriveKey ( password , deviceID ) ;
std : : string hash256 = joinString ( subvector , ' - ' ) ;
std : : string fixedKey = getFixedLengthID ( finalKey ) ;
if ( hash256 ! = fixedKey ) {
THIS_APP - > m_iniFile . SetStr ( settings , pwdKey , " " ) ;
if ( pwd . IsEmpty ( ) | | ( IDOK ! = dlg . DoModal ( ) | | hash256 ! = fixedKey ) ) {
if ( ! dlg . m_sPassword . IsEmpty ( ) )
2025-04-28 16:08:16 +08:00
MessageBox ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <EFBFBD> <DEB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !" , " <EFBFBD> <EFBFBD> ʾ " , MB_ICONWARNING ) ;
2025-04-20 21:24:31 +08:00
return false ;
2025-04-16 23:31:34 +08:00
}
}
// <20> ж<EFBFBD> <D0B6> Ƿ<EFBFBD> <C7B7> <EFBFBD> <EFBFBD> <EFBFBD>
auto pekingTime = ToPekingTime ( nullptr ) ;
char curDate [ 9 ] ;
std : : strftime ( curDate , sizeof ( curDate ) , " %Y%m%d " , & pekingTime ) ;
if ( curDate < v [ 0 ] | | curDate > v [ 1 ] ) {
THIS_APP - > m_iniFile . SetStr ( settings , pwdKey , " " ) ;
MessageBox ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڣ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !" , " <EFBFBD> <EFBFBD> ʾ " , MB_ICONINFORMATION ) ;
2025-04-20 21:24:31 +08:00
return false ;
2025-04-16 23:31:34 +08:00
}
if ( dlg . m_sPassword ! = pwd )
THIS_APP - > m_iniFile . SetStr ( settings , pwdKey , dlg . m_sPassword ) ;
}
2025-04-20 21:24:31 +08:00
return true ;
}
void CMy2015RemoteDlg : : OnOnlineBuildClient ( )
{
2025-04-28 16:08:16 +08:00
// <20> <> <EFBFBD> ±<EFBFBD> <C2B1> <EFBFBD> <EFBFBD> ij<EFBFBD> <C4B3> <EFBFBD> 14<31> <34> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڣ<EFBFBD> <DAA3> <EFBFBD> <EFBFBD> <EFBFBD> ֮<EFBFBD> <D6AE> <EFBFBD> <EFBFBD> <EFBFBD> ɷ<EFBFBD> <C9B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> <EFBFBD> "<22> <> <EFBFBD> <EFBFBD> "<22> <>
2025-04-20 21:24:31 +08:00
// <20> <> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȩ<EFBFBD> <EFBFBD> <DFBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> if<69> <66> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӵ<EFBFBD> <D3B5> <EFBFBD> Ӧ<EFBFBD> ط<EFBFBD> <D8B7> <EFBFBD> <EFBFBD> ɡ <EFBFBD>
2025-04-28 16:08:16 +08:00
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȩ<EFBFBD> <C8A8> <EFBFBD> ڷ<EFBFBD> Χ <EFBFBD> <CEA7> ȷ<EFBFBD> <C8B7> һ <EFBFBD> <D2BB> һ <EFBFBD> 룻<EFBFBD> <EBA3BB> Ȩ<EFBFBD> <EFBFBD> <DFBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> δ<EFBFBD> <CEB4> <EFBFBD> ۸<EFBFBD> !
2025-04-20 21:24:31 +08:00
// ע<> <D7A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> if <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> θ<EFBFBD> <CEB8> <EFBFBD> Ȩ<EFBFBD> <EFBFBD> .
// 2025/04/20
if ( ! CheckValid ( ) )
return ;
2019-01-05 20:21:43 +08:00
// TODO: <20> ڴ<EFBFBD> <DAB4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EEB4A6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
CBuildDlg Dlg ;
2019-02-04 14:49:11 +08:00
Dlg . m_strIP = ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetStr ( " settings " , " localIp " , " " ) ;
2025-04-16 23:31:34 +08:00
int Port = ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetInt ( " settings " , " ghost " ) ;
2025-04-28 16:08:16 +08:00
Dlg . m_strIP = Dlg . m_strIP . IsEmpty ( ) ? " 127.0.0.1 " : Dlg . m_strIP ;
2025-04-16 23:31:34 +08:00
Dlg . m_strPort = Port < = 0 ? " 6543 " : std : : to_string ( Port ) . c_str ( ) ;
2025-04-20 21:24:31 +08:00
Dlg . DoModal ( ) ;
2019-01-05 20:21:43 +08:00
}
VOID CMy2015RemoteDlg : : SendSelectedCommand ( PBYTE szBuffer , ULONG ulLength )
{
2024-12-26 21:58:44 +08:00
EnterCriticalSection ( & m_cs ) ;
2019-02-04 14:49:11 +08:00
POSITION Pos = m_CList_Online . GetFirstSelectedItemPosition ( ) ;
2019-01-15 21:48:37 +08:00
while ( Pos )
2019-01-05 20:21:43 +08:00
{
2019-01-15 21:48:37 +08:00
int iItem = m_CList_Online . GetNextSelectedItem ( Pos ) ;
2019-02-04 14:49:11 +08:00
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) m_CList_Online . GetItemData ( iItem ) ;
2025-04-28 16:08:16 +08:00
if ( ! ContextObject - > bLogin & & szBuffer [ 0 ] ! = COMMAND_BYE )
continue ;
2025-01-14 23:47:43 +08:00
if ( szBuffer [ 0 ] = = COMMAND_WEBCAM & & ContextObject - > sClientInfo [ ONLINELIST_VIDEO ] = = CString ( " <EFBFBD> <EFBFBD> " ) )
{
continue ;
}
2019-02-04 14:49:11 +08:00
// <20> <> <EFBFBD> ͻ<EFBFBD> <CDBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> ݰ<EFBFBD>
m_iocpServer - > OnClientPreSending ( ContextObject , szBuffer , ulLength ) ;
2019-01-05 20:21:43 +08:00
}
2024-12-26 21:58:44 +08:00
LeaveCriticalSection ( & m_cs ) ;
2019-01-05 20:21:43 +08:00
}
//<2F> <> <EFBFBD> <EFBFBD> Bar
VOID CMy2015RemoteDlg : : OnAbout ( )
{
2025-03-30 18:03:01 +08:00
MessageBox ( " Copyleft (c) FTU 2025 " + CString ( " \n <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : " ) + __DATE__ +
CString ( sizeof ( void * ) = = 8 ? " (x64) " : " (x86) " ) , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
2019-01-05 20:21:43 +08:00
}
//<2F> <> <EFBFBD> <EFBFBD> Menu
void CMy2015RemoteDlg : : OnNotifyShow ( )
{
2024-12-29 22:13:37 +08:00
BOOL v = IsWindowVisible ( ) ;
ShowWindow ( v ? SW_HIDE : SW_SHOW ) ;
2019-01-05 20:21:43 +08:00
}
void CMy2015RemoteDlg : : OnNotifyExit ( )
{
2024-12-29 22:13:37 +08:00
Release ( ) ;
CDialogEx : : OnOK ( ) ; // <20> رնԻ<D5B6> <D4BB> <EFBFBD>
2019-01-05 20:21:43 +08:00
}
//<2F> <> ̬<EFBFBD> ˵<EFBFBD>
void CMy2015RemoteDlg : : OnMainSet ( )
{
2024-12-31 03:11:26 +08:00
int nMaxConnection = ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetInt ( " settings " , " MaxConnection " ) ;
2019-01-05 20:21:43 +08:00
CSettingDlg Dlg ;
Dlg . DoModal ( ) ; //ģ̬ <20> <> <EFBFBD> <EFBFBD>
2024-12-31 03:11:26 +08:00
if ( nMaxConnection ! = Dlg . m_nMax_Connect )
{
m_iocpServer - > UpdateMaxConnection ( Dlg . m_nMax_Connect ) ;
}
2025-04-07 18:18:36 +08:00
int m = atoi ( ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetStr ( " settings " , " ReportInterval " , " 5 " ) ) ;
int n = ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetInt ( " settings " , " SoftwareDetect " ) ;
if ( m = = m_settings . ReportInterval & & n = = m_settings . DetectSoftware ) {
return ;
}
LVCOLUMN lvColumn ;
memset ( & lvColumn , 0 , sizeof ( LVCOLUMN ) ) ;
lvColumn . mask = LVCF_TEXT ;
lvColumn . pszText = Dlg . m_sSoftwareDetect . GetBuffer ( ) ;
CLock L ( m_cs ) ;
m_settings . ReportInterval = m ;
m_settings . DetectSoftware = n ;
m_CList_Online . SetColumn ( ONLINELIST_VIDEO , & lvColumn ) ;
SendMasterSettings ( nullptr ) ;
2019-01-05 20:21:43 +08:00
}
void CMy2015RemoteDlg : : OnMainExit ( )
{
2024-12-29 22:13:37 +08:00
Release ( ) ;
CDialogEx : : OnOK ( ) ; // <20> رնԻ<D5B6> <D4BB> <EFBFBD>
2019-01-05 20:21:43 +08:00
}
2024-12-29 22:13:37 +08:00
BOOL CMy2015RemoteDlg : : ListenPort ( )
2019-01-05 20:21:43 +08:00
{
2019-02-04 14:49:11 +08:00
int nPort = ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetInt ( " settings " , " ghost " ) ;
2019-01-05 20:21:43 +08:00
//<2F> <> ȡini <20> ļ<EFBFBD> <C4BC> е ļ<D0B5> <C4BC> <EFBFBD> <EFBFBD> ˿<EFBFBD>
2019-02-04 14:49:11 +08:00
int nMaxConnection = ( ( CMy2015RemoteApp * ) AfxGetApp ( ) ) - > m_iniFile . GetInt ( " settings " , " MaxConnection " ) ;
2019-01-05 20:21:43 +08:00
//<2F> <> ȡ<EFBFBD> <C8A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2019-01-13 00:04:50 +08:00
if ( nPort < = 0 | | nPort > 65535 )
nPort = 6543 ;
if ( nMaxConnection < = 0 )
2019-01-05 20:21:43 +08:00
nMaxConnection = 10000 ;
2024-12-29 22:13:37 +08:00
return Activate ( nPort , nMaxConnection ) ; //<2F> <> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
}
2025-05-04 04:02:34 +08:00
std : : string exec ( const std : : string & cmd ) {
HANDLE hReadPipe , hWritePipe ;
SECURITY_ATTRIBUTES sa = { sizeof ( SECURITY_ATTRIBUTES ) , NULL , TRUE } ;
if ( ! CreatePipe ( & hReadPipe , & hWritePipe , & sa , 0 ) ) {
return " " ;
}
STARTUPINFOA si = { } ;
PROCESS_INFORMATION pi = { } ;
si . cb = sizeof ( si ) ;
si . dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW ;
si . hStdOutput = hWritePipe ;
si . hStdError = hWritePipe ;
si . wShowWindow = SW_HIDE ;
std : : string command = " cmd.exe /C " + cmd ;
if ( ! CreateProcessA (
NULL ,
( char * ) command . data ( ) ,
NULL ,
NULL ,
TRUE ,
CREATE_NO_WINDOW ,
NULL ,
NULL ,
& si ,
& pi
) ) {
CloseHandle ( hReadPipe ) ;
CloseHandle ( hWritePipe ) ;
return " " ;
}
CloseHandle ( hWritePipe ) ;
char buffer [ 256 ] ;
std : : string result ;
DWORD bytesRead ;
while ( ReadFile ( hReadPipe , buffer , sizeof ( buffer ) - 1 , & bytesRead , NULL ) & & bytesRead > 0 ) {
buffer [ bytesRead ] = ' \0 ' ;
result + = buffer ;
}
CloseHandle ( hReadPipe ) ;
WaitForSingleObject ( pi . hProcess , INFINITE ) ;
CloseHandle ( pi . hProcess ) ;
CloseHandle ( pi . hThread ) ;
return result ;
}
std : : vector < std : : string > splitByNewline ( const std : : string & input ) {
std : : vector < std : : string > lines ;
std : : istringstream stream ( input ) ;
std : : string line ;
while ( std : : getline ( stream , line ) ) {
lines . push_back ( line ) ;
}
return lines ;
}
2024-12-29 22:13:37 +08:00
BOOL CMy2015RemoteDlg : : Activate ( int nPort , int nMaxConnection )
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
assert ( m_iocpServer ) ;
2021-03-14 11:44:56 +08:00
UINT ret = 0 ;
if ( ( ret = m_iocpServer - > StartServer ( NotifyProc , OfflineProc , nPort ) ) ! = 0 )
2019-01-05 20:21:43 +08:00
{
2025-04-27 01:16:16 +08:00
Mprintf ( " ======> StartServer Failed \n " ) ;
2025-05-04 04:02:34 +08:00
char cmd [ 200 ] ;
sprintf_s ( cmd , " for /f \" tokens=5 \" %%i in ('netstat -ano ^| findstr \" :%d \" ') do @echo %%i " , nPort ) ;
std : : string output = exec ( cmd ) ;
output . erase ( std : : remove ( output . begin ( ) , output . end ( ) , ' \r ' ) , output . end ( ) ) ;
if ( ! output . empty ( ) )
{
std : : vector < std : : string > lines = splitByNewline ( output ) ;
std : : sort ( lines . begin ( ) , lines . end ( ) ) ;
auto last = std : : unique ( lines . begin ( ) , lines . end ( ) ) ;
lines . erase ( last , lines . end ( ) ) ;
std : : string pids ;
for ( const auto & line : lines ) {
pids + = line + " , " ;
}
if ( ! pids . empty ( ) ) {
pids . back ( ) = ' ? ' ;
}
if ( IDYES = = MessageBox ( " <EFBFBD> <EFBFBD> <EFBFBD> ú<EFBFBD> <EFBFBD> <EFBFBD> StartServerʧ<EFBFBD> <EFBFBD> ! <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :" + CString ( std : : to_string ( ret ) . c_str ( ) ) +
" \r \n <EFBFBD> Ƿ<EFBFBD> <EFBFBD> ر<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ½<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : " + pids . c_str ( ) , " <EFBFBD> <EFBFBD> ʾ " , MB_YESNO ) ) {
for ( const auto & line : lines ) {
auto cmd = std : : string ( " taskkill /f /pid " ) + line ;
exec ( cmd . c_str ( ) ) ;
}
return Activate ( nPort , nMaxConnection ) ;
}
} else
MessageBox ( " <EFBFBD> <EFBFBD> <EFBFBD> ú<EFBFBD> <EFBFBD> <EFBFBD> StartServerʧ<EFBFBD> <EFBFBD> ! <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :" + CString ( std : : to_string ( ret ) . c_str ( ) ) ) ;
2024-12-29 22:13:37 +08:00
return FALSE ;
2019-01-05 20:21:43 +08:00
}
CString strTemp ;
strTemp . Format ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˿<EFBFBD> : %d<> ɹ<EFBFBD> " , nPort ) ;
ShowMessage ( true , strTemp ) ;
2024-12-29 22:13:37 +08:00
return TRUE ;
2019-01-05 20:21:43 +08:00
}
VOID CALLBACK CMy2015RemoteDlg : : NotifyProc ( CONTEXT_OBJECT * ContextObject )
{
2025-04-07 18:18:36 +08:00
if ( ! g_2015RemoteDlg )
return ;
AUTO_TICK ( 50 ) ;
2025-02-25 03:43:15 +08:00
switch ( ContextObject - > v1 )
{
case VIDEO_DLG :
{
CVideoDlg * Dlg = ( CVideoDlg * ) ContextObject - > hDlg ;
Dlg - > OnReceiveComplete ( ) ;
break ;
}
case SERVICES_DLG :
{
CServicesDlg * Dlg = ( CServicesDlg * ) ContextObject - > hDlg ;
Dlg - > OnReceiveComplete ( ) ;
break ;
}
case AUDIO_DLG :
{
CAudioDlg * Dlg = ( CAudioDlg * ) ContextObject - > hDlg ;
Dlg - > OnReceiveComplete ( ) ;
break ;
}
case SYSTEM_DLG :
{
CSystemDlg * Dlg = ( CSystemDlg * ) ContextObject - > hDlg ;
Dlg - > OnReceiveComplete ( ) ;
break ;
}
case SHELL_DLG :
{
CShellDlg * Dlg = ( CShellDlg * ) ContextObject - > hDlg ;
Dlg - > OnReceiveComplete ( ) ;
break ;
}
case SCREENSPY_DLG :
{
CScreenSpyDlg * Dlg = ( CScreenSpyDlg * ) ContextObject - > hDlg ;
Dlg - > OnReceiveComplete ( ) ;
break ;
}
case FILEMANAGER_DLG :
{
CFileManagerDlg * Dlg = ( CFileManagerDlg * ) ContextObject - > hDlg ;
Dlg - > OnReceiveComplete ( ) ;
break ;
}
case REGISTER_DLG :
{
CRegisterDlg * Dlg = ( CRegisterDlg * ) ContextObject - > hDlg ;
Dlg - > OnReceiveComplete ( ) ;
break ;
}
2025-01-31 22:22:16 +08:00
case KEYBOARD_DLG :
{
CKeyBoardDlg * Dlg = ( CKeyBoardDlg * ) ContextObject - > hDlg ;
Dlg - > OnReceiveComplete ( ) ;
break ;
}
2025-05-03 20:57:22 +08:00
case PROXY_DLG : {
CProxyMapDlg * Dlg = ( CProxyMapDlg * ) ContextObject - > hDlg ;
Dlg - > OnReceiveComplete ( ) ;
break ;
}
2025-04-07 18:18:36 +08:00
default : {
HANDLE hEvent = CreateEvent ( NULL , TRUE , FALSE , NULL ) ;
if ( hEvent = = NULL ) {
Mprintf ( " ===> NotifyProc CreateEvent FAILED: %p <=== \n " , ContextObject ) ;
return ;
}
if ( ! g_2015RemoteDlg - > PostMessage ( WM_HANDLEMESSAGE , ( WPARAM ) hEvent , ( LPARAM ) ContextObject ) ) {
Mprintf ( " ===> NotifyProc PostMessage FAILED: %p <=== \n " , ContextObject ) ;
CloseHandle ( hEvent ) ;
return ;
}
HANDLE handles [ 2 ] = { hEvent , g_2015RemoteDlg - > m_hExit } ;
DWORD result = WaitForMultipleObjects ( 2 , handles , FALSE , INFINITE ) ;
}
2025-02-25 03:43:15 +08:00
}
2019-01-05 20:21:43 +08:00
}
// <20> Ի<EFBFBD> <D4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ի<EFBFBD> <D4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
struct dlgInfo
{
HANDLE hDlg ;
int v1 ;
dlgInfo ( HANDLE h , int type ) : hDlg ( h ) , v1 ( type ) { }
} ;
VOID CALLBACK CMy2015RemoteDlg : : OfflineProc ( CONTEXT_OBJECT * ContextObject )
{
2025-04-07 18:18:36 +08:00
if ( ! g_2015RemoteDlg )
return ;
2019-01-05 20:21:43 +08:00
dlgInfo * dlg = ContextObject - > v1 > 0 ? new dlgInfo ( ContextObject - > hDlg , ContextObject - > v1 ) : NULL ;
2025-02-06 04:15:34 +08:00
SOCKET nSocket = ContextObject - > sClientSocket ;
2019-01-05 20:21:43 +08:00
g_2015RemoteDlg - > PostMessage ( WM_USEROFFLINEMSG , ( WPARAM ) dlg , ( LPARAM ) nSocket ) ;
ContextObject - > v1 = 0 ;
}
2025-02-25 03:43:15 +08:00
LRESULT CMy2015RemoteDlg : : OnHandleMessage ( WPARAM wParam , LPARAM lParam ) {
2025-04-07 18:18:36 +08:00
HANDLE hEvent = ( HANDLE ) wParam ;
2025-02-25 03:43:15 +08:00
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
MessageHandle ( ContextObject ) ;
2025-04-07 18:18:36 +08:00
if ( hEvent ) {
SetEvent ( hEvent ) ;
CloseHandle ( hEvent ) ;
}
2025-02-25 03:43:15 +08:00
return S_OK ;
}
2019-01-05 20:21:43 +08:00
VOID CMy2015RemoteDlg : : MessageHandle ( CONTEXT_OBJECT * ContextObject )
{
2025-04-07 18:18:36 +08:00
if ( isClosed ) {
return ;
}
2024-12-26 17:07:43 +08:00
switch ( ContextObject - > InDeCompressedBuffer . GetBYTE ( 0 ) )
2019-01-05 20:21:43 +08:00
{
2025-05-03 20:57:22 +08:00
case COMMAND_PROXY :
{
g_2015RemoteDlg - > SendMessage ( WM_OPENPROXYDIALOG , 0 , ( LPARAM ) ContextObject ) ;
break ;
}
2025-04-07 18:18:36 +08:00
case TOKEN_HEARTBEAT : case 137 :
UpdateActiveWindow ( ContextObject ) ;
break ;
2025-04-06 16:23:10 +08:00
case SOCKET_DLLLOADER : { // <20> <> <EFBFBD> <EFBFBD> DLL
2025-04-07 18:18:36 +08:00
auto len = ContextObject - > InDeCompressedBuffer . GetBufferLength ( ) ;
bool is64Bit = len > 1 ? ContextObject - > InDeCompressedBuffer . GetBYTE ( 1 ) : false ;
int typ = ( len > 2 ? ContextObject - > InDeCompressedBuffer . GetBYTE ( 2 ) : MEMORYDLL ) ;
bool isRelease = len > 3 ? ContextObject - > InDeCompressedBuffer . GetBYTE ( 3 ) : true ;
int connNum = 0 ;
2025-05-03 20:57:22 +08:00
if ( typ = = SHELLCODE ) {
Mprintf ( " ===> '%s' Request SC [is64Bit:%d isRelease:%d] \n " , ContextObject - > RemoteAddr ( ) . c_str ( ) , is64Bit , isRelease ) ;
} else {
Mprintf ( " ===> '%s' Request DLL [is64Bit:%d isRelease:%d] \n " , ContextObject - > RemoteAddr ( ) . c_str ( ) , is64Bit , isRelease ) ;
}
2025-04-07 18:18:36 +08:00
char version [ 12 ] = { } ;
ContextObject - > InDeCompressedBuffer . CopyBuffer ( version , 12 , 4 ) ;
2025-05-25 20:57:43 +08:00
SendServerDll ( ContextObject , typ = = MEMORYDLL , is64Bit ) ;
2025-04-06 16:23:10 +08:00
break ;
}
2025-04-07 18:18:36 +08:00
case COMMAND_BYE : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
{
CancelIo ( ( HANDLE ) ContextObject - > sClientSocket ) ;
closesocket ( ContextObject - > sClientSocket ) ;
Sleep ( 10 ) ;
break ;
}
2025-01-31 22:22:16 +08:00
case TOKEN_KEYBOARD_START : { // <20> <> <EFBFBD> ̼<EFBFBD> ¼
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_OPENKEYBOARDDIALOG , 0 , ( LPARAM ) ContextObject ) ;
2025-01-31 22:22:16 +08:00
break ;
}
2019-01-05 20:21:43 +08:00
case TOKEN_LOGIN : // <20> <> <EFBFBD> ߰<EFBFBD> shine
{
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_USERTOONLINELIST , 0 , ( LPARAM ) ContextObject ) ;
2019-01-05 20:21:43 +08:00
break ;
}
2025-04-07 18:18:36 +08:00
case TOKEN_BITMAPINFO : // Զ<> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_OPENSCREENSPYDIALOG , 0 , ( LPARAM ) ContextObject ) ;
2019-01-05 20:21:43 +08:00
break ;
}
2025-04-07 18:18:36 +08:00
case TOKEN_DRIVE_LIST : // <20> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_OPENFILEMANAGERDIALOG , 0 , ( LPARAM ) ContextObject ) ;
2019-01-05 20:21:43 +08:00
break ;
}
2025-04-07 18:18:36 +08:00
case TOKEN_TALK_START : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_OPENTALKDIALOG , 0 , ( LPARAM ) ContextObject ) ;
2019-01-05 20:21:43 +08:00
break ;
}
2025-04-07 18:18:36 +08:00
case TOKEN_SHELL_START : // Զ<> <D4B6> <EFBFBD> ն<EFBFBD>
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_OPENSHELLDIALOG , 0 , ( LPARAM ) ContextObject ) ;
2019-01-05 20:21:43 +08:00
break ;
}
2025-04-07 18:18:36 +08:00
case TOKEN_WSLIST : // <20> <> <EFBFBD> ڹ<EFBFBD> <DAB9> <EFBFBD>
case TOKEN_PSLIST : // <20> <> <EFBFBD> ̹<EFBFBD> <CCB9> <EFBFBD>
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_OPENSYSTEMDIALOG , 0 , ( LPARAM ) ContextObject ) ;
2019-01-05 20:21:43 +08:00
break ;
}
2025-04-07 18:18:36 +08:00
case TOKEN_AUDIO_START : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_OPENAUDIODIALOG , 0 , ( LPARAM ) ContextObject ) ;
2019-01-05 20:21:43 +08:00
break ;
}
2025-04-07 18:18:36 +08:00
case TOKEN_REGEDIT : // ע<> <D7A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_OPENREGISTERDIALOG , 0 , ( LPARAM ) ContextObject ) ;
2019-01-05 20:21:43 +08:00
break ;
}
2025-04-07 18:18:36 +08:00
case TOKEN_SERVERLIST : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_OPENSERVICESDIALOG , 0 , ( LPARAM ) ContextObject ) ;
2019-01-05 20:21:43 +08:00
break ;
}
2025-04-07 18:18:36 +08:00
case TOKEN_WEBCAM_BITMAPINFO : // <20> <> <EFBFBD> <EFBFBD> ͷ
2019-01-05 20:21:43 +08:00
{
2025-04-07 18:18:36 +08:00
g_2015RemoteDlg - > SendMessage ( WM_OPENWEBCAMDIALOG , 0 , ( LPARAM ) ContextObject ) ;
2019-01-05 20:21:43 +08:00
break ;
}
}
}
LRESULT CMy2015RemoteDlg : : OnUserToOnlineList ( WPARAM wParam , LPARAM lParam )
{
CString strIP , strAddr , strPCName , strOS , strCPU , strVideo , strPing ;
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ; //ע<> <D7A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ClientContext <20> <> <EFBFBD> Ƿ<EFBFBD> <C7B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> б <EFBFBD> <D0B1> <EFBFBD> ȡ<EFBFBD> <C8A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2024-12-26 17:07:43 +08:00
if ( ContextObject = = NULL | | isClosed )
2019-01-05 20:21:43 +08:00
{
return - 1 ;
}
try
{
2024-12-28 04:34:54 +08:00
sockaddr_in ClientAddr ;
memset ( & ClientAddr , 0 , sizeof ( ClientAddr ) ) ;
int iClientAddrLen = sizeof ( sockaddr_in ) ;
SOCKET nSocket = ContextObject - > sClientSocket ;
BOOL bOk = getpeername ( nSocket , ( SOCKADDR * ) & ClientAddr , & iClientAddrLen ) ;
2019-01-05 20:21:43 +08:00
// <20> <> <EFBFBD> Ϸ<EFBFBD> <CFB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݰ<EFBFBD>
if ( ContextObject - > InDeCompressedBuffer . GetBufferLength ( ) ! = sizeof ( LOGIN_INFOR ) )
{
2024-12-28 04:34:54 +08:00
char buf [ 100 ] ;
sprintf_s ( buf , " *** Received [%s] invalid login data! *** \n " , inet_ntoa ( ClientAddr . sin_addr ) ) ;
2025-04-27 01:16:16 +08:00
Mprintf ( buf ) ;
2019-01-05 20:21:43 +08:00
return - 1 ;
}
2024-12-26 17:07:43 +08:00
LOGIN_INFOR * LoginInfor = new LOGIN_INFOR ;
ContextObject - > InDeCompressedBuffer . CopyBuffer ( ( LPBYTE ) LoginInfor , sizeof ( LOGIN_INFOR ) , 0 ) ;
2019-01-05 20:21:43 +08:00
2025-04-28 16:08:16 +08:00
auto curID = GetMasterId ( ) ;
ContextObject - > bLogin = ( LoginInfor - > szMasterID = = curID | | strlen ( LoginInfor - > szMasterID ) = = 0 ) ;
if ( ! ContextObject - > bLogin ) {
Mprintf ( " *** Received master '%s' client! *** \n " , LoginInfor - > szMasterID ) ;
}
2019-01-05 20:21:43 +08:00
strIP = inet_ntoa ( ClientAddr . sin_addr ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
strPCName = LoginInfor - > szPCName ;
2019-03-29 10:40:08 +08:00
//<2F> 汾<EFBFBD> <E6B1BE> Ϣ
strOS = LoginInfor - > OsVerInfoEx ;
2019-01-05 20:21:43 +08:00
//CPU
2025-04-28 16:08:16 +08:00
if ( LoginInfor - > dwCPUMHz ! = - 1 )
{
strCPU . Format ( " %dMHz " , LoginInfor - > dwCPUMHz ) ;
}
else {
strCPU = " Unknown " ;
}
2019-01-05 20:21:43 +08:00
//<2F> <> <EFBFBD> <EFBFBD>
strPing . Format ( " %d " , LoginInfor - > dwSpeed ) ;
2025-04-07 18:18:36 +08:00
strVideo = m_settings . DetectSoftware ? " <EFBFBD> <EFBFBD> " : LoginInfor - > bWebCamIsExist ? " <EFBFBD> <EFBFBD> " : " <EFBFBD> <EFBFBD> " ;
2019-01-05 20:21:43 +08:00
strAddr . Format ( " %d " , nSocket ) ;
2025-05-03 20:57:22 +08:00
auto v = LoginInfor - > ParseReserved ( 10 ) ;
AddList ( strIP , strAddr , strPCName , strOS , strCPU , strVideo , strPing , LoginInfor - > moduleVersion , LoginInfor - > szStartTime , v , ContextObject ) ;
2024-12-26 17:07:43 +08:00
delete LoginInfor ;
2019-01-05 20:21:43 +08:00
return S_OK ;
2021-03-14 20:55:22 +08:00
} catch ( . . . ) {
2025-04-27 01:16:16 +08:00
Mprintf ( " [ERROR] OnUserToOnlineList catch an error \n " ) ;
2021-03-14 20:55:22 +08:00
}
2019-01-05 20:21:43 +08:00
return - 1 ;
}
LRESULT CMy2015RemoteDlg : : OnUserOfflineMsg ( WPARAM wParam , LPARAM lParam )
{
2025-04-27 01:16:16 +08:00
Mprintf ( " ======> OnUserOfflineMsg \n " ) ;
2019-01-05 20:21:43 +08:00
CString ip , port ;
port . Format ( " %d " , lParam ) ;
EnterCriticalSection ( & m_cs ) ;
int n = m_CList_Online . GetItemCount ( ) ;
for ( int i = 0 ; i < n ; + + i )
{
CString cur = m_CList_Online . GetItemText ( i , ONLINELIST_ADDR ) ;
if ( cur = = port )
{
ip = m_CList_Online . GetItemText ( i , ONLINELIST_IP ) ;
m_CList_Online . DeleteItem ( i ) ;
ShowMessage ( true , ip + " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
break ;
}
}
LeaveCriticalSection ( & m_cs ) ;
dlgInfo * p = ( dlgInfo * ) wParam ;
2019-01-17 11:58:26 +08:00
if ( p )
2019-01-05 20:21:43 +08:00
{
switch ( p - > v1 )
{
2019-01-15 21:48:37 +08:00
case TALK_DLG :
{
CTalkDlg * Dlg = ( CTalkDlg * ) p - > hDlg ;
delete Dlg ;
break ;
}
2019-01-05 20:21:43 +08:00
case VIDEO_DLG :
{
CVideoDlg * Dlg = ( CVideoDlg * ) p - > hDlg ;
delete Dlg ;
break ;
}
case SERVICES_DLG :
{
CServicesDlg * Dlg = ( CServicesDlg * ) p - > hDlg ;
delete Dlg ;
break ;
}
case AUDIO_DLG :
{
CAudioDlg * Dlg = ( CAudioDlg * ) p - > hDlg ;
delete Dlg ;
break ;
}
case SYSTEM_DLG :
{
CSystemDlg * Dlg = ( CSystemDlg * ) p - > hDlg ;
delete Dlg ;
break ;
}
case SHELL_DLG :
{
CShellDlg * Dlg = ( CShellDlg * ) p - > hDlg ;
delete Dlg ;
break ;
}
case SCREENSPY_DLG :
{
CScreenSpyDlg * Dlg = ( CScreenSpyDlg * ) p - > hDlg ;
delete Dlg ;
break ;
}
case FILEMANAGER_DLG :
{
CFileManagerDlg * Dlg = ( CFileManagerDlg * ) p - > hDlg ;
2021-03-14 12:15:53 +08:00
delete Dlg ;
2019-01-05 20:21:43 +08:00
break ;
}
case REGISTER_DLG :
{
CRegisterDlg * Dlg = ( CRegisterDlg * ) p - > hDlg ;
2025-02-25 03:43:15 +08:00
delete Dlg ; //<2F> <> <EFBFBD> <EFBFBD> <E2B4A6>
2019-01-05 20:21:43 +08:00
break ;
}
2025-01-31 22:22:16 +08:00
case KEYBOARD_DLG :
{
CKeyBoardDlg * Dlg = ( CKeyBoardDlg * ) p - > hDlg ;
delete Dlg ;
break ;
}
2019-01-17 11:58:26 +08:00
default : break ;
2019-01-05 20:21:43 +08:00
}
delete p ;
2019-01-17 11:58:26 +08:00
p = NULL ;
2019-01-05 20:21:43 +08:00
}
return S_OK ;
}
2025-04-07 18:18:36 +08:00
void CMy2015RemoteDlg : : UpdateActiveWindow ( CONTEXT_OBJECT * ctx ) {
Heartbeat hb ;
ctx - > InDeCompressedBuffer . CopyBuffer ( & hb , sizeof ( Heartbeat ) , 1 ) ;
// <20> ظ<EFBFBD> <D8B8> <EFBFBD> <EFBFBD> <EFBFBD>
{
HeartbeatACK ack = { hb . Time } ;
BYTE buf [ sizeof ( HeartbeatACK ) + 1 ] = { CMD_HEARTBEAT_ACK } ;
memcpy ( buf + 1 , & ack , sizeof ( HeartbeatACK ) ) ;
m_iocpServer - > Send ( ctx , buf , sizeof ( buf ) ) ;
}
CLock L ( m_cs ) ;
int n = m_CList_Online . GetItemCount ( ) ;
DWORD_PTR cur = ( DWORD_PTR ) ctx ;
for ( int i = 0 ; i < n ; + + i ) {
DWORD_PTR id = m_CList_Online . GetItemData ( i ) ;
if ( id = = cur ) {
m_CList_Online . SetItemText ( i , ONLINELIST_LOGINTIME , hb . ActiveWnd ) ;
if ( hb . Ping > 0 )
m_CList_Online . SetItemText ( i , ONLINELIST_PING , std : : to_string ( hb . Ping ) . c_str ( ) ) ;
2025-05-03 20:57:22 +08:00
m_CList_Online . SetItemText ( i , ONLINELIST_VIDEO , hb . HasSoftware ? " <EFBFBD> <EFBFBD> " : " <EFBFBD> <EFBFBD> " ) ;
2025-04-07 18:18:36 +08:00
return ;
}
}
}
void CMy2015RemoteDlg : : SendMasterSettings ( CONTEXT_OBJECT * ctx ) {
BYTE buf [ sizeof ( MasterSettings ) + 1 ] = { CMD_MASTERSETTING } ;
memcpy ( buf + 1 , & m_settings , sizeof ( MasterSettings ) ) ;
if ( ctx ) {
m_iocpServer - > Send ( ctx , buf , sizeof ( buf ) ) ;
}
else {
EnterCriticalSection ( & m_cs ) ;
for ( int i = 0 , n = m_CList_Online . GetItemCount ( ) ; i < n ; + + i )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) m_CList_Online . GetItemData ( i ) ;
2025-04-28 16:08:16 +08:00
if ( ! ContextObject - > bLogin )
continue ;
2025-04-07 18:18:36 +08:00
m_iocpServer - > Send ( ContextObject , buf , sizeof ( buf ) ) ;
}
LeaveCriticalSection ( & m_cs ) ;
}
}
2025-05-25 20:57:43 +08:00
VOID CMy2015RemoteDlg : : SendServerDll ( CONTEXT_OBJECT * ContextObject , bool isDLL , bool is64Bit ) {
2025-04-07 18:18:36 +08:00
auto id = is64Bit ? PAYLOAD_DLL_X64 : PAYLOAD_DLL_X86 ;
2025-05-25 20:57:43 +08:00
auto buf = isDLL ? m_ServerDLL [ id ] : m_ServerBin [ id ] ;
2025-04-07 18:18:36 +08:00
if ( buf - > length ( ) ) {
m_iocpServer - > OnClientPreSending ( ContextObject , buf - > Buf ( ) , buf - > length ( ) ) ;
}
}
2019-01-05 20:21:43 +08:00
LRESULT CMy2015RemoteDlg : : OnOpenScreenSpyDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
CScreenSpyDlg * Dlg = new CScreenSpyDlg ( this , m_iocpServer , ContextObject ) ; //Send s
// <20> <> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<CEAA> <D7BF>
Dlg - > Create ( IDD_DIALOG_SCREEN_SPY , GetDesktopWindow ( ) ) ;
2019-01-20 20:04:11 +08:00
Dlg - > ShowWindow ( SW_SHOWMAXIMIZED ) ;
2019-01-05 20:21:43 +08:00
ContextObject - > v1 = SCREENSPY_DLG ;
ContextObject - > hDlg = Dlg ;
return 0 ;
}
LRESULT CMy2015RemoteDlg : : OnOpenFileManagerDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
//ת<> <D7AA> CFileManagerDlg <20> <> <EFBFBD> 캯<EFBFBD> <ECBAAF>
CFileManagerDlg * Dlg = new CFileManagerDlg ( this , m_iocpServer , ContextObject ) ;
// <20> <> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<CEAA> <D7BF>
2019-01-06 21:18:26 +08:00
Dlg - > Create ( IDD_FILE , GetDesktopWindow ( ) ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Dlg
2019-01-05 20:21:43 +08:00
Dlg - > ShowWindow ( SW_SHOW ) ;
ContextObject - > v1 = FILEMANAGER_DLG ;
ContextObject - > hDlg = Dlg ;
2019-01-11 21:40:11 +08:00
EnterCriticalSection ( & m_cs ) ;
2021-03-14 12:15:53 +08:00
/*
2019-01-11 21:40:11 +08:00
for ( std : : vector < CFileManagerDlg * > : : iterator iter = v_FileDlg . begin ( ) ;
iter ! = v_FileDlg . end ( ) ; )
{
CFileManagerDlg * cur = * iter ;
if ( cur - > m_bIsClosed )
{
delete cur ;
iter = v_FileDlg . erase ( iter ) ;
} else {
+ + iter ;
}
}
v_FileDlg . push_back ( Dlg ) ;
2021-03-14 12:15:53 +08:00
*/
2019-01-11 21:40:11 +08:00
LeaveCriticalSection ( & m_cs ) ;
2019-01-05 20:21:43 +08:00
return 0 ;
}
LRESULT CMy2015RemoteDlg : : OnOpenTalkDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
//ת<> <D7AA> CFileManagerDlg <20> <> <EFBFBD> 캯<EFBFBD> <ECBAAF>
CTalkDlg * Dlg = new CTalkDlg ( this , m_iocpServer , ContextObject ) ;
// <20> <> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<CEAA> <D7BF>
Dlg - > Create ( IDD_DIALOG_TALK , GetDesktopWindow ( ) ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Dlg
Dlg - > ShowWindow ( SW_SHOW ) ;
ContextObject - > v1 = TALK_DLG ;
ContextObject - > hDlg = Dlg ;
return 0 ;
}
LRESULT CMy2015RemoteDlg : : OnOpenShellDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
//ת<> <D7AA> CFileManagerDlg <20> <> <EFBFBD> 캯<EFBFBD> <ECBAAF>
CShellDlg * Dlg = new CShellDlg ( this , m_iocpServer , ContextObject ) ;
// <20> <> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<CEAA> <D7BF>
Dlg - > Create ( IDD_DIALOG_SHELL , GetDesktopWindow ( ) ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Dlg
Dlg - > ShowWindow ( SW_SHOW ) ;
ContextObject - > v1 = SHELL_DLG ;
ContextObject - > hDlg = Dlg ;
return 0 ;
}
LRESULT CMy2015RemoteDlg : : OnOpenSystemDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
//ת<> <D7AA> CFileManagerDlg <20> <> <EFBFBD> 캯<EFBFBD> <ECBAAF>
CSystemDlg * Dlg = new CSystemDlg ( this , m_iocpServer , ContextObject ) ;
// <20> <> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<CEAA> <D7BF>
Dlg - > Create ( IDD_DIALOG_SYSTEM , GetDesktopWindow ( ) ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Dlg
Dlg - > ShowWindow ( SW_SHOW ) ;
ContextObject - > v1 = SYSTEM_DLG ;
ContextObject - > hDlg = Dlg ;
return 0 ;
}
LRESULT CMy2015RemoteDlg : : OnOpenAudioDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
//ת<> <D7AA> CFileManagerDlg <20> <> <EFBFBD> 캯<EFBFBD> <ECBAAF>
CAudioDlg * Dlg = new CAudioDlg ( this , m_iocpServer , ContextObject ) ;
// <20> <> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<CEAA> <D7BF>
Dlg - > Create ( IDD_DIALOG_AUDIO , GetDesktopWindow ( ) ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Dlg
Dlg - > ShowWindow ( SW_SHOW ) ;
ContextObject - > v1 = AUDIO_DLG ;
ContextObject - > hDlg = Dlg ;
return 0 ;
}
LRESULT CMy2015RemoteDlg : : OnOpenServicesDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
//ת<> <D7AA> CFileManagerDlg <20> <> <EFBFBD> 캯<EFBFBD> <ECBAAF>
CServicesDlg * Dlg = new CServicesDlg ( this , m_iocpServer , ContextObject ) ;
// <20> <> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<CEAA> <D7BF>
Dlg - > Create ( IDD_DIALOG_SERVICES , GetDesktopWindow ( ) ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Dlg
Dlg - > ShowWindow ( SW_SHOW ) ;
ContextObject - > v1 = SERVICES_DLG ;
ContextObject - > hDlg = Dlg ;
return 0 ;
}
LRESULT CMy2015RemoteDlg : : OnOpenRegisterDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
//ת<> <D7AA> CFileManagerDlg <20> <> <EFBFBD> 캯<EFBFBD> <ECBAAF>
CRegisterDlg * Dlg = new CRegisterDlg ( this , m_iocpServer , ContextObject ) ;
// <20> <> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<CEAA> <D7BF>
Dlg - > Create ( IDD_DIALOG_REGISTER , GetDesktopWindow ( ) ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Dlg
Dlg - > ShowWindow ( SW_SHOW ) ;
ContextObject - > v1 = REGISTER_DLG ;
ContextObject - > hDlg = Dlg ;
return 0 ;
}
LRESULT CMy2015RemoteDlg : : OnOpenVideoDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
//ת<> <D7AA> CFileManagerDlg <20> <> <EFBFBD> 캯<EFBFBD> <ECBAAF>
CVideoDlg * Dlg = new CVideoDlg ( this , m_iocpServer , ContextObject ) ;
// <20> <> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<CEAA> <D7BF>
Dlg - > Create ( IDD_DIALOG_VIDEO , GetDesktopWindow ( ) ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Dlg
Dlg - > ShowWindow ( SW_SHOW ) ;
ContextObject - > v1 = VIDEO_DLG ;
ContextObject - > hDlg = Dlg ;
return 0 ;
}
2019-01-12 18:21:42 +08:00
2025-01-31 22:22:16 +08:00
LRESULT CMy2015RemoteDlg : : OnOpenKeyboardDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
CKeyBoardDlg * Dlg = new CKeyBoardDlg ( this , m_iocpServer , ContextObject ) ;
// <20> <> <EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<CEAA> <D7BF>
Dlg - > Create ( IDD_DLG_KEYBOARD , GetDesktopWindow ( ) ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Dlg
Dlg - > ShowWindow ( SW_SHOW ) ;
ContextObject - > v1 = KEYBOARD_DLG ;
ContextObject - > hDlg = Dlg ;
return 0 ;
}
2019-01-12 18:21:42 +08:00
2025-05-03 20:57:22 +08:00
LRESULT CMy2015RemoteDlg : : OnOpenProxyDialog ( WPARAM wParam , LPARAM lParam )
{
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) lParam ;
CProxyMapDlg * Dlg = new CProxyMapDlg ( this , m_iocpServer , ContextObject ) ;
Dlg - > Create ( IDD_PROXY , GetDesktopWindow ( ) ) ;
Dlg - > ShowWindow ( SW_SHOW ) ;
ContextObject - > v1 = PROXY_DLG ;
ContextObject - > hDlg = Dlg ;
return 0 ;
}
2019-01-12 18:21:42 +08:00
BOOL CMy2015RemoteDlg : : OnHelpInfo ( HELPINFO * pHelpInfo )
{
2025-01-12 06:00:02 +08:00
MessageBox ( " Copyleft (c) FTU 2025 " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
2019-01-12 18:21:42 +08:00
return TRUE ;
}
BOOL CMy2015RemoteDlg : : PreTranslateMessage ( MSG * pMsg )
{
if ( pMsg - > message = = WM_KEYDOWN & & pMsg - > wParam = = VK_RETURN )
{
return TRUE ;
}
return CDialogEx : : PreTranslateMessage ( pMsg ) ;
}
2025-04-15 21:37:01 +08:00
void CMy2015RemoteDlg : : OnOnlineShare ( )
{
CInputDialog dlg ( this ) ;
dlg . Init ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <IP:PORT><3E> <> ַ:" ) ;
if ( dlg . DoModal ( ) ! = IDOK | | dlg . m_str . IsEmpty ( ) )
return ;
if ( dlg . m_str . GetLength ( ) > = 250 ) {
MessageBox ( " <EFBFBD> ַ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȳ<EFBFBD> <EFBFBD> <EFBFBD> [0, 250]<5D> <> Χ <EFBFBD> <CEA7> <EFBFBD> <EFBFBD> !" , " <EFBFBD> <EFBFBD> ʾ " , MB_ICONINFORMATION ) ;
return ;
}
if ( IDYES ! = MessageBox ( _T ( " ȷ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ѡ <EFBFBD> <EFBFBD> <EFBFBD> ı <EFBFBD> <EFBFBD> ؼ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ? \n Ŀǰֻ<EFBFBD> ܷ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͬ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> س<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) , _T ( " <EFBFBD> <EFBFBD> ʾ " ) , MB_ICONQUESTION | MB_YESNO ) )
return ;
BYTE bToken [ _MAX_PATH ] = { COMMAND_SHARE } ;
// Ŀ<> <C4BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
bToken [ 1 ] = SHARE_TYPE_YAMA ;
memcpy ( bToken + 2 , dlg . m_str , dlg . m_str . GetLength ( ) ) ;
SendSelectedCommand ( bToken , sizeof ( bToken ) ) ;
}
2025-04-20 21:24:31 +08:00
void CMy2015RemoteDlg : : OnToolAuth ( )
{
CPwdGenDlg dlg ;
std : : string hardwareID = getHardwareID ( ) ;
std : : string hashedID = hashSHA256 ( hardwareID ) ;
std : : string deviceID = getFixedLengthID ( hashedID ) ;
dlg . m_sDeviceID = deviceID . c_str ( ) ;
dlg . DoModal ( ) ;
}
2025-04-28 16:08:16 +08:00
2025-05-03 20:57:22 +08:00
void CMy2015RemoteDlg : : OnMainProxy ( )
{
EnterCriticalSection ( & m_cs ) ;
POSITION Pos = m_CList_Online . GetFirstSelectedItemPosition ( ) ;
while ( Pos )
{
int iItem = m_CList_Online . GetNextSelectedItem ( Pos ) ;
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) m_CList_Online . GetItemData ( iItem ) ;
BYTE cmd [ ] = { COMMAND_PROXY } ;
m_iocpServer - > OnClientPreSending ( ContextObject , cmd , sizeof ( cmd ) ) ;
break ;
}
LeaveCriticalSection ( & m_cs ) ;
}
void CMy2015RemoteDlg : : OnOnlineHostnote ( )
{
CInputDialog dlg ( this ) ;
dlg . Init ( " <EFBFBD> ı <EFBFBD> ע" , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ע: " ) ;
if ( dlg . DoModal ( ) ! = IDOK | | dlg . m_str . IsEmpty ( ) ) {
return ;
}
if ( dlg . m_str . GetLength ( ) > = 64 ) {
MessageBox ( " <EFBFBD> <EFBFBD> ע<EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> Ȳ<EFBFBD> <EFBFBD> ܳ<EFBFBD> <EFBFBD> <EFBFBD> 64<EFBFBD> <EFBFBD> <EFBFBD> ַ<EFBFBD> " , " <EFBFBD> <EFBFBD> ʾ " , MB_ICONINFORMATION ) ;
dlg . m_str = dlg . m_str . Left ( 63 ) ;
}
BOOL modified = FALSE ;
uint64_t key = 0 ;
EnterCriticalSection ( & m_cs ) ;
POSITION Pos = m_CList_Online . GetFirstSelectedItemPosition ( ) ;
while ( Pos ) {
int iItem = m_CList_Online . GetNextSelectedItem ( Pos ) ;
CONTEXT_OBJECT * ContextObject = ( CONTEXT_OBJECT * ) m_CList_Online . GetItemData ( iItem ) ;
auto f = m_ClientMap . find ( ContextObject - > ID ) ;
if ( f = = m_ClientMap . end ( ) )
m_ClientMap [ ContextObject - > ID ] = ClientValue ( " " , dlg . m_str ) ;
else
m_ClientMap [ ContextObject - > ID ] . UpdateNote ( dlg . m_str ) ;
m_CList_Online . SetItemText ( iItem , ONLINELIST_COMPUTER_NAME , dlg . m_str ) ;
modified = TRUE ;
}
LeaveCriticalSection ( & m_cs ) ;
if ( modified ) {
EnterCriticalSection ( & m_cs ) ;
SaveToFile ( m_ClientMap , DB_FILENAME ) ;
LeaveCriticalSection ( & m_cs ) ;
}
}
2025-04-28 16:08:16 +08:00
2025-05-03 17:23:01 +08:00
char * ReadFileToBuffer ( const std : : string & path , size_t & outSize ) {
2025-04-28 16:08:16 +08:00
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD>
std : : ifstream file ( path , std : : ios : : binary | std : : ios : : ate ) ; // ate = <20> <> <EFBFBD> <EFBFBD> ĩβ<C4A9> <CEB2> <EFBFBD> ô<EFBFBD> С
if ( ! file ) {
return nullptr ;
}
// <20> <> ȡ<EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڴ<EFBFBD>
std : : streamsize size = file . tellg ( ) ;
file . seekg ( 0 , std : : ios : : beg ) ;
char * buffer = new char [ size ] ;
// <20> <> ȡ<EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> buffer
if ( ! file . read ( buffer , size ) ) {
delete [ ] buffer ;
return nullptr ;
}
outSize = static_cast < size_t > ( size ) ;
return buffer ;
}
2025-05-03 17:23:01 +08:00
//////////////////////////////////////////////////////////////////////////
// UPX
BOOL WriteBinaryToFile ( const char * path , const char * data , ULONGLONG size )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> ģʽ д<CABD> <D0B4>
std : : string filePath = path ;
std : : ofstream outFile ( filePath , std : : ios : : binary ) ;
if ( ! outFile )
{
Mprintf ( " Failed to open or create the file: %s. \n " , filePath . c_str ( ) ) ;
return FALSE ;
}
// д<> <D0B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
outFile . write ( data , size ) ;
if ( outFile . good ( ) )
{
Mprintf ( " Binary data written successfully to %s. \n " , filePath . c_str ( ) ) ;
}
else
{
Mprintf ( " Failed to write data to file. \n " ) ;
outFile . close ( ) ;
return FALSE ;
}
// <20> ر<EFBFBD> <D8B1> ļ<EFBFBD>
outFile . close ( ) ;
return TRUE ;
}
int run_upx ( const std : : string & upx , const std : : string & file , bool isCompress ) {
STARTUPINFOA si = { sizeof ( si ) } ;
si . dwFlags | = STARTF_USESHOWWINDOW ;
si . wShowWindow = SW_HIDE ;
PROCESS_INFORMATION pi ;
std : : string cmd = isCompress ? " \" --best \" " : " \" -d \" " ;
std : : string cmdLine = " \" " + upx + cmd + file + " \" " ;
BOOL success = CreateProcessA (
NULL ,
& cmdLine [ 0 ] , // ע<> <D7A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> const char*
NULL , NULL , FALSE ,
0 , NULL , NULL , & si , & pi
) ;
if ( ! success ) {
Mprintf ( " Failed to run UPX. Error: %d \n " , GetLastError ( ) ) ;
return - 1 ;
}
WaitForSingleObject ( pi . hProcess , INFINITE ) ;
DWORD exitCode ;
GetExitCodeProcess ( pi . hProcess , & exitCode ) ;
CloseHandle ( pi . hProcess ) ;
CloseHandle ( pi . hThread ) ;
return static_cast < int > ( exitCode ) ;
}
// <20> <> ѹUPX<50> Ե<EFBFBD> ǰӦ<C7B0> ó<EFBFBD> <C3B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> в<EFBFBD> <D0B2> <EFBFBD>
bool UPXUncompressFile ( std : : string & upx , std : : string & file ) {
DWORD dwSize = 0 ;
LPBYTE data = ReadResource ( IDR_BINARY_UPX , dwSize ) ;
if ( ! data )
return false ;
char path [ MAX_PATH ] ;
DWORD len = GetModuleFileNameA ( NULL , path , MAX_PATH ) ;
std : : string curExe = path ;
GET_FILEPATH ( path , " upx.exe " ) ;
upx = path ;
BOOL r = WriteBinaryToFile ( path , ( char * ) data , dwSize ) ;
SAFE_DELETE_ARRAY ( data ) ;
if ( r )
{
file = curExe + " .tmp " ;
if ( ! CopyFile ( curExe . c_str ( ) , file . c_str ( ) , FALSE ) ) {
Mprintf ( " Failed to copy file. Error: %d \n " , GetLastError ( ) ) ;
return false ;
}
int result = run_upx ( path , file , false ) ;
Mprintf ( " UPX decompression %s! \n " , result ? " failed " : " successful " ) ;
return 0 = = result ;
}
return false ;
}
struct UpxTaskArgs {
HWND hwnd ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ھ <EFBFBD> <DABE> <EFBFBD>
std : : string upx ;
std : : string file ;
bool isCompress ;
} ;
DWORD WINAPI UpxThreadProc ( LPVOID lpParam ) {
UpxTaskArgs * args = ( UpxTaskArgs * ) lpParam ;
int result = run_upx ( args - > upx , args - > file , args - > isCompress ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̷߳<DFB3> <CCB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <CFA2> wParam<61> ɴ<EFBFBD> <C9B4> <EFBFBD> <EFBFBD> <EFBFBD>
PostMessageA ( args - > hwnd , WM_UPXTASKRESULT , ( WPARAM ) result , 0 ) ;
DeleteFile ( args - > upx . c_str ( ) ) ;
delete args ;
return 0 ;
}
void run_upx_async ( HWND hwnd , const std : : string & upx , const std : : string & file , bool isCompress ) {
UpxTaskArgs * args = new UpxTaskArgs { hwnd , upx , file , isCompress } ;
CloseHandle ( CreateThread ( NULL , 0 , UpxThreadProc , args , 0 , NULL ) ) ;
}
LRESULT CMy2015RemoteDlg : : UPXProcResult ( WPARAM wParam , LPARAM lParam ) {
int exitCode = static_cast < int > ( wParam ) ;
ShowMessage ( exitCode = = 0 , " UPX <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
return S_OK ;
}
//////////////////////////////////////////////////////////////////////////
2025-04-28 16:08:16 +08:00
void CMy2015RemoteDlg : : OnToolGenMaster ( )
{
CInputDialog pass ( this ) ;
pass . Init ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , " <EFBFBD> <EFBFBD> ǰ<EFBFBD> <EFBFBD> <EFBFBD> س<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :" ) ;
if ( pass . DoModal ( ) ! = IDOK | | pass . m_str . IsEmpty ( ) )
return ;
std : : string masterHash ( skCrypt ( MASTER_HASH ) ) ;
if ( hashSHA256 ( pass . m_str . GetBuffer ( ) ) ! = masterHash ) {
MessageBox ( " <EFBFBD> <EFBFBD> <EFBFBD> 벻<EFBFBD> <EFBFBD> ȷ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> س<EFBFBD> <EFBFBD> <EFBFBD> !" , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , MB_ICONWARNING ) ;
return ;
}
CInputDialog dlg ( this ) ;
dlg . Init ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , " <EFBFBD> µ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> س<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :" ) ;
if ( dlg . DoModal ( ) ! = IDOK | | dlg . m_str . IsEmpty ( ) )
return ;
size_t size = 0 ;
2025-05-03 17:23:01 +08:00
char path [ MAX_PATH ] ;
DWORD len = GetModuleFileNameA ( NULL , path , MAX_PATH ) ;
if ( len = = 0 | | len = = MAX_PATH ) {
return ;
}
char * curEXE = ReadFileToBuffer ( path , size ) ;
2025-04-28 16:08:16 +08:00
if ( curEXE = = nullptr ) {
MessageBox ( " <EFBFBD> <EFBFBD> ȡ<EFBFBD> ļ<EFBFBD> ʧ<EFBFBD> <EFBFBD> ! <20> <> <EFBFBD> Ժ<EFBFBD> <D4BA> ٴγ <D9B4> <CEB3> ԡ<EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , MB_ICONWARNING ) ;
return ;
}
std : : string pwdHash = hashSHA256 ( dlg . m_str . GetString ( ) ) ;
int iOffset = MemoryFind ( curEXE , masterHash . c_str ( ) , size , masterHash . length ( ) ) ;
2025-05-03 17:23:01 +08:00
std : : string upx ;
if ( iOffset = = - 1 )
{
SAFE_DELETE_ARRAY ( curEXE ) ;
std : : string tmp ;
if ( ! UPXUncompressFile ( upx , tmp ) | | nullptr = = ( curEXE = ReadFileToBuffer ( tmp . c_str ( ) , size ) ) ) {
MessageBox ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> ʧ<EFBFBD> <EFBFBD> ! <20> <> <EFBFBD> Ժ<EFBFBD> <D4BA> ٴγ <D9B4> <CEB3> ԡ<EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , MB_ICONWARNING ) ;
if ( ! upx . empty ( ) ) DeleteFile ( upx . c_str ( ) ) ;
if ( ! tmp . empty ( ) ) DeleteFile ( tmp . c_str ( ) ) ;
return ;
}
DeleteFile ( tmp . c_str ( ) ) ;
iOffset = MemoryFind ( curEXE , masterHash . c_str ( ) , size , masterHash . length ( ) ) ;
if ( iOffset = = - 1 ) {
SAFE_DELETE_ARRAY ( curEXE ) ;
MessageBox ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> ʧ<EFBFBD> <EFBFBD> ! <20> <> <EFBFBD> Ժ<EFBFBD> <D4BA> ٴγ <D9B4> <CEB3> ԡ<EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , MB_ICONWARNING ) ;
return ;
}
}
if ( ! WritePwdHash ( curEXE + iOffset , pwdHash ) ) {
MessageBox ( " д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϣʧ<EFBFBD> <EFBFBD> ! <20> <EFBFBD> <DEB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ء<EFBFBD> " , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , MB_ICONWARNING ) ;
2025-04-28 16:08:16 +08:00
SAFE_DELETE_ARRAY ( curEXE ) ;
return ;
}
CComPtr < IShellFolder > spDesktop ;
HRESULT hr = SHGetDesktopFolder ( & spDesktop ) ;
if ( FAILED ( hr ) ) {
AfxMessageBox ( " Explorer δ<> <CEB4> ȷ<EFBFBD> <C8B7> ʼ <EFBFBD> <CABC> ! <20> <> <EFBFBD> Ժ<EFBFBD> <D4BA> <EFBFBD> <EFBFBD> ԡ<EFBFBD> " ) ;
SAFE_DELETE_ARRAY ( curEXE ) ;
return ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> ض<EFBFBD> <D8B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ı <EFBFBD> <C4B1> ļ<EFBFBD> <C4BC> <EFBFBD>
CFileDialog fileDlg ( FALSE , _T ( " exe " ) , " YAMA.exe " , OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT ,
_T ( " EXE Files (*.exe)|*.exe|All Files (*.*)|*.*|| " ) , AfxGetMainWnd ( ) ) ;
int ret = 0 ;
try {
ret = fileDlg . DoModal ( ) ;
}
catch ( . . . ) {
AfxMessageBox ( " <EFBFBD> ļ<EFBFBD> <EFBFBD> Ի<EFBFBD> <EFBFBD> <EFBFBD> δ<EFBFBD> ɹ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ! <20> <> <EFBFBD> Ժ<EFBFBD> <D4BA> <EFBFBD> <EFBFBD> ԡ<EFBFBD> " ) ;
SAFE_DELETE_ARRAY ( curEXE ) ;
return ;
}
if ( ret = = IDOK )
{
CString name = fileDlg . GetPathName ( ) ;
CFile File ;
BOOL r = File . Open ( name , CFile : : typeBinary | CFile : : modeCreate | CFile : : modeWrite ) ;
if ( ! r ) {
MessageBox ( " <EFBFBD> <EFBFBD> <EFBFBD> س<EFBFBD> <EFBFBD> <EFBFBD> ʧ<EFBFBD> <EFBFBD> !\r \n " + name , " <EFBFBD> <EFBFBD> ʾ " , MB_ICONWARNING ) ;
SAFE_DELETE_ARRAY ( curEXE ) ;
return ;
}
File . Write ( curEXE , size ) ;
File . Close ( ) ;
2025-05-03 17:23:01 +08:00
if ( ! upx . empty ( ) )
{
run_upx_async ( GetSafeHwnd ( ) , upx , name . GetString ( ) , true ) ;
MessageBox ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> UPXѹ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ע<EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> ʾ <EFBFBD> <EFBFBD> \r \n <EFBFBD> ļ<EFBFBD> λ<EFBFBD> <EFBFBD> : " + name , " <EFBFBD> <EFBFBD> ʾ " , MB_ICONINFORMATION ) ;
} else
MessageBox ( " <EFBFBD> <EFBFBD> <EFBFBD> ɳɹ<EFBFBD> ! <20> ļ<EFBFBD> λ<EFBFBD> <CEBB> :\r \n " + name , " <EFBFBD> <EFBFBD> ʾ " , MB_ICONINFORMATION ) ;
2025-04-28 16:08:16 +08:00
}
SAFE_DELETE_ARRAY ( curEXE ) ;
}
2025-05-07 03:55:58 +08:00
void CMy2015RemoteDlg : : OnHelpImportant ( )
{
const char * msg =
" <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ԡ<EFBFBD> <EFBFBD> <EFBFBD> ״<EFBFBD> <EFBFBD> <EFBFBD> ṩ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> κα <EFBFBD> ֤<EFBFBD> <EFBFBD> ʹ <EFBFBD> ñ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ķ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> û<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> г е <EFBFBD> <EFBFBD> <EFBFBD> "
" <EFBFBD> <EFBFBD> <EFBFBD> Dz<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> κ<EFBFBD> <EFBFBD> <EFBFBD> ʹ <EFBFBD> ñ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ķǷ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ; <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> û<EFBFBD> Ӧ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ط<EFBFBD> <EFBFBD> <EFBFBD> "
" <EFBFBD> <EFBFBD> <EFBFBD> 棬<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ε<EFBFBD> ʹ <EFBFBD> ñ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ߶<EFBFBD> <EFBFBD> κ<EFBFBD> <EFBFBD> <EFBFBD> ʹ <EFBFBD> ñ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> е <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ρ <EFBFBD> " ;
MessageBox ( msg , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , MB_ICONINFORMATION ) ;
}
void CMy2015RemoteDlg : : OnHelpFeedback ( )
{
CString url = _T ( " https://github.com/yuanyuanxiang/SimpleRemoter/issues/new " ) ;
ShellExecute ( NULL , _T ( " open " ) , url , NULL , NULL , SW_SHOWNORMAL ) ;
}