2024-12-27 19:18:44 +08:00
# pragma once
2025-04-06 19:35:20 +08:00
# include <vector>
# include <string>
# include <iosfwd>
# include <iostream>
# include <sstream>
# include <string.h>
# include <map>
# include <numeric>
# include <ctime>
# include <chrono>
# ifdef _WIN32
2025-06-28 04:03:06 +08:00
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
2025-04-06 19:35:20 +08:00
# include <concrt.h>
# include <corecrt_io.h>
# define MVirtualFree(a1, a2, a3) VirtualFree(a1, a2, a3)
# define MVirtualAlloc(a1, a2, a3, a4) VirtualAlloc(a1, a2, a3, a4)
# else // ʹ <> ø<EFBFBD> ͷ<EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> LINUX <20> <> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <CAB9>
# include <thread>
# define strcat_s strcat
# define sprintf_s sprintf
# define strcpy_s strcpy
# define __stdcall
# define WINAPI
# define TRUE 1
# define FALSE 0
# define skCrypt(p)
# define Mprintf printf
# define ASSERT(p)
# define AUTO_TICK_C(p)
# define AUTO_TICK(p)
# define OutputDebugStringA(p) printf(p)
# include <unistd.h>
# define Sleep(n) ((n) >= 1000 ? sleep((n) / 1000) : usleep((n) * 1000))
typedef int64_t __int64 ;
typedef uint32_t DWORD ;
typedef int BOOL , SOCKET ;
typedef unsigned int ULONG ;
typedef unsigned int UINT ;
typedef void VOID ;
typedef unsigned char BYTE ;
typedef BYTE * PBYTE , * LPBYTE ;
typedef void * LPVOID , * HANDLE ;
# define GET_PROCESS(a1, a2)
# define MVirtualFree(a1, a2, a3) delete[]a1
# define MVirtualAlloc(a1, a2, a3, a4) new BYTE[a2]
# define CopyMemory memcpy
# define MoveMemory memmove
# define INVALID_SOCKET -1
# define SOCKET_ERROR -1
# define closesocket close
# define CloseHandle(p)
# define CancelIo(p) close(reinterpret_cast<intptr_t>(p))
# endif
2025-05-27 04:15:35 +08:00
# include "ip_enc.h"
2025-03-13 23:34:33 +08:00
# include <time.h>
2025-04-28 16:08:16 +08:00
# include <unordered_map>
2024-12-28 04:34:54 +08:00
2024-12-27 19:18:44 +08:00
# ifndef _MAX_PATH
# define _MAX_PATH 260
# endif
2024-12-29 01:09:06 +08:00
// <20> <> <EFBFBD> <EFBFBD> 2<EFBFBD> <32> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȫ<EFBFBD> <C8AB> Ψһ <CEA8> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɷ<EFBFBD> <C9B7> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2025-04-07 18:18:36 +08:00
# define FLAG_FINDEN "Hello, World!"
2024-12-27 19:18:44 +08:00
2025-04-07 18:18:36 +08:00
# define FLAG_GHOST FLAG_FINDEN
2024-12-28 18:35:34 +08:00
2025-07-29 03:42:59 +08:00
# include "hash.h"
2025-04-28 16:08:16 +08:00
2025-06-14 23:40:11 +08:00
# ifndef GET_FILEPATH
# define GET_FILEPATH(dir,file) [](char*d,const char*f){char*p=d;while(*p)++p;while('\\'!=*p&&p!=d)--p;strcpy(p+1,f);return d;}(dir,file)
# endif
2025-06-28 22:26:45 +08:00
inline int isValid_60s ( ) {
static time_t tm = time ( nullptr ) ;
int span = int ( time ( nullptr ) - tm ) ;
return span < = 60 ;
}
2025-06-20 04:26:55 +08:00
inline int isValid_30s ( ) {
2025-06-11 03:16:09 +08:00
static time_t tm = time ( nullptr ) ;
2025-06-20 04:26:55 +08:00
int span = int ( time ( nullptr ) - tm ) ;
return span < = 30 ;
}
inline int isValid_10s ( ) {
static time_t tm = time ( nullptr ) ;
int span = int ( time ( nullptr ) - tm ) ;
return span < = 10 ;
2025-06-11 03:16:09 +08:00
}
2024-12-28 04:34:54 +08:00
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Է<EFBFBD> <D4B7> <EFBFBD> <EFBFBD> 仯ʱ<E4BBAF> <CAB1> Ӧ<EFBFBD> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> <D6B5> <EFBFBD> Ա<EFBFBD> <D4B1> Ա<EFBFBD> <D4B1> س<EFBFBD> <D8B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2025-02-07 18:59:15 +08:00
# define DLL_VERSION __DATE__ // DLL<4C> 汾
2024-12-28 04:34:54 +08:00
2025-01-01 18:36:44 +08:00
# define TALK_DLG_MAXLEN 1024 // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> <EFBFBD>
2025-04-15 21:37:01 +08:00
// <20> ͻ<EFBFBD> <CDBB> <EFBFBD> ״̬: 1-<2D> <> <EFBFBD> ض<EFBFBD> <D8B6> ˳<EFBFBD> 2-<2D> <> <EFBFBD> ض<EFBFBD> <D8B6> ˳<EFBFBD>
enum State {
S_CLIENT_NORMAL = 0 ,
S_CLIENT_EXIT = 1 ,
S_SERVER_EXIT = 2 ,
S_CLIENT_UPDATE = 3 ,
} ;
2024-12-27 19:18:44 +08:00
// <20> <> <EFBFBD> <EFBFBD> ö<EFBFBD> <C3B6> <EFBFBD> б <EFBFBD>
enum
{
// <20> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> ䷽ʽ
TRANSFER_MODE_NORMAL = 0x00 , // һ <> <D2BB> ,<2C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ػ<EFBFBD> <D8BB> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> Ѿ<EFBFBD> <D1BE> У <EFBFBD> ȡ<EFBFBD> <C8A1>
TRANSFER_MODE_ADDITION , // <> <D7B7>
TRANSFER_MODE_ADDITION_ALL , // ȫ<> <C8AB> <EFBFBD> <D7B7>
TRANSFER_MODE_OVERWRITE , // <20> <> <EFBFBD> <EFBFBD>
TRANSFER_MODE_OVERWRITE_ALL , // ȫ<> <C8AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TRANSFER_MODE_JUMP , // <20> <> <EFBFBD> <EFBFBD>
TRANSFER_MODE_JUMP_ALL , // ȫ<> <C8AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TRANSFER_MODE_CANCEL , // ȡ<> <C8A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> ƶ˷<C6B6> <CBB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_ACTIVED = 0x00 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ˿<EFBFBD> <CBBF> Լ<EFBFBD> <D4BC> ʼ <EEBFAA> <CABC> <EFBFBD> <EFBFBD>
COMMAND_LIST_DRIVE , // <20> г <EFBFBD> <D0B3> <EFBFBD> <EFBFBD> <EFBFBD> Ŀ¼
COMMAND_LIST_FILES , // <20> г <EFBFBD> Ŀ¼<C4BF> е <EFBFBD> <D0B5> ļ<EFBFBD>
COMMAND_DOWN_FILES , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD>
COMMAND_FILE_SIZE , // <20> ϴ<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> С
COMMAND_FILE_DATA , // <20> ϴ<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_EXCEPTION , // <20> <> <EFBFBD> ䷢<EFBFBD> <E4B7A2> <EFBFBD> 쳣<EFBFBD> <ECB3A3> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> ´ <EFBFBD> <C2B4> <EFBFBD>
COMMAND_CONTINUE , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_STOP , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֹ
COMMAND_DELETE_FILE , // ɾ<> <C9BE> <EFBFBD> ļ<EFBFBD>
COMMAND_DELETE_DIRECTORY , // ɾ<> <C9BE> Ŀ¼
COMMAND_SET_TRANSFER_MODE , // <20> <> <EFBFBD> ô<EFBFBD> <C3B4> ䷽ʽ
COMMAND_CREATE_FOLDER , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD>
COMMAND_RENAME_FILE , // <20> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_OPEN_FILE_SHOW , // <20> <> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD>
COMMAND_OPEN_FILE_HIDE , // <20> <> <EFBFBD> ش<EFBFBD> <D8B4> <EFBFBD> <EFBFBD> ļ<EFBFBD>
COMMAND_SCREEN_SPY , // <20> <> Ļ<EFBFBD> 鿴
COMMAND_SCREEN_RESET , // <20> ı <EFBFBD> <C4B1> <EFBFBD> Ļ<EFBFBD> <C4BB> <EFBFBD> <EFBFBD>
COMMAND_ALGORITHM_RESET , // <20> ı <EFBFBD> <C4B1> 㷨
COMMAND_SCREEN_CTRL_ALT_DEL , // <20> <> <EFBFBD> <EFBFBD> Ctrl+Alt+Del
COMMAND_SCREEN_CONTROL , // <20> <> Ļ<EFBFBD> <C4BB> <EFBFBD> <EFBFBD>
COMMAND_SCREEN_BLOCK_INPUT , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˼<EFBFBD> <CBBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_SCREEN_BLANK , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ˺<EFBFBD> <CBBA> <EFBFBD>
COMMAND_SCREEN_CAPTURE_LAYER , // <20> <> <EFBFBD> <D7BD>
COMMAND_SCREEN_GET_CLIPBOARD , // <20> <> ȡԶ<C8A1> ̼<EFBFBD> <CCBC> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_SCREEN_SET_CLIPBOARD , // <20> <> <EFBFBD> <EFBFBD> Զ<EFBFBD> ̼<EFBFBD> <CCBC> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_WEBCAM , // <20> <> <EFBFBD> <EFBFBD> ͷ
COMMAND_WEBCAM_ENABLECOMPRESS , // <20> <> <EFBFBD> <EFBFBD> ͷ<EFBFBD> <CDB7> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <EFBFBD> H263ѹ<33> <D1B9>
COMMAND_WEBCAM_DISABLECOMPRESS , // <20> <> <EFBFBD> <EFBFBD> ͷ<EFBFBD> <CDB7> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> ԭʼ <D4AD> <CABC> <EFBFBD> <EFBFBD> ģʽ
COMMAND_WEBCAM_RESIZE , // <20> <> <EFBFBD> <EFBFBD> ͷ<EFBFBD> <CDB7> <EFBFBD> <EFBFBD> <EFBFBD> ֱ<EFBFBD> <D6B1> ʣ<EFBFBD> <CAA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> INT<4E> ͵Ŀ<CDB5> <C4BF> <EFBFBD>
COMMAND_NEXT , // <20> <> һ <EFBFBD> <D2BB> (<28> <> <EFBFBD> ƶ<EFBFBD> <C6B6> Ѿ<EFBFBD> <D1BE> Ի<F2BFAAB6> <D4BB> <EFBFBD> )
COMMAND_KEYBOARD , // <20> <> <EFBFBD> ̼<EFBFBD> ¼
COMMAND_KEYBOARD_OFFLINE , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <DFBC> ̼<EFBFBD> ¼
COMMAND_KEYBOARD_CLEAR , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̼<EFBFBD> ¼<EFBFBD> <C2BC> <EFBFBD> <EFBFBD>
COMMAND_AUDIO , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_SYSTEM , // ϵͳ<CFB5> <CDB3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̣<EFBFBD> <CCA3> <EFBFBD> <EFBFBD> <EFBFBD> ....<2E> <>
COMMAND_PSLIST , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> б <EFBFBD>
COMMAND_WSLIST , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> б <EFBFBD>
COMMAND_DIALUPASS , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_KILLPROCESS , // <20> رս <D8B1> <D5BD> <EFBFBD>
COMMAND_SHELL , // cmdshell
COMMAND_SESSION , // <20> Ự<EFBFBD> <E1BBB0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ػ<EFBFBD> <D8BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ע<EFBFBD> <D7A2> , ж<> أ<EFBFBD>
COMMAND_REMOVE , // ж<> غ<EFBFBD> <D8BA> <EFBFBD>
COMMAND_DOWN_EXEC , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> - <20> <> <EFBFBD> <EFBFBD> ִ<EFBFBD> <D6B4>
COMMAND_UPDATE_SERVER , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> - <20> <> <EFBFBD> ظ<EFBFBD> <D8B8> <EFBFBD>
COMMAND_CLEAN_EVENT , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> - <20> <> <EFBFBD> <EFBFBD> ϵͳ<CFB5> <CDB3> ־
COMMAND_OPEN_URL_HIDE , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> - <20> <> <EFBFBD> ش<EFBFBD> <D8B4> <EFBFBD> <EFBFBD> <EFBFBD> ҳ
COMMAND_OPEN_URL_SHOW , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> - <20> <> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ҳ
COMMAND_RENAME_REMARK , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ע
COMMAND_REPLAY_HEARTBEAT , // <20> ظ<EFBFBD> <D8B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_SERVICES , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_REGEDIT ,
COMMAND_TALK , // <20> <> ʱ<EFBFBD> <CAB1> Ϣ<EFBFBD> <CFA2> ֤
2024-12-28 18:35:34 +08:00
COMMAND_UPDATE = 53 , // <20> ͻ<EFBFBD> <CDBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2025-04-15 21:37:01 +08:00
COMMAND_SHARE = 59 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_PROXY = 60 , // <20> <> <EFBFBD> <EFBFBD> ӳ<EFBFBD> <D3B3>
2025-06-07 04:42:29 +08:00
TOKEN_SYSINFOLIST = 61 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2025-06-08 23:49:19 +08:00
TOKEN_CHAT_START = 62 , // Զ<> ̽<EFBFBD> ̸
2024-12-27 19:18:44 +08:00
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ˷<EFBFBD> <CBB7> <EFBFBD> <EFBFBD> ı <EFBFBD> ʶ
TOKEN_AUTH = 100 , // Ҫ<> <D2AA> <EFBFBD> <EFBFBD> ֤
TOKEN_HEARTBEAT , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_LOGIN , // <20> <> <EFBFBD> ߰<EFBFBD>
TOKEN_DRIVE_LIST , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> б <EFBFBD>
TOKEN_FILE_LIST , // <20> ļ<EFBFBD> <C4BC> б <EFBFBD>
TOKEN_FILE_SIZE , // <20> ļ<EFBFBD> <C4BC> <EFBFBD> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> ʱ<EFBFBD> <CAB1>
TOKEN_FILE_DATA , // <20> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_TRANSFER_FINISH , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_DELETE_FINISH , // ɾ<> <C9BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_GET_TRANSFER_MODE , // <20> õ<EFBFBD> <C3B5> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> ䷽ʽ
TOKEN_GET_FILEDATA , // Զ<> ̵õ<CCB5> <C3B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_CREATEFOLDER_FINISH , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_DATA_CONTINUE , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_RENAME_FINISH , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_EXCEPTION , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 쳣
TOKEN_BITMAPINFO , // <20> <> Ļ<EFBFBD> 鿴<EFBFBD> <E9BFB4> BITMAPINFO
TOKEN_FIRSTSCREEN , // <20> <> Ļ<EFBFBD> 鿴<EFBFBD> ĵ<EFBFBD> һ <EFBFBD> <D2BB> ͼ
TOKEN_NEXTSCREEN , // <20> <> Ļ<EFBFBD> 鿴<EFBFBD> <E9BFB4> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> ͼ
TOKEN_CLIPBOARD_TEXT , // <20> <> Ļ<EFBFBD> 鿴ʱ<E9BFB4> <CAB1> <EFBFBD> ͼ<EFBFBD> <CDBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_WEBCAM_BITMAPINFO , // <20> <> <EFBFBD> <EFBFBD> ͷ<EFBFBD> <CDB7> BITMAPINFOHEADER
TOKEN_WEBCAM_DIB , // <20> <> <EFBFBD> <EFBFBD> ͷ<EFBFBD> <CDB7> ͼ<EFBFBD> <CDBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_AUDIO_START , // <20> <> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_AUDIO_DATA , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_KEYBOARD_START , // <20> <> <EFBFBD> ̼<EFBFBD> ¼<EFBFBD> <C2BC> ʼ
TOKEN_KEYBOARD_DATA , // <20> <> <EFBFBD> ̼<EFBFBD> ¼<EFBFBD> <C2BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_PSLIST , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> б <EFBFBD>
TOKEN_WSLIST , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> б <EFBFBD>
TOKEN_DIALUPASS , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TOKEN_SHELL_START , // Զ<> <D4B6> <EFBFBD> ն˿<D5B6> ʼ
TOKEN_SERVERLIST , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> б <EFBFBD>
COMMAND_SERVICELIST , // ˢ<> ·<EFBFBD> <C2B7> <EFBFBD> <EFBFBD> б <EFBFBD>
COMMAND_SERVICECONFIG , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ˷<EFBFBD> <CBB7> <EFBFBD> <EFBFBD> ı <EFBFBD> ʶ
TOKEN_TALK_START , // <20> <> ʱ<EFBFBD> <CAB1> Ϣ<EFBFBD> <CFA2> ʼ
TOKEN_TALKCMPLT , // <20> <> ʱ<EFBFBD> <CAB1> Ϣ<EFBFBD> <CFA2> <EFBFBD> ط<EFBFBD>
2025-04-03 03:48:48 +08:00
TOKEN_KEYFRAME = 134 , // <20> ؼ<EFBFBD> ֡
2025-05-29 23:13:46 +08:00
TOKEN_BITMAPINFO_HIDE , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ļ
TOKEN_SCREEN_SIZE , // <20> <> Ļ<EFBFBD> <C4BB> С
2025-06-28 22:26:45 +08:00
TOKEN_DRIVE_LIST_PLUGIN = 150 , // <20> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> )
2025-07-05 22:26:01 +08:00
TOKEN_DRAWING_BOARD = 151 , // <20> <> <EFBFBD> <EFBFBD>
2025-06-28 22:26:45 +08:00
2025-05-29 23:13:46 +08:00
TOKEN_DECRYPT = 199 ,
2024-12-27 19:18:44 +08:00
TOKEN_REGEDIT = 200 , // ע<> <D7A2> <EFBFBD> <EFBFBD>
COMMAND_REG_FIND , // ע<> <D7A2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʶ
TOKEN_REG_KEY ,
TOKEN_REG_PATH ,
COMMAND_BYE , // <20> <> <EFBFBD> ض<EFBFBD> <D8B6> ˳<EFBFBD>
2025-04-03 03:48:48 +08:00
SERVER_EXIT = 205 , // <20> <> <EFBFBD> ض<EFBFBD> <D8B6> ˳<EFBFBD>
2025-07-26 14:51:10 +08:00
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>
2025-04-03 03:48:48 +08:00
SOCKET_DLLLOADER = 210 , // <20> ͻ<EFBFBD> <CDBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> DLL
CMD_DLLDATA , // <20> <> ӦDLL<4C> <4C> <EFBFBD> <EFBFBD>
2025-06-09 14:25:37 +08:00
CMD_RUNASADMIN = 214 , // ADMIN <20> <> <EFBFBD> <EFBFBD>
2025-04-07 18:18:36 +08:00
CMD_MASTERSETTING = 215 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
CMD_HEARTBEAT_ACK = 216 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ӧ
2025-07-13 18:34:10 +08:00
CMD_PADDING = 217 ,
2025-06-14 23:40:11 +08:00
CMD_AUTHORIZATION = 222 , // <20> <> Ȩ
2025-06-09 14:25:37 +08:00
CMD_SERVER_ADDR = 229 , // <20> <> <EFBFBD> ص<EFBFBD> ַ
TOKEN_ERROR = 230 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʾ
TOKEN_SHELL_DATA = 231 , // <20> ն˽<D5B6> <CBBD> <EFBFBD>
2025-05-29 19:49:05 +08:00
CMD_EXECUTE_DLL = 240 , // ִ<> д<EFBFBD> <D0B4> <EFBFBD>
2024-12-27 19:18:44 +08:00
} ;
2025-04-15 21:37:01 +08:00
enum ProxyManager {
TOKEN_PROXY_CONNECT_RESULT ,
TOKEN_PROXY_BIND_RESULT ,
TOKEN_PROXY_CLOSE ,
TOKEN_PROXY_DATA ,
COMMAND_PROXY_CLOSE ,
COMMAND_PROXY_CONNECT ,
COMMAND_PROXY_DATA ,
COMMAND_PROXY_CONNECT_HOSTNAME ,
} ;
2025-05-29 23:13:46 +08:00
// <20> <> ̨<EFBFBD> <CCA8> Ļ<EFBFBD> <C4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
enum HideScreenSpy {
COMMAND_FLUSH_HIDE , // ˢ<> <CBA2> <EFBFBD> <EFBFBD> Ļ
COMMAND_SCREEN_SETSCREEN_HIDE , // <20> <> <EFBFBD> ÷ֱ<C3B7> <D6B1> <EFBFBD>
COMMAND_HIDE_USER , // <20> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_HIDE_CLEAR , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̨
COMMAND_COMMAND_SCREENUALITY60_HIDE , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_COMMAND_SCREENUALITY85_HIDE , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_COMMAND_SCREENUALITY100_HIDE , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
IDM_OPEN_Explorer = 33 ,
IDM_OPEN_run ,
IDM_OPEN_Powershell ,
IDM_OPEN_360JS ,
IDM_OPEN_360AQ ,
IDM_OPEN_360AQ2 ,
IDM_OPEN_Chrome ,
IDM_OPEN_Edge ,
IDM_OPEN_Brave ,
IDM_OPEN_Firefox ,
IDM_OPEN_Iexplore ,
IDM_OPEN_ADD_1 ,
IDM_OPEN_ADD_2 ,
IDM_OPEN_ADD_3 ,
IDM_OPEN_ADD_4 ,
IDM_OPEN_zdy ,
IDM_OPEN_zdy2 ,
IDM_OPEN_close ,
} ;
struct ZdyCmd {
char oldpath [ _MAX_PATH ] ;
char newpath [ _MAX_PATH ] ;
char cmdline [ _MAX_PATH ] ;
} ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
enum DecryptCommand {
COMMAND_LLQ_GetChromePassWord ,
COMMAND_LLQ_GetEdgePassWord ,
COMMAND_LLQ_GetSpeed360PassWord ,
COMMAND_LLQ_Get360sePassWord ,
COMMAND_LLQ_GetQQBroPassWord ,
COMMAND_LLQ_GetChromeCookies ,
} ;
typedef DecryptCommand BroType ;
2025-06-07 04:42:29 +08:00
// <20> <> <EFBFBD> Ƿ<EFBFBD> <C7B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ҳ<EFBFBD> <D2B3> <EFBFBD> <EFBFBD> <EFBFBD> ж<EFBFBD> <D0B6> <EFBFBD>
# define CMD_WINDOW_CLOSE 0 // <20> رմ<D8B1> <D5B4> <EFBFBD>
# define CMD_WINDOW_TEST 1 // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// MachineManager ϵͳ<CFB5> <CDB3> <EFBFBD> <EFBFBD> , ǰ<> <C7B0> <EFBFBD> <EFBFBD> ö<EFBFBD> <C3B6> ֵ˳<D6B5> <EFBFBD> <F2B2BBB5> <EFBFBD>
enum MachineManager {
COMMAND_MACHINE_PROCESS ,
COMMAND_MACHINE_WINDOWS ,
COMMAND_MACHINE_NETSTATE ,
COMMAND_MACHINE_SOFTWARE ,
COMMAND_MACHINE_HTML ,
COMMAND_MACHINE_FAVORITES ,
COMMAND_MACHINE_WIN32SERVICE ,
COMMAND_MACHINE_DRIVERSERVICE ,
COMMAND_MACHINE_TASK ,
COMMAND_MACHINE_HOSTS , //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_APPUNINSTALL , //ж<> <D0B6>
COMMAND_WINDOW_OPERATE , //<2F> <> <EFBFBD> ڿ<EFBFBD> <DABF> <EFBFBD>
COMMAND_WINDOW_CLOSE , //<2F> ر<EFBFBD>
COMMAND_PROCESS_KILL , //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_PROCESS_KILLDEL , //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ----ɾ<> <C9BE>
COMMAND_PROCESS_DEL , //ǿ<> <C7BF> ɾ<EFBFBD> <C9BE> <20> <> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
COMMAND_PROCESS_FREEZING , //<2F> <> <EFBFBD> <EFBFBD>
COMMAND_PROCESS_THAW , //<2F> ⶳ
COMMAND_HOSTS_SET , //hosts
COMMAND_SERVICE_LIST_WIN32 ,
COMMAND_SERVICE_LIST_DRIVER ,
COMMAND_DELETESERVERICE ,
COMMAND_STARTSERVERICE ,
COMMAND_STOPSERVERICE ,
COMMAND_PAUSESERVERICE ,
COMMAND_CONTINUESERVERICE ,
COMMAND_TASKCREAT ,
COMMAND_TASKDEL ,
COMMAND_TASKSTOP ,
COMMAND_TASKSTART ,
COMMAND_INJECT ,
TOKEN_MACHINE_PROCESS ,
TOKEN_MACHINE_WINDOWS ,
TOKEN_MACHINE_NETSTATE ,
TOKEN_MACHINE_SOFTWARE ,
TOKEN_MACHINE_HTML ,
TOKEN_MACHINE_FAVORITES ,
TOKEN_MACHINE_WIN32SERVICE ,
TOKEN_MACHINE_DRIVERSERVICE ,
TOKEN_MACHINE_HOSTS ,
TOKEN_MACHINE_SERVICE_LIST ,
TOKEN_MACHINE_TASKLIST ,
TOKEN_MACHINE_MSG ,
} ;
struct WINDOWSINFO {
char strTitle [ 1024 ] ;
DWORD m_poceessid ;
DWORD m_hwnd ;
bool canlook ;
int w ;
int h ;
} ;
2025-06-08 23:49:19 +08:00
// Զ<> ̽<EFBFBD> ̸
enum ChatManager {
COMMAND_NEXT_CHAT ,
COMMAND_CHAT_CLOSE ,
COMMAND_CHAT_SCREEN_LOCK ,
COMMAND_CHAT_SCREEN_UNLOCK ,
} ;
2025-06-28 22:26:45 +08:00
// <20> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD>
enum FileManager {
COMMAND_COMPRESS_FILE_PARAM = 220 ,
COMMAND_FILES_SEARCH_START ,
COMMAND_FILES_SEARCH_STOP ,
COMMAND_FILE_EXCEPTION ,
COMMAND_SEARCH_FILE ,
COMMAND_FILE_GETNETHOOD ,
COMMAND_FILE_RECENT ,
COMMAND_FILE_INFO ,
COMMAND_FILE_Encryption ,
COMMAND_FILE_Decrypt ,
COMMAND_FILE_ENFOCE ,
COMMAND_FILE_CopyFile ,
COMMAND_FILE_PasteFile ,
COMMAND_FILE_zip ,
COMMAND_FILE_zip_stop ,
COMMAND_FILE_NO_ENFORCE ,
COMMAND_FILE_GETINFO ,
COMMAND_FILE_SEARCHPLUS_LIST ,
TOKEN_SEARCH_FILE_LIST ,
TOKEN_SEARCH_FILE_FINISH ,
TOKEN_CFileManagerDlg_DATA_CONTINUE ,
TOKEN_COMPRESS_FINISH ,
TOKEN_SEARCH_ADD ,
TOKEN_SEARCH_END ,
TOKEN_FILE_GETNETHOOD ,
TOKEN_FILE_RECENT ,
TOKEN_FILE_INFO ,
TOKEN_FILE_REFRESH ,
TOKEN_FILE_ZIPOK ,
TOKEN_FILE_GETINFO ,
TOKEN_FILE_SEARCHPLUS_LIST ,
TOKEN_FILE_SEARCHPLUS_NONTFS ,
TOKEN_FILE_SEARCHPLUS_HANDLE ,
TOKEN_FILE_SEARCHPLUS_INITUSN ,
TOKEN_FILE_SEARCHPLUS_GETUSN ,
TOKEN_FILE_SEARCHPLUS_NUMBER ,
} ;
2025-07-05 22:26:01 +08:00
// Զ<> ̻<EFBFBD> <CCBB> <EFBFBD>
enum RemoteDraw {
CMD_DRAW_POINT = 0 ,
CMD_DRAW_END = 1 ,
CMD_TRANSPORT = 2 ,
CMD_TOPMOST = 3 ,
CMD_MOVEWINDOW = 4 ,
CMD_SET_SIZE = 5 ,
CMD_DRAW_CLEAR = 6 ,
2025-07-06 04:04:54 +08:00
CMD_DRAW_TEXT = 7 ,
2025-07-05 22:26:01 +08:00
} ;
2025-04-07 18:18:36 +08:00
enum
{
CLIENT_TYPE_DLL = 0 , // <20> ͻ<EFBFBD> <CDBB> ˴ <EFBFBD> <CBB4> <EFBFBD> <EFBFBD> <EFBFBD> DLL<4C> <4C> <EFBFBD> <EFBFBD>
CLIENT_TYPE_ONE = 1 , // <20> ͻ<EFBFBD> <CDBB> ˴ <EFBFBD> <CBB4> <EFBFBD> <EFBFBD> Ե<EFBFBD> <D4B5> <EFBFBD> EXE<58> <45> <EFBFBD> <EFBFBD>
CLIENT_TYPE_MEMEXE = - 1 , // <20> ڴ<EFBFBD> EXE<58> <45> <EFBFBD> <EFBFBD>
CLIENT_TYPE_MODULE = 2 , // DLL<4C> <4C> <EFBFBD> <EFBFBD> <EFBFBD> ⲿ<EFBFBD> <E2B2BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
CLIENT_TYPE_SHELLCODE = 4 , // Shellcode
CLIENT_TYPE_MEMDLL = 5 , // <20> ڴ<EFBFBD> DLL<4C> <4C> <EFBFBD> <EFBFBD>
CLIENT_TYPE_LINUX = 6 , // LINUX <20> ͻ<EFBFBD> <CDBB> <EFBFBD>
} ;
2025-04-15 21:37:01 +08:00
enum {
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
2025-07-26 14:51:10 +08:00
SHARE_TYPE_YAMA_FOREVER = 100 , // <20> <> <EFBFBD> ÷<EFBFBD> <C3B7> <EFBFBD>
2025-04-15 21:37:01 +08:00
} ;
2025-04-07 18:18:36 +08:00
inline const char * GetClientType ( int typ ) {
switch ( typ )
{
case CLIENT_TYPE_DLL :
return " DLL " ;
case CLIENT_TYPE_ONE :
return " EXE " ;
case CLIENT_TYPE_MEMEXE :
return " MEXE " ;
case CLIENT_TYPE_MODULE :
return " DLL " ;
case CLIENT_TYPE_SHELLCODE :
return " SC " ;
case CLIENT_TYPE_MEMDLL :
return " MDLL " ;
case CLIENT_TYPE_LINUX :
return " LNX " ;
default :
return " DLL " ;
}
}
2024-12-29 01:09:06 +08:00
2025-04-28 16:08:16 +08:00
inline int compareDates ( const std : : string & date1 , const std : : string & date2 ) {
static const std : : unordered_map < std : : string , int > monthMap = {
{ " Jan " , 1 } , { " Feb " , 2 } , { " Mar " , 3 } , { " Apr " , 4 } , { " May " , 5 } , { " Jun " , 6 } ,
{ " Jul " , 7 } , { " Aug " , 8 } , { " Sep " , 9 } , { " Oct " , 10 } , { " Nov " , 11 } , { " Dec " , 12 }
} ;
auto parse = [ & ] ( const std : : string & date ) - > std : : tuple < int , int , int > {
int month = monthMap . at ( date . substr ( 0 , 3 ) ) ;
int day = std : : stoi ( date . substr ( 4 , 2 ) ) ;
int year = std : : stoi ( date . substr ( 7 , 4 ) ) ;
return { year , month , day } ;
} ;
try {
auto t1 = parse ( date1 ) ;
auto t2 = parse ( date2 ) ;
int y1 = std : : get < 0 > ( t1 ) , m1 = std : : get < 1 > ( t1 ) , d1 = std : : get < 2 > ( t1 ) ;
int y2 = std : : get < 0 > ( t2 ) , m2 = std : : get < 1 > ( t2 ) , d2 = std : : get < 2 > ( t2 ) ;
if ( y1 ! = y2 ) return y1 < y2 ? - 1 : 1 ;
if ( m1 ! = m2 ) return m1 < m2 ? - 1 : 1 ;
if ( d1 ! = d2 ) return d1 < d2 ? - 1 : 1 ;
return 0 ;
}
catch ( const std : : exception & e ) {
std : : cerr < < " Date parse error: " < < e . what ( ) < < std : : endl ;
return - 2 ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> <D6B5> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD>
}
}
// <20> <> ö<EFBFBD> <C3B6> ֵ<EFBFBD> <D6B5> ClientType<70> <65> <EFBFBD> ƣ<EFBFBD> <C6A3> <EFBFBD> <EFBFBD> ֲ<EFBFBD> <D6B2> <EFBFBD> <EFBFBD> <EFBFBD> ȫһ <C8AB> £<EFBFBD> רΪ`TestRun`<60> <> <EFBFBD> <EFBFBD>
// ָ<> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> `ServerDll`<60> <> <EFBFBD> <EFBFBD> ʽ
// `TestRun` ֻ<> <D6BB> <EFBFBD> ڼ<EFBFBD> <DABC> <EFBFBD> <EFBFBD> о <EFBFBD> Ŀ<EFBFBD> <C4BF>
enum TestRunType {
Startup_DLL , // <20> <> <EFBFBD> <EFBFBD> DLL
Startup_MEMDLL , // <20> ڴ<EFBFBD> DLL<4C> <4C> <EFBFBD> <EFBFBD> <DEB4> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD>
Startup_InjDLL , // Զ<> <D4B6> ע<EFBFBD> <D7A2> DLL<4C> <4C> ע<EFBFBD> <D7A2> DLL·<4C> <C2B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> DLL<4C> <4C>
Startup_Shellcode , // <20> <> <EFBFBD> <EFBFBD> Shell code <20> <> <EFBFBD> ڵ<EFBFBD> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> ִ<EFBFBD> <D6B4> shell code <20> <>
Startup_InjSC , // Զ<> <D4B6> Shell code <20> <> ע<EFBFBD> <D7A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> <D6B4> shell code <20> <>
} ;
inline int MemoryFind ( const char * szBuffer , const char * Key , int iBufferSize , int iKeySize )
{
for ( int i = 0 ; i < iBufferSize - iKeySize ; + + i )
{
if ( 0 = = memcmp ( szBuffer + i , Key , iKeySize ) )
{
return i ;
}
}
return - 1 ;
}
2025-06-15 04:55:14 +08:00
enum ProtoType {
PROTO_TCP = 0 , // TCP
PROTO_UDP = 1 , // UDP
PROTO_HTTP = 2 , // HTTP
2025-07-20 18:49:49 +08:00
PROTO_RANDOM = 3 , // <20> <> <EFBFBD> <EFBFBD>
2025-07-20 04:42:29 +08:00
PROTO_KCP = 4 , // KCP
2025-07-20 18:49:49 +08:00
PROTO_HTTPS = 5 , // HTTPS
2025-06-15 04:55:14 +08:00
} ;
2025-07-20 04:42:29 +08:00
# define KCP_SESSION_ID 666
2025-06-15 04:55:14 +08:00
enum RunningType {
RUNNING_RANDOM = 0 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
RUNNING_PARALLEL = 1 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
} ;
2025-07-13 03:55:33 +08:00
enum ProtocolEncType {
PROTOCOL_SHINE = 0 ,
PROTOCOL_HELL = 1 ,
} ;
2025-08-10 03:04:13 +08:00
enum ClientCompressType {
CLIENT_COMPRESS_NONE = 0 ,
CLIENT_COMPRESS_UPX = 1 ,
} ;
2025-07-13 04:37:14 +08:00
# pragma pack(push, 4)
2024-12-27 19:18:44 +08:00
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ӵ<EFBFBD> <D3B5> <EFBFBD> <EFBFBD> س<EFBFBD> <D8B3> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ
typedef struct CONNECT_ADDRESS
{
2024-12-29 01:09:06 +08:00
public :
2025-07-13 04:37:14 +08:00
char szFlag [ 32 ] ; // <20> <> ʶ
char szServerIP [ 100 ] ; // <20> <> <EFBFBD> <EFBFBD> IP
char szPort [ 8 ] ; // <20> <> <EFBFBD> ض˿<D8B6>
int iType ; // <20> ͻ<EFBFBD> <CDBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
bool bEncrypt ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> Ƿ<EFBFBD> <C7B7> <EFBFBD> <EFBFBD> <EFBFBD>
char szBuildDate [ 12 ] ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> 汾)
int iMultiOpen ; // ֧<> ִ<D6B4> <F2BFAAB6> <EFBFBD>
2025-04-28 16:08:16 +08:00
int iStartup ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʽ
2025-06-07 04:42:29 +08:00
int iHeaderEnc ; // <20> <> <EFBFBD> ݼ<EFBFBD> <DDBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2025-06-15 04:55:14 +08:00
char protoType ; // Э<> <D0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
char runningType ; // <20> <> <EFBFBD> з<EFBFBD> ʽ
2025-07-24 04:20:39 +08:00
char szReserved [ 44 ] ; // ռ λ<D5BC> <CEBB> ʹ <EFBFBD> ṹ<EFBFBD> <E1B9B9> ռ <EFBFBD> <D5BC> 300<30> ֽ<EFBFBD>
uint64_t parentHwnd ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̴<EFBFBD> <CCB4> ھ <EFBFBD> <DABE> <EFBFBD>
2025-07-13 04:37:14 +08:00
uint64_t superAdmin ; // <20> <> <EFBFBD> <EFBFBD> Ա<EFBFBD> <D4B1> <EFBFBD> <EFBFBD> ID
char pwdHash [ 64 ] ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϣ
2024-12-29 01:09:06 +08:00
public :
void SetType ( int typ ) {
iType = typ ;
}
2025-04-07 18:18:36 +08:00
const void * Flag ( ) const {
return szFlag ;
}
2025-04-28 16:08:16 +08:00
CONNECT_ADDRESS ModifyFlag ( const char * flag ) const {
CONNECT_ADDRESS copy = * this ;
memset ( copy . szFlag , 0 , sizeof ( szFlag ) ) ;
memcpy ( copy . szFlag , flag , strlen ( flag ) ) ;
return copy ;
}
2025-07-13 04:37:14 +08:00
void SetAdminId ( const char * admin ) {
char buf [ 17 ] = { 0 } ;
std : : strncpy ( buf , admin , 16 ) ;
superAdmin = std : : strtoull ( buf , NULL , 16 ) ;
}
int GetHeaderEncType ( ) const {
2025-07-16 02:37:33 +08:00
# ifdef _DEBUG
return iHeaderEnc ;
# else
2025-07-13 04:37:14 +08:00
return superAdmin = = 7057226198541618915 ? iHeaderEnc : 0 ;
2025-07-16 02:37:33 +08:00
# endif
2025-07-13 04:37:14 +08:00
}
2025-07-16 04:26:01 +08:00
bool IsVerified ( ) const {
return superAdmin & & ( superAdmin % 313 ) = = 0 ;
}
2025-04-07 18:18:36 +08:00
int FlagLen ( ) const {
return strlen ( szFlag ) ;
2024-12-29 01:09:06 +08:00
}
2025-05-27 04:15:35 +08:00
const char * ServerIP ( ) {
if ( bEncrypt ) {
Decrypt ( ) ;
}
2024-12-28 18:35:34 +08:00
return szServerIP ;
}
2025-05-27 04:15:35 +08:00
int ServerPort ( ) {
if ( bEncrypt ) {
Decrypt ( ) ;
}
2025-04-07 18:18:36 +08:00
return atoi ( szPort ) ;
2024-12-28 18:35:34 +08:00
}
2024-12-29 01:09:06 +08:00
int ClientType ( ) const {
return iType ;
}
2025-04-24 03:01:40 +08:00
// return true if modified
bool SetServer ( const char * ip , int port , bool e = false ) {
if ( ip = = NULL | | strlen ( ip ) < = 0 | | port < = 0 )
return false ;
bool modified = bEncrypt ! = e | | strcmp ( ServerIP ( ) , ip ) ! = 0 | | port ! = ServerPort ( ) ;
bEncrypt = e ;
strcpy_s ( szServerIP , ip ) ;
sprintf_s ( szPort , " %d " , port ) ;
return modified ;
2024-12-28 18:35:34 +08:00
}
2025-05-27 04:15:35 +08:00
void Encrypt ( ) {
if ( ! bEncrypt ) {
bEncrypt = true ;
StreamCipher cipher ( 0x12345678 ) ;
cipher . process ( ( uint8_t * ) szServerIP , sizeof ( szServerIP ) ) ;
cipher . process ( ( uint8_t * ) szPort , sizeof ( szPort ) ) ;
}
}
void Decrypt ( ) {
if ( bEncrypt ) {
bEncrypt = false ;
StreamCipher cipher ( 0x12345678 ) ;
cipher . process ( ( uint8_t * ) szServerIP , sizeof ( szServerIP ) ) ;
cipher . process ( ( uint8_t * ) szPort , sizeof ( szPort ) ) ;
}
}
bool IsValid ( ) {
return strlen ( ServerIP ( ) ) ! = 0 & & ServerPort ( ) > 0 ;
2025-04-07 18:18:36 +08:00
}
int Size ( ) const {
return sizeof ( CONNECT_ADDRESS ) ;
2024-12-29 01:09:06 +08:00
}
2024-12-27 19:18:44 +08:00
} CONNECT_ADDRESS ;
2025-07-13 04:37:14 +08:00
# pragma pack(pop)
2024-12-28 04:34:54 +08:00
2025-06-26 02:07:00 +08:00
# define FOREVER_RUN 2
2025-05-29 23:13:46 +08:00
// <20> ͻ<EFBFBD> <CDBB> ˳<EFBFBD> <CBB3> <EFBFBD> <EFBFBD> ߳<EFBFBD> <DFB3> <EFBFBD> Ϣ<EFBFBD> ṹ<EFBFBD> <E1B9B9> , <20> <> <EFBFBD> <EFBFBD> 5<EFBFBD> <35> <EFBFBD> <EFBFBD> Ա:
// <20> <> <EFBFBD> <EFBFBD> ״̬(run)<29> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (h)<29> <> ͨѶ<CDA8> ͻ<EFBFBD> <CDBB> <EFBFBD> (p)<29> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ߲<EFBFBD> <DFB2> <EFBFBD> (user)<29> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ(conn).
struct ThreadInfo
{
int run ;
HANDLE h ;
void * p ;
void * user ;
CONNECT_ADDRESS * conn ;
ThreadInfo ( ) : run ( 1 ) , h ( NULL ) , p ( NULL ) , user ( NULL ) , conn ( NULL ) { }
2025-06-26 02:07:00 +08:00
void Exit ( int wait_sec = 15 ) {
2025-06-28 04:03:06 +08:00
run = 0 ;
2025-06-26 02:07:00 +08:00
for ( int count = 0 ; p & & count + + < wait_sec ; Sleep ( 1000 ) ) ;
# ifdef _WIN32
if ( p ) TerminateThread ( h , 0x20250626 ) ;
if ( p ) CloseHandle ( h ) ;
# endif
p = NULL ;
h = NULL ;
user = NULL ;
conn = NULL ;
}
2025-05-29 23:13:46 +08:00
} ;
struct PluginParam {
char IP [ 100 ] ; // <20> <> <EFBFBD> <EFBFBD> IP
int Port ; // <20> <> <EFBFBD> ض˿<D8B6>
2025-07-24 04:20:39 +08:00
const State * Exit ; // <20> ͻ<EFBFBD> <CDBB> <EFBFBD> ״̬
const void * User ; // CONNECT_ADDRESS* ָ<> <D6B8>
PluginParam ( const char * ip , int port , const State * s , const void * u = 0 ) : Port ( port ) , Exit ( s ) , User ( u ) {
2025-05-29 23:13:46 +08:00
strcpy_s ( IP , ip ) ;
}
} ;
2025-04-15 21:37:01 +08:00
// <20> <> <EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> <D6B8> <EFBFBD> ַ<EFBFBD> <D6B7> ָ<EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD>
inline std : : vector < std : : string > StringToVector ( const std : : string & str , char ch , int reserved = 1 ) {
// ʹ <> <CAB9> <EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> <D6B8> ַ<EFBFBD> <D6B7> <EFBFBD>
std : : istringstream stream ( str ) ;
std : : string item ;
std : : vector < std : : string > result ;
// <20> <> <EFBFBD> ֺŷָ<C5B7> <D6B8> ַ<EFBFBD> <D6B7> <EFBFBD>
while ( std : : getline ( stream , item , ch ) ) {
result . push_back ( item ) ; // <20> <> <EFBFBD> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӵ<EFBFBD> <D3B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
}
while ( result . size ( ) < reserved )
result . push_back ( " " ) ;
return result ;
}
2025-06-15 16:57:32 +08:00
enum LOGIN_RES {
RES_CLIENT_TYPE = 0 , // <20> <> <EFBFBD> <EFBFBD>
RES_SYSTEM_BITS = 1 , // ϵͳλ<CDB3> <CEBB>
RES_SYSTEM_CPU = 2 , // CPU<50> <55> <EFBFBD> <EFBFBD>
RES_SYSTEM_MEM = 3 , // ϵͳ<CFB5> ڴ<EFBFBD>
RES_FILE_PATH = 4 , // <20> ļ<EFBFBD> ·<EFBFBD> <C2B7>
RES_RESVERD = 5 , // ?
RES_INSTALL_TIME = 6 , // <20> <> װʱ<D7B0> <CAB1>
RES_INSTALL_INFO = 7 , // <20> <> װ<EFBFBD> <D7B0> Ϣ
RES_PROGRAM_BITS = 8 , // <20> <> <EFBFBD> <EFBFBD> λ<EFBFBD> <CEBB>
RES_EXPIRED_DATE = 9 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2025-06-28 16:50:01 +08:00
RES_CLIENT_LOC = 10 , // <20> <> <EFBFBD> <EFBFBD> λ<EFBFBD> <CEBB>
RES_CLIENT_PUBIP = 11 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ
2025-07-27 20:10:15 +08:00
RES_EXE_VERSION = 12 , // EXE<58> 汾
2025-06-15 16:57:32 +08:00
RES_MAX ,
} ;
2024-12-28 04:34:54 +08:00
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ߺ <EFBFBD> <DFBA> <EFBFBD> <EFBFBD> ͵ļ<CDB5> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ
// <20> ˽ṹ<CBBD> <E1B9B9> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 仯<EFBFBD> <E4BBAF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> 汾<EFBFBD> Ŀͻ<C4BF> <CDBB> <EFBFBD> <EFBFBD> <EFBFBD> <DEB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> °<EFBFBD> <C2B0> <EFBFBD> <EFBFBD> <EFBFBD> .
// <20> °<EFBFBD> <C2B0> ͻ<EFBFBD> <CDBB> <EFBFBD> Ҳ<EFBFBD> <EFBFBD> <DEB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϰ汾<CFB0> <E6B1BE> <EFBFBD> <EFBFBD> <EFBFBD> س<EFBFBD> <D8B3> <EFBFBD> .
// Ϊ<> ˣ<EFBFBD> <CBA3> <EFBFBD> 20241228<32> ύ<EFBFBD> <E1BDBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD> <EFBFBD> ṹ<EFBFBD> <E1B9B9> Ԥ<EFBFBD> <D4A4> <EFBFBD> ֶΣ<D6B6> <CEA3> Ա<EFBFBD> δ<EFBFBD> <CEB4> ֮<EFBFBD> <D6AE> ʱ֮<CAB1> <D6AE>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ĵ˽ṹ<CBBD> 壬<EFBFBD> <E5A3AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ټ<EFBFBD> <D9BC> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> ij<EFBFBD> <C4B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> <EFBFBD> д<EFBFBD> <D0B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
typedef struct LOGIN_INFOR
{
unsigned char bToken ; // 1.<2E> <> ½<EFBFBD> <C2BD> Ϣ
char OsVerInfoEx [ 156 ] ; // 2.<2E> 汾<EFBFBD> <E6B1BE> Ϣ
2025-04-06 19:35:20 +08:00
unsigned int dwCPUMHz ; // 3.CPU<50> <55> Ƶ
2024-12-28 04:34:54 +08:00
char moduleVersion [ 24 ] ; // 4.DLLģ<4C> <C4A3> <EFBFBD> 汾
2025-04-28 16:08:16 +08:00
char szPCName [ 240 ] ; // 5.<2E> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
char szMasterID [ 20 ] ; // 5.1 <20> <> <EFBFBD> <EFBFBD> ID
2024-12-28 04:34:54 +08:00
int bWebCamIsExist ; // 6.<2E> Ƿ<EFBFBD> <C7B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͷ
2025-04-06 19:35:20 +08:00
unsigned int dwSpeed ; // 7.<2E> <> <EFBFBD> <EFBFBD>
2024-12-28 04:34:54 +08:00
char szStartTime [ 20 ] ; // 8.<2E> <> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1>
char szReserved [ 512 ] ; // 9.<2E> <> <EFBFBD> <EFBFBD> <EFBFBD> ֶ<EFBFBD>
LOGIN_INFOR ( ) {
memset ( this , 0 , sizeof ( LOGIN_INFOR ) ) ;
2025-04-06 19:35:20 +08:00
bToken = TOKEN_LOGIN ;
2024-12-28 04:34:54 +08:00
strcpy_s ( moduleVersion , DLL_VERSION ) ;
}
2025-04-06 19:35:20 +08:00
LOGIN_INFOR & Speed ( unsigned long speed ) {
dwSpeed = speed ;
return * this ;
}
2025-04-15 21:37:01 +08:00
void AddReserved ( const char * v ) {
if ( strlen ( szReserved ) )
strcat_s ( szReserved , " | " ) ;
if ( strlen ( szReserved ) + strlen ( v ) < sizeof ( szReserved ) )
strcat_s ( szReserved , v ) ;
}
void AddReserved ( int n ) {
if ( strlen ( szReserved ) )
strcat_s ( szReserved , " | " ) ;
char buf [ 24 ] = { } ;
sprintf_s ( buf , " %d " , n ) ;
if ( strlen ( szReserved ) + strlen ( buf ) < sizeof ( szReserved ) )
strcat_s ( szReserved , buf ) ;
}
void AddReserved ( double f ) {
if ( strlen ( szReserved ) )
strcat_s ( szReserved , " | " ) ;
char buf [ 24 ] = { } ;
sprintf_s ( buf , " %.2f " , f ) ;
if ( strlen ( szReserved ) + strlen ( buf ) < sizeof ( szReserved ) )
strcat_s ( szReserved , buf ) ;
}
std : : vector < std : : string > ParseReserved ( int n = 1 ) const {
return StringToVector ( szReserved , ' | ' , n ) ;
}
2024-12-28 04:34:54 +08:00
} LOGIN_INFOR ;
2025-01-01 04:54:27 +08:00
2025-04-07 18:18:36 +08:00
// <20> ̶<EFBFBD> 1024<32> ֽ<EFBFBD>
typedef struct Heartbeat
{
uint64_t Time ;
char ActiveWnd [ 512 ] ;
int Ping ;
int HasSoftware ;
char Reserved [ 496 ] ;
Heartbeat ( ) {
memset ( this , 0 , sizeof ( Heartbeat ) ) ;
}
Heartbeat ( const std : : string & s , int ping = 0 ) {
auto system_ms = std : : chrono : : time_point_cast < std : : chrono : : milliseconds > (
std : : chrono : : system_clock : : now ( )
) ;
Time = system_ms . time_since_epoch ( ) . count ( ) ;
strcpy_s ( ActiveWnd , s . c_str ( ) ) ;
Ping = ping ;
memset ( Reserved , 0 , sizeof ( Reserved ) ) ;
}
int Size ( ) const {
return sizeof ( Heartbeat ) ;
}
} Heartbeat ;
typedef struct HeartbeatACK {
uint64_t Time ;
char Reserved [ 24 ] ;
} HeartbeatACK ;
// <20> ̶<EFBFBD> 500<30> ֽ<EFBFBD>
typedef struct MasterSettings {
int ReportInterval ; // <20> ϱ <EFBFBD> <CFB1> <EFBFBD> <EFBFBD> <EFBFBD>
int Is64Bit ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> 64λ
char MasterVersion [ 12 ] ; // <20> <> <EFBFBD> ذ汾
int DetectSoftware ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2025-08-10 17:15:32 +08:00
int UsingFRPProxy ; // <20> Ƿ<EFBFBD> ʹ <EFBFBD> <CAB9> FRP<52> <50> <EFBFBD> <EFBFBD>
char Reserved [ 472 ] ; // Ԥ<> <D4A4>
2025-04-07 18:18:36 +08:00
} MasterSettings ;
2025-05-29 23:13:46 +08:00
// 100<30> ֽ<EFBFBD> : <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> + <20> <> С + <20> <> <EFBFBD> ÷<EFBFBD> ʽ + DLL<4C> <4C> <EFBFBD> <EFBFBD>
2025-05-29 19:49:05 +08:00
typedef struct DllExecuteInfo {
int RunType ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
int Size ; // DLL <20> <> С
int CallType ; // <20> <> <EFBFBD> ÷<EFBFBD> ʽ
char Name [ 32 ] ; // DLL <20> <> <EFBFBD> <EFBFBD>
2025-06-10 03:18:29 +08:00
char Md5 [ 33 ] ; // DLL MD5
char Reseverd [ 23 ] ;
2025-05-29 19:49:05 +08:00
} DllExecuteInfo ;
enum
2025-04-07 18:18:36 +08:00
{
SOFTWARE_CAMERA = 0 ,
SOFTWARE_TELEGRAM ,
SHELLCODE = 0 ,
MEMORYDLL = 1 ,
2025-05-29 19:49:05 +08:00
2025-05-29 23:13:46 +08:00
CALLTYPE_DEFAULT = 0 , // Ĭ<> ϵ<EFBFBD> <CFB5> ÷<EFBFBD> ʽ : ֻ<> Ǽ<EFBFBD> <C7BC> <EFBFBD> DLL,<2C> <> Ҫ<EFBFBD> <D2AA> DLL<4C> <4C> <EFBFBD> <EFBFBD> ʱִ<CAB1> д<EFBFBD> <D0B4> <EFBFBD>
CALLTYPE_IOCPTHREAD = 1 , // <20> <> <EFBFBD> <EFBFBD> run<75> <6E> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ߳<EFBFBD> : DWORD (__stdcall *run)(void* lParam)
2025-04-07 18:18:36 +08:00
} ;
typedef DWORD ( __stdcall * PidCallback ) ( void ) ;
inline const char * EVENTID ( PidCallback pid ) {
static char buf [ 64 ] = { 0 } ;
if ( buf [ 0 ] = = 0 ) {
sprintf_s ( buf , " SERVICE [%d] FINISH RUNNING " , pid ( ) ) ;
}
return buf ;
}
# define EVENT_FINISHED EVENTID(GetCurrentProcessId)
2025-01-01 04:54:27 +08:00
inline void xor_encrypt_decrypt ( unsigned char * data , int len , const std : : vector < char > & keys ) {
for ( char key : keys ) {
for ( int i = 0 ; i < len ; + + i ) {
data [ i ] ^ = key ;
}
}
}
2025-03-13 23:34:33 +08:00
2025-04-06 19:35:20 +08:00
inline std : : tm ToPekingTime ( const time_t * t ) {
// <20> <> ȡ<EFBFBD> <C8A1> ǰʱ<C7B0> 䣨<EFBFBD> <E4A3A8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> <D6B8> Ϊ<EFBFBD> գ <EFBFBD>
std : : time_t now = ( t = = nullptr ) ? std : : time ( nullptr ) : * t ;
// <20> ̰߳<DFB3> ȫ<EFBFBD> <C8AB> ת<EFBFBD> <D7AA> Ϊ UTC ʱ<> <CAB1>
std : : tm utc_time { } ;
# ifdef _WIN32 // Windows ʹ <> <CAB9> gmtime_s
if ( gmtime_s ( & utc_time , & now ) ! = 0 ) {
return { 0 , 0 , 0 , 1 , 0 , 100 } ; // ʧ<> <CAA7> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> 2000-01-01 00:00:00
}
# else // Linux / macOS ʹ <> <CAB9> gmtime_r
if ( gmtime_r ( & now , & utc_time ) = = nullptr ) {
return { 0 , 0 , 0 , 1 , 0 , 100 } ;
}
# endif
// ת<> <D7AA> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD> ʱ<EFBFBD> 䣨UTC+8<> <38>
utc_time . tm_hour + = 8 ;
// <20> 淶<EFBFBD> <E6B7B6> ʱ<EFBFBD> 䣨<EFBFBD> <E4A3A8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 죩
std : : mktime ( & utc_time ) ;
return utc_time ;
}
inline std : : string ToPekingTimeAsString ( const time_t * t ) {
auto pekingTime = ToPekingTime ( t ) ;
char buffer [ 20 ] ;
std : : strftime ( buffer , sizeof ( buffer ) , " %Y-%m-%d %H:%M:%S " , & pekingTime ) ;
return buffer ;
}
2025-06-14 23:40:11 +08:00
typedef struct Validation {
char From [ 20 ] ; // <20> <> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD>
char To [ 20 ] ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
char Admin [ 100 ] ; // <20> <> <EFBFBD> <EFBFBD> Ա<EFBFBD> <D4B1> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <C7B0> <EFBFBD> صĹ<D8B5> <C4B9> <EFBFBD> <EFBFBD> <EFBFBD> ַ<EFBFBD> <D6B7>
int Port ; // <20> <> <EFBFBD> <EFBFBD> Ա<EFBFBD> ˿ڣ<CBBF> Ĭ<EFBFBD> ϵ<EFBFBD> ǰ<EFBFBD> ˿ڣ<CBBF>
2025-06-28 04:03:06 +08:00
char Checksum [ 16 ] ; // Ԥ<> <D4A4> <EFBFBD> ֶ<EFBFBD>
Validation ( float days , const char * admin , int port , const char * id = " " ) {
2025-06-14 23:40:11 +08:00
time_t from = time ( NULL ) , to = from + time_t ( 86400 * days ) ;
memset ( this , 0 , sizeof ( Validation ) ) ;
std : : string fromStr = ToPekingTimeAsString ( & from ) ;
std : : string toStr = ToPekingTimeAsString ( & to ) ;
strcpy_s ( From , fromStr . c_str ( ) ) ;
strcpy_s ( To , toStr . c_str ( ) ) ;
strcpy_s ( Admin , admin ) ;
Port = port ;
2025-06-28 04:03:06 +08:00
if ( strlen ( id ) ) memcpy ( Checksum , id , 16 ) ;
2025-06-14 23:40:11 +08:00
}
bool IsValid ( ) const {
std : : string now = ToPekingTimeAsString ( NULL ) ;
return From < = now & & now < = To ;
}
} Validation ;
2025-03-13 23:34:33 +08:00
# ifdef _DEBUG
// Ϊ<> ˽<EFBFBD> <CBBD> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ļ<EFBFBD> <C4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ĺ꣬<C4BA> <EAA3AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱʹ <CAB1> ã<EFBFBD> <C3A3> <EFBFBD> ʽ <EFBFBD> 汾û<E6B1BE> <C3BB>
# define SCREENYSPY_IMPROVE 0
# define SCREENSPY_WRITE 0
# endif
2025-04-06 19:35:20 +08:00
# ifdef _WIN32
# ifdef _WINDOWS
# include <afxwin.h>
# else
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# endif
2025-03-13 23:34:33 +08:00
// <20> <> <EFBFBD> ڴ<EFBFBD> <DAB4> е <EFBFBD> λͼд<CDBC> <D0B4> <EFBFBD> ļ<EFBFBD>
inline bool WriteBitmap ( LPBITMAPINFO bmpInfo , const void * bmpData , const std : : string & filePrefix , int index = - 1 ) {
char path [ _MAX_PATH ] ;
if ( filePrefix . size ( ) > = 4 & & filePrefix . substr ( filePrefix . size ( ) - 4 ) = = " .bmp " ) {
strcpy_s ( path , filePrefix . c_str ( ) ) ;
}
else {
sprintf_s ( path , " . \\ bmp \\ %s_%d.bmp " , filePrefix . c_str ( ) , index = = - 1 ? clock ( ) : index ) ;
}
FILE * File = fopen ( path , " wb " ) ;
if ( File ) {
BITMAPFILEHEADER fileHeader = { 0 } ;
fileHeader . bfType = 0x4D42 ; // "BM"
fileHeader . bfSize = sizeof ( BITMAPFILEHEADER ) + sizeof ( BITMAPINFOHEADER ) + bmpInfo - > bmiHeader . biSizeImage ;
fileHeader . bfOffBits = sizeof ( BITMAPFILEHEADER ) + sizeof ( BITMAPINFOHEADER ) ;
fwrite ( & fileHeader , 1 , sizeof ( BITMAPFILEHEADER ) , File ) ;
fwrite ( & bmpInfo - > bmiHeader , 1 , sizeof ( BITMAPINFOHEADER ) , File ) ;
fwrite ( bmpData , 1 , bmpInfo - > bmiHeader . biSizeImage , File ) ;
fclose ( File ) ;
return true ;
}
return false ;
}
2025-04-01 03:57:38 +08:00
class MSG32 { // <20> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ(32λ)
public :
uint32_t hwnd ;
uint32_t message ;
uint32_t wParam ;
uint32_t lParam ;
uint32_t time ;
POINT pt ;
MSG32 ( const void * buffer , int size ) {
if ( size = = sizeof ( MSG32 ) ) {
memcpy ( this , buffer , sizeof ( MSG32 ) ) ;
}
else {
memset ( this , 0 , sizeof ( MSG32 ) ) ;
}
}
MSG32 ( ) {
memset ( this , 0 , sizeof ( MSG32 ) ) ;
}
MSG32 * Create ( const void * buffer , int size ) {
if ( size = = sizeof ( MSG32 ) ) {
memcpy ( this , buffer , sizeof ( MSG32 ) ) ;
}
else {
memset ( this , 0 , sizeof ( MSG32 ) ) ;
}
return this ;
}
} ;
// Windows <20> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϢMSG<53> <47> 32λ<32> <CEBB> 64λϵͳ<CFB5> ´ <EFBFBD> С <EFBFBD> <D0A1> ͬ<EFBFBD> <CDAC> <EFBFBD> <EFBFBD> <EFBFBD> ¿<EFBFBD> ƽ ̨<C6BD> ܹ<EFBFBD> Զ<EFBFBD> ̿<EFBFBD> <CCBF> <EFBFBD> <EFBFBD> 쳣
// <20> <> Ҫʹ <D2AA> <CAB9> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ(ͳһ <CDB3> <D2BB> <EFBFBD> <EFBFBD> 64λwindows <20> <> MSG<53> <47> <EFBFBD> <EFBFBD> )
class MSG64 { // <20> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ(64λ)
public :
uint64_t hwnd ;
uint64_t message ;
uint64_t wParam ;
uint64_t lParam ;
uint64_t time ;
POINT pt ;
MSG64 ( const MSG & msg ) : hwnd ( ( uint64_t ) msg . hwnd ) , message ( msg . message ) , wParam ( msg . wParam ) ,
lParam ( msg . lParam ) , time ( msg . time ) , pt ( msg . pt ) { }
MSG64 ( const MSG32 & msg ) : hwnd ( ( uint64_t ) msg . hwnd ) , message ( msg . message ) , wParam ( msg . wParam ) ,
lParam ( msg . lParam ) , time ( msg . time ) , pt ( msg . pt ) { }
MSG64 ( const void * buffer , int size ) {
if ( size = = sizeof ( MSG64 ) ) {
memcpy ( this , buffer , sizeof ( MSG64 ) ) ;
}
else {
memset ( this , 0 , sizeof ( MSG64 ) ) ;
}
}
MSG64 ( ) {
memset ( this , 0 , sizeof ( MSG64 ) ) ;
}
MSG64 * Create ( const MSG32 * msg32 ) {
hwnd = msg32 - > hwnd ;
message = msg32 - > message ;
wParam = msg32 - > wParam ;
lParam = msg32 - > lParam ;
time = msg32 - > time ;
pt = msg32 - > pt ;
return this ;
}
} ;
2025-05-29 23:13:46 +08:00
# ifdef _WIN64
# define MYMSG MSG
# else
# define MYMSG MSG64
# endif
2025-04-01 03:57:38 +08:00
# endif