Update private master program code

This commit is contained in:
yuanyuanxiang
2025-06-08 15:38:41 +08:00
parent 15e03bd18a
commit 46f7dc1790
40 changed files with 5380 additions and 435 deletions

View File

@@ -66,6 +66,8 @@ CMy2015RemoteApp::CMy2015RemoteApp()
m_Mutex = NULL;
m_iocpServer = new IOCPServer();
srand(static_cast<unsigned int>(time(0)));
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -222,7 +222,8 @@ public:
afx_msg LRESULT OnOpenVideoDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnHandleMessage(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenKeyboardDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenHideScreenDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenMachineManagerDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenProxyDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT UPXProcResult(WPARAM wParam, LPARAM lParam);
afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo);

View File

@@ -75,21 +75,21 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter;$(ProjectDir);$(SolutionDir)common;$(IncludePath)</IncludePath>
<LibraryPath>$(VLDPATH)\lib\Win32\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter\lib;$(SolutionDir);$(LibraryPath)</LibraryPath>
<LibraryPath>$(VLDPATH)\lib\Win32\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter\lib;$(SolutionDir);$(SolutionDir)..\SimpleRemoter;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter;$(ProjectDir);$(SolutionDir)common;$(IncludePath)</IncludePath>
<LibraryPath>$(VLDPATH)\lib\Win64\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter\lib;$(SolutionDir);$(LibraryPath)</LibraryPath>
<LibraryPath>$(VLDPATH)\lib\Win64\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter\lib;$(SolutionDir);$(SolutionDir)..\SimpleRemoter;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<LibraryPath>$(VLDPATH)\lib\Win32\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter\lib;$(SolutionDir);$(LibraryPath)</LibraryPath>
<LibraryPath>$(VLDPATH)\lib\Win32\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter\lib;$(SolutionDir);$(SolutionDir)..\SimpleRemoter;$(LibraryPath)</LibraryPath>
<IncludePath>$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter;$(ProjectDir);$(SolutionDir)common;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<LibraryPath>$(VLDPATH)\lib\Win64\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter\lib;$(SolutionDir);$(LibraryPath)</LibraryPath>
<LibraryPath>$(VLDPATH)\lib\Win64\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter\lib;$(SolutionDir);$(SolutionDir)..\SimpleRemoter;$(LibraryPath)</LibraryPath>
<IncludePath>$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(SolutionDir)..\SimpleRemoter\compress;$(SolutionDir)..\SimpleRemoter;$(ProjectDir);$(SolutionDir)common;$(IncludePath)</IncludePath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -97,10 +97,11 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;HPSOCKET_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;HPSOCKET_STATIC_LIB;CBC;_WIN32_WINNT=0x0602;WINVER=0x0602;NTDDI_VERSION=0x06020000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OpenMPSupport>false</OpenMPSupport>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -108,6 +109,7 @@
<AdditionalDependencies>zlib\zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<OutputFile>$(SolutionDir)Bin\$(TargetName)_x86d$(TargetExt)</OutputFile>
<ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
@@ -125,10 +127,11 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;HPSOCKET_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;HPSOCKET_STATIC_LIB;CBC;_WIN32_WINNT=0x0602;WINVER=0x0602;NTDDI_VERSION=0x06020000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OpenMPSupport>false</OpenMPSupport>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -153,11 +156,12 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MinSpace</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;HPSOCKET_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;HPSOCKET_STATIC_LIB;CBC;_WIN32_WINNT=0x0602;WINVER=0x0602;NTDDI_VERSION=0x06020000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<StringPooling>true</StringPooling>
<AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OpenMPSupport>false</OpenMPSupport>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -185,11 +189,12 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MinSpace</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;HPSOCKET_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;HPSOCKET_STATIC_LIB;CBC;_WIN32_WINNT=0x0602;WINVER=0x0602;NTDDI_VERSION=0x06020000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<StringPooling>true</StringPooling>
<AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OpenMPSupport>false</OpenMPSupport>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -243,6 +248,8 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\client\Audio.h" />
<ClInclude Include="..\..\common\aes.h" />
<ClInclude Include="..\..\common\encrypt.h" />
<ClInclude Include="2015Remote.h" />
<ClInclude Include="2015RemoteDlg.h" />
<ClInclude Include="AudioDlg.h" />
@@ -250,10 +257,12 @@
<ClInclude Include="BuildDlg.h" />
<ClInclude Include="CPasswordDlg.h" />
<ClInclude Include="CpuUseage.h" />
<ClInclude Include="CTextDlg.h" />
<ClInclude Include="DateVerify.h" />
<ClInclude Include="EditDialog.h" />
<ClInclude Include="FileManagerDlg.h" />
<ClInclude Include="FileTransferModeDlg.h" />
<ClInclude Include="HideScreenSpyDlg.h" />
<ClInclude Include="iniFile.h" />
<ClInclude Include="InputDlg.h" />
<ClInclude Include="IOCPServer.h" />
@@ -273,6 +282,10 @@
<ClInclude Include="ShellDlg.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="SystemDlg.h" />
<ClInclude Include="sys\CCreateTaskDlg.h" />
<ClInclude Include="sys\CInjectCodeDlg.h" />
<ClInclude Include="sys\MachineDlg.h" />
<ClInclude Include="sys\ServiceInfoDlg.h" />
<ClInclude Include="TalkDlg.h" />
<ClInclude Include="targetver.h" />
<ClInclude Include="TrueColorToolBar.h" />
@@ -282,11 +295,11 @@
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\client\Audio.cpp" />
<ClCompile Include="..\..\client\Loader.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
<ClCompile Include="..\..\common\aes.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="2015Remote.cpp" />
<ClCompile Include="2015RemoteDlg.cpp" />
@@ -295,13 +308,21 @@
<ClCompile Include="BuildDlg.cpp" />
<ClCompile Include="CPasswordDlg.cpp" />
<ClCompile Include="CpuUseage.cpp" />
<ClCompile Include="CTextDlg.cpp" />
<ClCompile Include="EditDialog.cpp" />
<ClCompile Include="FileManagerDlg.cpp" />
<ClCompile Include="FileTransferModeDlg.cpp" />
<ClCompile Include="HideScreenSpyDlg.cpp" />
<ClCompile Include="iniFile.cpp" />
<ClCompile Include="InputDlg.cpp" />
<ClCompile Include="IOCPServer.cpp" />
<ClCompile Include="KeyBoardDlg.cpp" />
<ClCompile Include="Loader.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="parse_ip.cpp" />
<ClCompile Include="proxy\ProxyConnectServer.cpp" />
<ClCompile Include="proxy\ProxyMapDlg.cpp" />
@@ -318,6 +339,10 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="SystemDlg.cpp" />
<ClCompile Include="sys\CCreateTaskDlg.cpp" />
<ClCompile Include="sys\CInjectCodeDlg.cpp" />
<ClCompile Include="sys\MachineDlg.cpp" />
<ClCompile Include="sys\ServiceInfoDlg.cpp" />
<ClCompile Include="TalkDlg.cpp" />
<ClCompile Include="TrueColorToolBar.cpp" />
<ClCompile Include="VideoDlg.cpp" />
@@ -335,10 +360,14 @@
<Image Include="res\Bitmap_4.bmp" />
<Image Include="res\Bitmap_5.bmp" />
<Image Include="res\delete.bmp" />
<Image Include="res\icon2.ico" />
<Image Include="res\keyboard.ico" />
<Image Include="res\machine.ico" />
<Image Include="res\password.ico" />
<Image Include="res\proxifler.ico" />
<Image Include="res\proxy.ico" />
<Image Include="res\screen.ico" />
<Image Include="res\system.ico" />
<Image Include="res\toolbar1.bmp" />
<Image Include="res\toolbar2.bmp" />
<Image Include="res\update.bmp" />

View File

@@ -47,7 +47,7 @@ ULONG CBuffer::RemoveCompletedBuffer(ULONG ulLength)
if (ulLength)
{
MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength); //<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0> [Shinexxxx??]
MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength);
m_Ptr -= ulLength;
}
@@ -126,7 +126,7 @@ BOOL CBuffer::WriteBuffer(PBYTE Buffer, ULONG ulLength)
return false;
}
CopyMemory(m_Ptr,Buffer,ulLength);//Hello 5
CopyMemory(m_Ptr,Buffer,ulLength);
m_Ptr+=ulLength;
LeaveCriticalSection(&m_cs);

View File

@@ -7,6 +7,8 @@ class Buffer {
private:
PBYTE buf;
ULONG len;
ULONG padding;
std::string md5;
ULONG *ref;
void AddRef() {
(*ref)++;
@@ -30,10 +32,11 @@ public:
ref = NULL;
}
}
Buffer():buf(NULL), len(0), ref(new ULONG(1)) {
Buffer():buf(NULL), len(0), ref(new ULONG(1)), padding(0) {
}
Buffer(const BYTE * b, int n):len(n), ref(new ULONG(1)){
Buffer(const BYTE * b, int n, int padding=0, const std::string& md5="") :
len(n), ref(new ULONG(1)), padding(padding), md5(md5){
buf = new BYTE[n];
memcpy(buf, b, n);
}
@@ -53,8 +56,11 @@ public:
char* c_str() const {
return (char*)buf;
}
ULONG length()const {
return len;
ULONG length(bool noPadding=false)const {
return noPadding ? len - padding : len;
}
std::string MD5() const {
return md5;
}
};
@@ -66,10 +72,11 @@ public:
ULONG ReadBuffer(PBYTE Buffer, ULONG ulLength);
ULONG GetBufferLength(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
ULONG GetBufferLen() { return GetBufferLength(); }
VOID ClearBuffer();
BOOL WriteBuffer(PBYTE Buffer, ULONG ulLength);
BOOL Write(PBYTE Buffer, ULONG ulLength) { return WriteBuffer(Buffer, ulLength); }
LPBYTE GetBuffer(ULONG ulPos);
LPBYTE GetBuffer(ULONG ulPos=0);
Buffer GetMyBuffer(ULONG ulPos);
BYTE GetBYTE(ULONG ulPos);
BOOL CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos);

View File

@@ -144,7 +144,7 @@ void CBuildDlg::OnBnClickedOk()
return;
}
//////////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ//////////////////////
CONNECT_ADDRESS g_ConnectAddress = { FLAG_FINDEN, "127.0.0.1", "", typ, false, DLL_VERSION, 0, startup };
CONNECT_ADDRESS g_ConnectAddress = { FLAG_FINDEN, "127.0.0.1", "", typ, false, DLL_VERSION, 0, startup, HeaderEncV1 };
g_ConnectAddress.SetServer(m_strIP, atoi(m_strPort));
if (!g_ConnectAddress.IsValid()) {

View File

@@ -0,0 +1,51 @@
// CTextDlg.cpp: ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
//
#include "stdafx.h"
#include "2015Remote.h"
#include "CTextDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CTextDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
IMPLEMENT_DYNAMIC(CTextDlg, CDialog)
CTextDlg::CTextDlg(CWnd* pParent /*=nullptr*/)
: CDialog(IDD_TEXT, pParent)
, nowstr(_T(""))
, cmeline(_T(""))
, oldstr(_T(""))
{
}
CTextDlg::~CTextDlg()
{
}
void CTextDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, oldstr);
DDX_Text(pDX, IDC_EDIT2, nowstr);
DDX_Text(pDX, IDC_EDIT3, cmeline);
}
BEGIN_MESSAGE_MAP(CTextDlg, CDialog)
ON_BN_CLICKED(IDOK, &CTextDlg::OnBnClickedOk)
END_MESSAGE_MAP()
// CTextDlg <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CTextDlg::OnBnClickedOk()
{
UpdateData(TRUE);
CDialog::OnOK();
}

View File

@@ -0,0 +1,27 @@
#pragma once
// CTextDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
class CTextDlg : public CDialog
{
DECLARE_DYNAMIC(CTextDlg)
public:
CTextDlg(CWnd* pParent = nullptr); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CTextDlg();
CString oldstr;
CString nowstr;
CString cmeline;
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_TEXT };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
};

View File

@@ -0,0 +1,927 @@
// ScreenSpyDlg.cpp : implementation file
//
#include "stdafx.h"
#include "2015Remote.h"
#include "InputDlg.h"
#include "CTextDlg.h"
#include "HideScreenSpyDlg.h"
#include <windows.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
/////////////////////////////////////////////////////////////////////////////
// CHideScreenSpyDlg dialog
enum {
IDM_SET_FLUSH = 0x0010,
IDM_CONTROL,
IDM_SAVEDIB, // 保存图片
IDM_SAVEAVI_S, // 保存录像
IDM_GET_CLIPBOARD, // 获取剪贴板
IDM_SET_CLIPBOARD, // 设置剪贴板
IDM_SETSCERRN, // 修改分辨率
IDM_QUALITY60, // 清晰度低
IDM_QUALITY85, // 清晰度中
IDM_QUALITY100, // 清晰度高
IDM_FPS_1,
IDM_FPS_5,
IDM_FPS_10,
IDM_FPS_15,
IDM_FPS_20,
IDM_FPS_25,
IDM_FPS_30,
};
IMPLEMENT_DYNAMIC(CHideScreenSpyDlg, CDialog)
CHideScreenSpyDlg::CHideScreenSpyDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext)
: DialogBase(CHideScreenSpyDlg::IDD, pParent, pIOCPServer, pContext, 0)
{
m_iocpServer = pIOCPServer;
m_ContextObject = pContext;
m_bIsFirst = true; // 如果是第一次打开对话框,显示提示等待信息
m_BitmapData_Full = NULL;
m_lpvRectBits = NULL;
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SCREENSYP));
m_IPAddress = m_ContextObject->GetPeerName().c_str();
UINT nBISize = m_ContextObject->GetBufferLength() - 1;
m_BitmapInfor_Full = (BITMAPINFO*) new BYTE[nBISize];
m_lpbmi_rect = (BITMAPINFO*) new BYTE[nBISize];
memcpy(m_BitmapInfor_Full, m_ContextObject->GetBuffer(1), nBISize);
memcpy(m_lpbmi_rect, m_ContextObject->GetBuffer(1), nBISize);
m_bIsCtrl = true;
m_bIsClosed = FALSE;
m_ClientCursorPos = {};
m_bCursorIndex = -1;
}
CHideScreenSpyDlg::~CHideScreenSpyDlg() {
m_bIsClosed = TRUE;
m_iocpServer->Disconnect(m_ContextObject);
DestroyIcon(m_hIcon);
Sleep(200);
if (!m_aviFile.IsEmpty()) {
KillTimer(132);
m_aviFile = "";
m_aviStream.Close();
}
::ReleaseDC(m_hWnd, m_hFullDC);
DeleteDC(m_hFullMemDC);
DeleteObject(m_BitmapHandle);
SAFE_DELETE_ARRAY(m_lpvRectBits);
SAFE_DELETE_ARRAY(m_BitmapInfor_Full);
SAFE_DELETE_ARRAY(m_lpbmi_rect);
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)LoadCursor(NULL, IDC_ARROW));
m_bIsCtrl = false;
}
void CHideScreenSpyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CHideScreenSpyDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_SIZE()
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_CLOSE()
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHideScreenSpyDlg message handlers
void CHideScreenSpyDlg::OnClose()
{
m_ContextObject->CancelIO();
CDialogBase::OnClose();
}
void CHideScreenSpyDlg::OnReceiveComplete()
{
if (m_bIsClosed) return;
switch (m_ContextObject->GetBuffer(0)[0]) {
case TOKEN_FIRSTSCREEN: {
m_bIsFirst = false;
DrawFirstScreen(m_ContextObject->GetBuffer(1), m_ContextObject->GetBufferLength()-1);
}
break;
case TOKEN_NEXTSCREEN: {
DrawNextScreenDiff(m_ContextObject->GetBuffer(0), m_ContextObject->GetBufferLength());
break;
}
case TOKEN_BITMAPINFO_HIDE:
ResetScreen();
break;
case TOKEN_CLIPBOARD_TEXT:
UpdateServerClipboard((char*)m_ContextObject->GetBuffer(1), m_ContextObject->GetBufferLength() - 1);
break;
case TOKEN_SCREEN_SIZE:
memcpy(&m_rect, m_ContextObject->GetBuffer(0) + 1, sizeof(RECT));
return;
default:
Mprintf("Unknown command: %d\n", (int)m_ContextObject->GetBuffer(0)[0]);
return;
}
}
bool CHideScreenSpyDlg::SaveSnapshot()
{
CString strFileName = m_IPAddress + CTime::GetCurrentTime().Format(_T("_%Y-%m-%d_%H-%M-%S.bmp"));
CFileDialog dlg(FALSE, _T("bmp"), strFileName, OFN_OVERWRITEPROMPT, _T("位图文件(*.bmp)|*.bmp|"), this);
if (dlg.DoModal() != IDOK)
return false;
BITMAPFILEHEADER hdr;
LPBITMAPINFO lpbi = m_BitmapInfor_Full;
CFile file;
if (!file.Open(dlg.GetPathName(), CFile::modeWrite | CFile::modeCreate)) {
MessageBox(_T("文件保存失败:\n") + dlg.GetPathName());
return false;
}
// BITMAPINFO大小
int nbmiSize = sizeof(BITMAPINFOHEADER) + (lpbi->bmiHeader.biBitCount > 16 ? 1 : (1 << lpbi->bmiHeader.biBitCount)) * sizeof(RGBQUAD);
// Fill in the fields of the file header
hdr.bfType = ((WORD)('M' << 8) | 'B'); // is always "BM"
hdr.bfSize = lpbi->bmiHeader.biSizeImage + sizeof(hdr);
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
hdr.bfOffBits = sizeof(hdr) + nbmiSize;
// Write the file header
file.Write(&hdr, sizeof(hdr));
file.Write(lpbi, nbmiSize);
// Write the DIB header and the bits
file.Write(m_BitmapData_Full, lpbi->bmiHeader.biSizeImage);
file.Close();
return true;
}
BOOL CHideScreenSpyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString strString;
strString.Format("%s - 远程虚拟屏幕 %d×%d", m_IPAddress,
m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight);
SetWindowText(strString);
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)LoadCursor(NULL, IDC_NO));
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL) {
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_SET_FLUSH, _T("刷新(&F)"));
pSysMenu->AppendMenu(MF_STRING, IDM_CONTROL, _T("控制屏幕(&Y)"));
pSysMenu->AppendMenu(MF_STRING, IDM_SAVEDIB, _T("保存快照(&S)"));
pSysMenu->AppendMenu(MF_STRING, IDM_SAVEAVI_S, _T("保存录像(&A)"));
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_GET_CLIPBOARD, _T("获取剪贴板(&R)"));
pSysMenu->AppendMenu(MF_STRING, IDM_SET_CLIPBOARD, _T("设置剪贴板(&L)"));
pSysMenu->AppendMenu(MF_STRING, IDM_SETSCERRN, _T("修复分辨率(&G)"));
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_QUALITY60, _T("清晰度低60/100"));
pSysMenu->AppendMenu(MF_STRING, IDM_QUALITY85, _T("清晰度中85/100"));
pSysMenu->AppendMenu(MF_STRING, IDM_QUALITY100, _T("清晰度高100/100"));
pSysMenu->AppendMenu(MF_SEPARATOR);
/*
pSysMenu->AppendMenu(MF_STRING, IDM_FPS_1, _T("FPS-1"));
pSysMenu->AppendMenu(MF_STRING, IDM_FPS_5, _T("FPS-5"));
pSysMenu->AppendMenu(MF_STRING, IDM_FPS_10, _T("FPS-10"));
pSysMenu->AppendMenu(MF_STRING, IDM_FPS_15, _T("FPS-15"));
pSysMenu->AppendMenu(MF_STRING, IDM_FPS_20, _T("FPS-20"));
pSysMenu->AppendMenu(MF_STRING, IDM_FPS_25, _T("FPS-25"));
pSysMenu->AppendMenu(MF_STRING, IDM_FPS_30, _T("FPS-30"));
pSysMenu->AppendMenu(MF_SEPARATOR);
*/
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_Explorer, _T("打开-文件管理(&B)"));
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_run, _T("打开-运行(&H)"));
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_Powershell, _T("打开-Powershell(&N)"));
/*
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_Chrome, _T("打开-Chrome(&I)"));
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_Edge, _T("打开-Edge(&M)"));
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_Brave, _T("打开-Brave(&D)"));
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_Firefox, _T("打开-Firefox(&V)"));
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_Iexplore, _T("打开-Iexplore(&Z)"));
*/
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_zdy, _T("自定义CMD命令(&y)"));
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_zdy2, _T("高级自定义命令(&O)"));
pSysMenu->AppendMenu(MF_STRING, IDM_OPEN_close, _T("清理后台(&J)"));
pSysMenu->CheckMenuRadioItem(IDM_QUALITY60, IDM_QUALITY100, IDM_QUALITY85, MF_BYCOMMAND);
}
// TODO: Add extra initialization here
m_hRemoteCursor = LoadCursor(NULL, IDC_ARROW);
ICONINFO CursorInfo;
::GetIconInfo(m_hRemoteCursor, &CursorInfo);
pSysMenu->CheckMenuItem(IDM_CONTROL, m_bIsCtrl ? MF_CHECKED : MF_UNCHECKED);
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)m_hRemoteCursor);
if (CursorInfo.hbmMask != NULL)
::DeleteObject(CursorInfo.hbmMask);
if (CursorInfo.hbmColor != NULL)
::DeleteObject(CursorInfo.hbmColor);
// 初始化窗口大小结构
m_hFullDC = ::GetDC(m_hWnd);
m_hFullMemDC = CreateCompatibleDC(m_hFullDC);
m_BitmapHandle = CreateDIBSection(m_hFullDC, m_BitmapInfor_Full, DIB_RGB_COLORS, &m_BitmapData_Full, NULL, NULL);
m_lpvRectBits = new BYTE[m_lpbmi_rect->bmiHeader.biSizeImage];
SelectObject(m_hFullMemDC, m_BitmapHandle);
SetStretchBltMode(m_hFullDC, STRETCH_HALFTONE);
SetStretchBltMode(m_hFullMemDC, STRETCH_HALFTONE);
GetClientRect(&m_CRect);
ScreenToClient(m_CRect);
m_wZoom = ((double)m_BitmapInfor_Full->bmiHeader.biWidth) / ((double)(m_CRect.right - m_CRect.left));
m_hZoom = ((double)m_BitmapInfor_Full->bmiHeader.biHeight) / ((double)(m_CRect.bottom - m_CRect.top));
SetStretchBltMode(m_hFullDC, STRETCH_HALFTONE);
BYTE bBuff = COMMAND_NEXT;
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
#ifdef _DEBUG
// ShowWindow(SW_MINIMIZE);
#endif
m_strTip = CString("请等待......");
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CHideScreenSpyDlg::ResetScreen()
{
UINT nBISize = m_ContextObject->GetBufferLength() - 1;
if (m_BitmapInfor_Full != NULL) {
SAFE_DELETE_ARRAY(m_BitmapInfor_Full);
SAFE_DELETE_ARRAY(m_lpbmi_rect);
m_BitmapInfor_Full = (BITMAPINFO*) new BYTE[nBISize];
m_lpbmi_rect = (BITMAPINFO*) new BYTE[nBISize];
memcpy(m_BitmapInfor_Full, m_ContextObject->GetBuffer(1), nBISize);
memcpy(m_lpbmi_rect, m_ContextObject->GetBuffer(1), nBISize);
DeleteObject(m_BitmapHandle);
m_BitmapHandle = CreateDIBSection(m_hFullDC, m_BitmapInfor_Full, DIB_RGB_COLORS, &m_BitmapData_Full, NULL, NULL);
if (m_lpvRectBits) {
delete[] m_lpvRectBits;
m_lpvRectBits = new BYTE[m_lpbmi_rect->bmiHeader.biSizeImage];
}
SelectObject(m_hFullMemDC, m_BitmapHandle);
SetStretchBltMode(m_hFullDC, STRETCH_HALFTONE);
SetStretchBltMode(m_hFullMemDC, STRETCH_HALFTONE);
GetClientRect(&m_CRect);
ScreenToClient(m_CRect);
m_wZoom = ((double)m_BitmapInfor_Full->bmiHeader.biWidth) / ((double)(m_CRect.right - m_CRect.left));
m_hZoom = ((double)m_BitmapInfor_Full->bmiHeader.biHeight) / ((double)(m_CRect.bottom - m_CRect.top));
}
}
void CHideScreenSpyDlg::DrawFirstScreen(PBYTE pDeCompressionData, unsigned long destLen)
{
BYTE algorithm = pDeCompressionData[0];
LPVOID lpFirstScreen = pDeCompressionData + 1;
DWORD dwFirstLength = destLen - 1;
if (algorithm == ALGORITHM_HOME) {
if(dwFirstLength > 0)
JPG_BMP(m_BitmapInfor_Full->bmiHeader.biBitCount, lpFirstScreen, dwFirstLength, m_BitmapData_Full);
} else {
m_ContextObject->CopyBuffer(m_BitmapData_Full, m_BitmapInfor_Full->bmiHeader.biSizeImage, 1);
}
#if _DEBUG
DoPaint();
#else
PostMessage(WM_PAINT);
#endif
}
void CHideScreenSpyDlg::DrawNextScreenHome(PBYTE pDeCompressionData, unsigned long destLen)
{
if (!destLen) return;
// 根据鼠标是否移动和屏幕是否变化判断是否重绘鼠标, 防止鼠标闪烁
bool bIsReDraw = false;
int nHeadLength = 1; // 标识[1] + 算法[1]
LPVOID lpNextScreen = pDeCompressionData + nHeadLength;
DWORD dwNextLength = destLen - nHeadLength;
DWORD dwNextOffset = 0;
// 屏幕数据是否变化
while (dwNextOffset < dwNextLength) {
int* pinlen = (int*)((LPBYTE)lpNextScreen + dwNextOffset);
if (JPG_BMP(m_BitmapInfor_Full->bmiHeader.biBitCount, pinlen + 1, *pinlen, m_lpvRectBits)) {
bIsReDraw = true;
LPRECT lpChangedRect = (LPRECT)((LPBYTE)(pinlen + 1) + *pinlen);
int nChangedRectWidth = lpChangedRect->right - lpChangedRect->left;
int nChangedRectHeight = lpChangedRect->bottom - lpChangedRect->top;
m_lpbmi_rect->bmiHeader.biWidth = nChangedRectWidth;
m_lpbmi_rect->bmiHeader.biHeight = nChangedRectHeight;
m_lpbmi_rect->bmiHeader.biSizeImage = (((nChangedRectWidth * m_lpbmi_rect->bmiHeader.biBitCount + 31) & ~31) >> 3)
* nChangedRectHeight;
StretchDIBits(m_hFullMemDC, lpChangedRect->left, lpChangedRect->top, nChangedRectWidth, nChangedRectHeight,
0, 0, nChangedRectWidth, nChangedRectHeight, m_lpvRectBits, m_lpbmi_rect, DIB_RGB_COLORS, SRCCOPY);
dwNextOffset += sizeof(int) + *pinlen + sizeof(RECT);
}
}
if (bIsReDraw) {
DoPaint();
}
}
BOOL CHideScreenSpyDlg::ParseFrame(void) {
//该函数不是直接画到屏幕上,而是更新一下变化部分的屏幕数据然后调用
//OnPaint画上去
//根据鼠标是否移动和屏幕是否变化判断是否重绘鼠标,防止鼠标闪烁
BOOL bChange = FALSE;
const ULONG ulHeadLength = 1 + 1 + sizeof(POINT) + sizeof(BYTE); // 标识 + 算法 + 光标位置 + 光标类型索引
ULONG NextScreenLength = m_ContextObject->GetBufferLength() - ulHeadLength;
POINT OldClientCursorPos;
memcpy(&OldClientCursorPos, &m_ClientCursorPos, sizeof(POINT));
memcpy(&m_ClientCursorPos, m_ContextObject->GetBuffer(2), sizeof(POINT));
// 鼠标移动了
if (memcmp(&OldClientCursorPos, &m_ClientCursorPos, sizeof(POINT)) != 0) {
bChange = TRUE;
}
// 光标类型发生变化
BYTE bOldCursorIndex = m_bCursorIndex;
m_bCursorIndex = m_ContextObject->GetBYTE(2 + sizeof(POINT));
if (bOldCursorIndex != m_bCursorIndex) {
bChange = TRUE;
if (m_bIsCtrl)//替换指定窗口所属类的WNDCLASSEX结构
#ifdef _WIN64
SetClassLongPtrA(m_hWnd, GCLP_HCURSOR, (LONG)m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex));
#else
SetClassLongA(m_hWnd, GCL_HCURSOR, (LONG)m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex));
#endif
}
// 屏幕是否变化
if (NextScreenLength > 0) {
bChange = TRUE;
}
return bChange;
}
void CHideScreenSpyDlg::DrawNextScreenDiff(PBYTE pDeCompressionData, unsigned long destLen)
{
if (!destLen) return;
// 根据鼠标是否移动和屏幕是否变化判断是否重绘鼠标, 防止鼠标闪烁
BYTE algorithm = pDeCompressionData[1];
if (algorithm == ALGORITHM_HOME) {
return DrawNextScreenHome(pDeCompressionData + 1, destLen - 1);
}
bool bIsReDraw = ParseFrame();
bool keyFrame = false;
const ULONG ulHeadLength = 1 + 1 + sizeof(POINT) + sizeof(BYTE);
LPVOID FirstScreenData = m_BitmapData_Full;
LPVOID NextScreenData = m_ContextObject->GetBuffer(ulHeadLength);
ULONG NextScreenLength = NextScreenData ? m_ContextObject->GetBufferLength() - ulHeadLength : 0;
LPBYTE dst = (LPBYTE)FirstScreenData, p = (LPBYTE)NextScreenData;
if (keyFrame)
{
if (m_BitmapInfor_Full->bmiHeader.biSizeImage == NextScreenLength)
memcpy(dst, p, m_BitmapInfor_Full->bmiHeader.biSizeImage);
}
else if (0 != NextScreenLength) {
bIsReDraw = true;
for (LPBYTE end = p + NextScreenLength; p < end; ) {
ULONG ulCount = *(LPDWORD(p + sizeof(ULONG)));
if (algorithm == ALGORITHM_GRAY) {
LPBYTE p1 = dst + *(LPDWORD)p, p2 = p + 2 * sizeof(ULONG);
for (int i = 0; i < ulCount; ++i, p1 += 4)
memset(p1, *p2++, sizeof(DWORD));
}
else {
memcpy(dst + *(LPDWORD)p, p + 2 * sizeof(ULONG), ulCount);
}
p += 2 * sizeof(ULONG) + ulCount;
}
}
if (bIsReDraw)
{
DoPaint();
}
}
void CHideScreenSpyDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if (!IsWindowVisible())
return;
GetClientRect(&m_CRect);
ScreenToClient(m_CRect);
if (!m_bIsFirst) {
m_wZoom = ((double)m_BitmapInfor_Full->bmiHeader.biWidth) / ((double)(m_CRect.right - m_CRect.left));
m_hZoom = ((double)m_BitmapInfor_Full->bmiHeader.biHeight) / ((double)(m_CRect.bottom - m_CRect.top));
}
}
void CHideScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
CMenu* pSysMenu = GetSystemMenu(FALSE);
switch (nID) {
case SC_MAXIMIZE:
OnNcLButtonDblClk(HTCAPTION, NULL);
return;
case SC_MONITORPOWER: // 拦截显示器节电自动关闭的消息
return;
case SC_SCREENSAVE: // 拦截屏幕保护启动的消息
return;
case IDM_SET_FLUSH: {
BYTE bToken = COMMAND_FLUSH_HIDE;
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(bToken));
}
break;
case IDM_CONTROL: {
m_bIsCtrl = !m_bIsCtrl;
pSysMenu->CheckMenuItem(IDM_CONTROL, m_bIsCtrl ? MF_CHECKED : MF_UNCHECKED);
if (m_bIsCtrl) {
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)m_hRemoteCursor);
} else
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)LoadCursor(NULL, IDC_NO));
}
break;
case IDM_SAVEDIB:
SaveSnapshot();
break;
case IDM_SAVEAVI_S: {
if (pSysMenu->GetMenuState(IDM_SAVEAVI_S, MF_BYCOMMAND) & MF_CHECKED) {
KillTimer(132);
pSysMenu->CheckMenuItem(IDM_SAVEAVI_S, MF_UNCHECKED);
m_aviFile = "";
m_aviStream.Close();
return;
}
if (m_BitmapInfor_Full->bmiHeader.biBitCount <= 15) {
AfxMessageBox(_T("不支持16位及以下颜色录像!"));
return;
}
CString strFileName = m_IPAddress + CTime::GetCurrentTime().Format(_T("_%Y-%m-%d_%H-%M-%S.avi"));
CFileDialog dlg(FALSE, _T("avi"), strFileName, OFN_OVERWRITEPROMPT, _T("Video(*.avi)|*.avi|"), this);
if (dlg.DoModal() != IDOK)
return;
m_aviFile = dlg.GetPathName();
if (!m_aviStream.Open(m_hWnd, m_aviFile, m_BitmapInfor_Full)) {
m_aviFile = _T("");
MessageBox(_T("Create Video(*.avi) Failed:\n") + m_aviFile);
} else {
::SetTimer(m_hWnd, 132, 250, NULL);
pSysMenu->CheckMenuItem(IDM_SAVEAVI_S, MF_CHECKED);
}
}
break;
case IDM_GET_CLIPBOARD: { // 获取剪贴板
BYTE bToken = COMMAND_SCREEN_GET_CLIPBOARD;
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(bToken));
}
break;
case IDM_SET_CLIPBOARD: { // 设置剪贴板
SendServerClipboard();
}
break;
case IDM_SETSCERRN: {
BYTE bToken = COMMAND_SCREEN_SETSCREEN_HIDE;
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(bToken));
}
break;
case IDM_QUALITY60: { // 清晰度60
BYTE bToken = COMMAND_COMMAND_SCREENUALITY60_HIDE;
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(bToken));
pSysMenu->CheckMenuRadioItem(IDM_QUALITY60, IDM_QUALITY100, IDM_QUALITY60, MF_BYCOMMAND);
}
break;
case IDM_QUALITY85: { // 清晰度85
BYTE bToken = COMMAND_COMMAND_SCREENUALITY85_HIDE;
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(bToken));
pSysMenu->CheckMenuRadioItem(IDM_QUALITY60, IDM_QUALITY100, IDM_QUALITY85, MF_BYCOMMAND);
}
break;
case IDM_QUALITY100: { // 清晰度100
BYTE bToken = COMMAND_COMMAND_SCREENUALITY100_HIDE;
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(bToken));
pSysMenu->CheckMenuRadioItem(IDM_QUALITY60, IDM_QUALITY100, IDM_QUALITY100, MF_BYCOMMAND);
}
break;
case IDM_FPS_1:
pSysMenu->CheckMenuRadioItem(IDM_FPS_1, IDM_FPS_30, nID, MF_BYCOMMAND);
break;
case IDM_FPS_5:
case IDM_FPS_10:
case IDM_FPS_15:
case IDM_FPS_20:
case IDM_FPS_25:
case IDM_FPS_30:
pSysMenu->CheckMenuRadioItem(IDM_FPS_1, IDM_FPS_30, nID, MF_BYCOMMAND);
break;
case IDM_OPEN_Explorer: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_Explorer;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_run: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_run;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_Powershell: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_Powershell;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_Chrome: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_Chrome;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_Edge: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_Edge;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_Brave: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_Brave;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_Firefox: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_Firefox;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_Iexplore: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_Iexplore;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_ADD_1: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_ADD_1;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_ADD_2: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_ADD_2;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_ADD_3: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_ADD_3;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_ADD_4: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_ADD_4;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_zdy: {
EnableWindow(FALSE);
CInputDialog dlg(this);
dlg.Init(_T("自定义"), _T("请输入CMD命令:"));
if (dlg.DoModal() == IDOK && dlg.m_str.GetLength()) {
int nPacketLength = dlg.m_str.GetLength()*sizeof(TCHAR) + 3;
LPBYTE lpPacket = new BYTE[nPacketLength];
lpPacket[0] = COMMAND_HIDE_USER;
lpPacket[1] = IDM_OPEN_zdy;
memcpy(lpPacket + 2, dlg.m_str.GetBuffer(0), nPacketLength - 2);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
delete[] lpPacket;
}
EnableWindow(TRUE);
}
break;
case IDM_OPEN_zdy2: {
EnableWindow(FALSE);
CTextDlg dlg(this);
if (dlg.DoModal() == IDOK) {
ZdyCmd m_ZdyCmd = {};
_stprintf_s(m_ZdyCmd.oldpath, MAX_PATH,_T("%s"), dlg.oldstr.GetBuffer());
_stprintf_s(m_ZdyCmd.newpath, MAX_PATH, _T("%s"), dlg.nowstr.GetBuffer());
CString m_str = _T("\"");
m_str += _T("\"");
m_str += _T(" ");
m_str += _T("\"");
m_str += dlg.cmeline;
m_str += _T("\"");
_stprintf_s(m_ZdyCmd.cmdline, MAX_PATH, _T("%s"), m_str.GetBuffer());
int nPacketLength = sizeof(ZdyCmd) + 2;
LPBYTE lpPacket = new BYTE[nPacketLength];
lpPacket[0] = COMMAND_HIDE_USER;
lpPacket[1] = IDM_OPEN_zdy2;
memcpy(lpPacket + 2, &m_ZdyCmd, nPacketLength - 2);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
delete[] lpPacket;
}
EnableWindow(TRUE);
}
break;
case IDM_OPEN_360JS: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_360JS;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
break;
}
case IDM_OPEN_360AQ: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_360AQ;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
}
break;
case IDM_OPEN_360AQ2: {
BYTE bToken[2];
bToken[0] = COMMAND_HIDE_USER;
bToken[1] = IDM_OPEN_360AQ2;
m_iocpServer->Send2Client(m_ContextObject, bToken, 2);
break;
}
case IDM_OPEN_close: {
LPBYTE lpPacket = new BYTE;
lpPacket[0] = COMMAND_HIDE_CLEAR;
m_iocpServer->Send2Client(m_ContextObject, lpPacket, 1);
delete lpPacket;
}
break;
default:
CDialog::OnSysCommand(nID, lParam);
}
}
void CHideScreenSpyDlg::DrawTipString(CString str)
{
RECT rect;
GetClientRect(&rect);
COLORREF bgcol = RGB(0x00, 0x00, 0x00);
COLORREF oldbgcol = SetBkColor(m_hFullDC, bgcol);
COLORREF oldtxtcol = SetTextColor(m_hFullDC, RGB(0xff, 0x00, 0x00));
ExtTextOut(m_hFullDC, 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);
DrawText(m_hFullDC, str, -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
SetBkColor(m_hFullDC, oldbgcol);
SetTextColor(m_hFullDC, oldtxtcol);
}
BOOL CHideScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
{
if (m_bIsClosed)
return CDialog::PreTranslateMessage(pMsg);
switch (pMsg->message) {
case WM_ERASEBKGND:
return TRUE;
case WM_LBUTTONDOWN: case WM_LBUTTONUP: // 左键按下
case WM_RBUTTONDOWN: case WM_RBUTTONUP: // 右键按下
case WM_MBUTTONDOWN: case WM_MBUTTONUP: // 中键按下
case WM_LBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_MBUTTONDBLCLK: // 双击
case WM_MOUSEMOVE: case WM_MOUSEWHEEL: // 鼠标移动
{
// 此逻辑会丢弃所有 非左键拖拽 的鼠标移动消息(如纯移动或右键拖拽)
if (pMsg->message == WM_MOUSEMOVE && GetKeyState(VK_LBUTTON) >= 0)
break;
SendScaledMouseMessage(pMsg, true);
return TRUE;
}
case WM_CHAR: {
// 检查给定字符是否为控制字符
if (iswcntrl(static_cast<wint_t>(pMsg->wParam))) {
break;
}
SendScaledMouseMessage(pMsg);
return TRUE;
}
case WM_KEYDOWN: case WM_KEYUP: {
SendScaledMouseMessage(pMsg);
return TRUE;
}
}
// 屏蔽Enter和ESC关闭对话
if (pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN))
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
void CHideScreenSpyDlg::SendScaledMouseMessage(MSG* pMsg, bool makeLP) {
if (!m_bIsCtrl)
return;
MYMSG msg(*pMsg);
auto low = ((LONG)LOWORD(pMsg->lParam)) * m_wZoom;
auto high = ((LONG)HIWORD(pMsg->lParam)) * m_hZoom;
if(makeLP) msg.lParam = MAKELPARAM(low, high);
msg.pt.x = (int)(low + m_rect.left);
msg.pt.y = (int)(high + m_rect.top);
SendCommand(msg);
}
void CHideScreenSpyDlg::SendCommand(const MYMSG& pMsg)
{
if (!m_bIsCtrl) {
return;
}
LPBYTE lpData = new BYTE[sizeof(MYMSG) + 1];
lpData[0] = COMMAND_SCREEN_CONTROL;
memcpy(lpData + 1, &pMsg, sizeof(MYMSG));
m_iocpServer->Send2Client(m_ContextObject, lpData, sizeof(MYMSG) + 1);
SAFE_DELETE_ARRAY(lpData);
}
void CHideScreenSpyDlg::UpdateServerClipboard(char* buf, int len)
{
if (!::OpenClipboard(NULL))
return;
::EmptyClipboard();
HGLOBAL hglbCopy = GlobalAlloc(GMEM_MOVEABLE, len);
if (hglbCopy != NULL) {
// Lock the handle and copy the text to the buffer.
LPTSTR lptstrCopy = (LPTSTR)GlobalLock(hglbCopy);
memcpy(lptstrCopy, buf, len);
GlobalUnlock(hglbCopy); // Place the handle on the clipboard.
SetClipboardData(CF_TEXT, hglbCopy);
GlobalFree(hglbCopy);
}
CloseClipboard();
}
void CHideScreenSpyDlg::SendServerClipboard()
{
if (!::OpenClipboard(NULL))
return;
HGLOBAL hglb = GetClipboardData(CF_TEXT);
if (hglb == NULL) {
::CloseClipboard();
return;
}
int nPacketLen = GlobalSize(hglb) + 1;
LPSTR lpstr = (LPSTR)GlobalLock(hglb);
LPBYTE lpData = new BYTE[nPacketLen];
lpData[0] = COMMAND_SCREEN_SET_CLIPBOARD;
memcpy(lpData + 1, lpstr, nPacketLen - 1);
::GlobalUnlock(hglb);
::CloseClipboard();
m_iocpServer->Send2Client(m_ContextObject, lpData, nPacketLen);
delete[] lpData;
}
void CHideScreenSpyDlg::DoPaint()
{
if (m_bIsFirst) {
DrawTipString(m_strTip);
return;
}
if (m_bIsClosed) return;
StretchBlt(m_hFullDC, 0, 0, m_CRect.Width(), m_CRect.Height(), m_hFullMemDC, 0, 0, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight, SRCCOPY);
// Do not call CDialog::OnPaint() for painting messages
}
void CHideScreenSpyDlg::OnPaint()
{
CPaintDC dc(this);
if (m_bIsFirst) {
DrawTipString(m_strTip);
return;
}
if (m_bIsClosed) return;
StretchBlt(m_hFullDC, 0, 0, m_CRect.Width(), m_CRect.Height(), m_hFullMemDC, 0, 0, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight, SRCCOPY);
CDialog::OnPaint();
}
LRESULT CHideScreenSpyDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if (message == WM_POWERBROADCAST && wParam == PBT_APMQUERYSUSPEND) {
return BROADCAST_QUERY_DENY; // 拦截系统待机, 休眠的请求
}
if (message == WM_ACTIVATE && LOWORD(wParam) != WA_INACTIVE && !HIWORD(wParam)) {
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
return TRUE;
}
if (message == WM_ACTIVATE && LOWORD(wParam) == WA_INACTIVE) {
SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
return TRUE;
}
return CDialog::WindowProc(message, wParam, lParam);
}
void CHideScreenSpyDlg::OnTimer(UINT_PTR nIDEvent)
{
if (!m_aviFile.IsEmpty()) {
LPCTSTR lpTipsString = _T("");
m_aviStream.Write(m_BitmapData_Full);
// 提示正在录像
SetTextColor(m_hFullDC, RGB(0xff, 0x00, 0x00));
TextOut(m_hFullDC, 0, 0, lpTipsString, lstrlen(lpTipsString));
}
CDialog::OnTimer(nIDEvent);
}
bool CHideScreenSpyDlg::JPG_BMP(int cbit, void* input, int inlen, void* output)
{
struct jpeg_decompress_struct jds;
struct jpeg_error_mgr jem;
// 设置错误处理
jds.err = jpeg_std_error(&jem);
// 创建解压结构
jpeg_create_decompress(&jds);
// 设置读取(输入)位置
jpeg_mem_src(&jds, (byte*)input, inlen);
// 读取头部信息
if (jpeg_read_header(&jds, true) != JPEG_HEADER_OK) {
jpeg_destroy_decompress(&jds);
return false;
}
// 设置相关参数
switch (cbit) {
case 16:
jds.out_color_space = JCS_EXT_RGB;
break;
case 24:
jds.out_color_space = JCS_EXT_BGR;
break;
case 32:
jds.out_color_space = JCS_EXT_BGRA;
break;
default:
jpeg_destroy_decompress(&jds);
return false;
}
// 开始解压图像
if (!jpeg_start_decompress(&jds)) {
jpeg_destroy_decompress(&jds);
return false;
}
int line_stride = (jds.output_width * cbit / 8 + 3) / 4 * 4;
while (jds.output_scanline < jds.output_height) {
byte* pline = (byte*)output + jds.output_scanline * line_stride;
jpeg_read_scanlines(&jds, &pline, 1);
}
// 完成图像解压
if (!jpeg_finish_decompress(&jds)) {
jpeg_destroy_decompress(&jds);
return false;
}
// 释放相关资源
jpeg_destroy_decompress(&jds);
return true;
}

View File

@@ -0,0 +1,93 @@
#pragma once
#include "stdafx.h"
#include "../client/CursorInfo.h"
#include "../common/jpeglib.h"
#include "IOCPServer.h"
#include "VideoDlg.h"
#include "Resource.h"
/////////////////////////////////////////////////////////////////////////////
// CHideScreenSpyDlg dialog
#ifdef _WIN64
#ifdef _DEBUG
#pragma comment(lib, "jpeg\\turbojpeg_64_d.lib")
#else
#pragma comment(lib, "jpeg\\turbojpeg_64_r.lib")
#endif
#else
#ifdef _DEBUG
#pragma comment(lib, "jpeg\\turbojpeg_32_d.lib")
#else
#pragma comment(lib, "jpeg\\turbojpeg_32_r.lib")
#endif
#endif
class CHideScreenSpyDlg : public DialogBase {
DECLARE_DYNAMIC(CHideScreenSpyDlg)
enum { IDD = IDD_SCREEN };
public:
CHideScreenSpyDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL);
virtual ~CHideScreenSpyDlg();
VOID SendNext(void) {
BYTE bToken = COMMAND_NEXT;
m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
}
void OnReceiveComplete();
BOOL ParseFrame(void);
void DrawFirstScreen(PBYTE pDeCompressionData, unsigned long destLen);
void DrawNextScreenDiff(PBYTE pDeCompressionData, unsigned long destLen);
void DrawNextScreenHome(PBYTE pDeCompressionData, unsigned long destLen);
void DrawTipString(CString str);
void SendCommand(const MYMSG& pMsg);
void SendScaledMouseMessage(MSG* pMsg, bool makeLP = false);
void UpdateServerClipboard(char* buf, int len);
void SendServerClipboard(void);
bool SaveSnapshot(void);
virtual void DoDataExchange(CDataExchange* pDX);
virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnPaint();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnSize(UINT nType, int cx, int cy);
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
afx_msg void OnTimer(UINT_PTR nIDEvent);
DECLARE_MESSAGE_MAP()
protected:
void DoPaint();
bool JPG_BMP(int cbit, void* input, int inlen, void* output);
void ResetScreen();
HDC m_hFullDC, m_hFullMemDC;
HBITMAP m_BitmapHandle;
LPVOID m_BitmapData_Full;
LPBITMAPINFO m_BitmapInfor_Full;
HCURSOR m_hRemoteCursor;
CCursorInfo m_CursorInfo;
BOOL m_bIsFirst;
BOOL m_bIsCtrl;
POINT m_ClientCursorPos;
BYTE m_bCursorIndex;
CString m_strTip;
private:
CString m_aviFile;
CBmpToAvi m_aviStream;
CRect m_CRect;
RECT m_rect;
double m_wZoom;
double m_hZoom;
LPVOID m_lpvRectBits;
LPBITMAPINFO m_lpbmi_rect;
};

View File

@@ -34,6 +34,13 @@
#endif
#endif
// <20><><EFBFBD><EFBFBD> socket <20><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>IP<49><50>ַ.
std::string GetPeerName(SOCKET sock) {
sockaddr_in ClientAddr = {};
int ulClientAddrLen = sizeof(sockaddr_in);
int s = getpeername(sock, (SOCKADDR*)&ClientAddr, &ulClientAddrLen);
return s != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : "";
}
// <20><><EFBFBD><EFBFBD> socket <20><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>IP<49><50>ַ.
std::string GetRemoteIP(SOCKET sock) {
@@ -585,6 +592,7 @@ VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffe
return;
}
else if (ContextObject->CompressMethod == COMPRESS_NONE) {
Buffer tmp(szBuffer, ulOriginalLength); szBuffer = tmp.Buf();
ContextObject->WriteBuffer(szBuffer, ulOriginalLength, ulOriginalLength);
break;
}
@@ -717,7 +725,7 @@ void IOCPServer::OnAccept()
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>
PCONTEXT_OBJECT ContextObject = AllocateContext(); // Context
PCONTEXT_OBJECT ContextObject = AllocateContext(sClientSocket); // Context
if (ContextObject == NULL)
{
@@ -806,7 +814,7 @@ VOID IOCPServer::PostRecv(CONTEXT_OBJECT* ContextObject)
}
}
PCONTEXT_OBJECT IOCPServer::AllocateContext()
PCONTEXT_OBJECT IOCPServer::AllocateContext(SOCKET s)
{
PCONTEXT_OBJECT ContextObject = NULL;
@@ -820,7 +828,7 @@ PCONTEXT_OBJECT IOCPServer::AllocateContext()
if (ContextObject != NULL)
{
ContextObject->InitMember();
ContextObject->InitMember(s);
}
return ContextObject;

View File

@@ -1,5 +1,6 @@
#pragma once
#include "StdAfx.h"
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include "CpuUseage.h"
@@ -12,15 +13,15 @@
#endif
#include <Mstcpip.h>
#include "common/header.h"
#include "common/encrypt.h"
#define PACKET_LENGTH 0x2000
#define FLAG_LENGTH 5
#define HDR_LENGTH 13
#define NC_CLIENT_CONNECT 0x0001
#define NC_RECEIVE 0x0004
#define NC_RECEIVE_COMPLETE 0x0005 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::string GetPeerName(SOCKET sock);
std::string GetRemoteIP(SOCKET sock);
@@ -42,43 +43,6 @@ enum
ONLINELIST_MAX,
};
// Encoder interface. The default encoder will do nothing.
class Encoder {
public:
virtual ~Encoder(){}
// Encode data before compress.
virtual void Encode(unsigned char* data, int len) const{}
// Decode data after uncompress.
virtual void Decode(unsigned char* data, int len) const{}
};
// XOR Encoder implementation.
class XOREncoder : public Encoder {
private:
std::vector<char> Keys;
public:
XOREncoder(const std::vector<char>& keys = {0}) : Keys(keys){}
virtual void Encode(unsigned char* data, int len) const {
XOR(data, len, Keys);
}
virtual void Decode(unsigned char* data, int len) const {
static std::vector<char> reversed(Keys.rbegin(), Keys.rend());
XOR(data, len, reversed);
}
protected:
void XOR(unsigned char* data, int len, const std::vector<char> &keys) const {
for (char key : keys) {
for (int i = 0; i < len; ++i) {
data[i] ^= key;
}
}
}
};
enum {
PARSER_FAILED = -1, // <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
PARSER_NEEDMORE = 0, // <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -114,57 +78,75 @@ protected:
Reset();
}
PR Parse(CBuffer& buf, int &compressMethod) {
const int MinimumCount = 8;
const int MinimumCount = MIN_COMLEN;
if (buf.GetBufferLength() < MinimumCount) {
return PR{ PARSER_NEEDMORE };
}
char szPacketFlag[32] = { 0 };
buf.CopyBuffer(szPacketFlag, MinimumCount, 0);
HeaderEncType encTyp = HeaderEncUnknown;
FlagType flagType = CheckHead(szPacketFlag, encTyp);
if (flagType == FLAG_UNKNOWN) {
return PR{ PARSER_FAILED };
}
if (m_bParsed) { // Check if the header has been parsed.
return memcmp(m_szPacketFlag, szPacketFlag, m_nCompareLen) == 0 ? PR{ m_nFlagLen } : PR{ PARSER_FAILED };
}
// More version may be added in the future.
const char version0[] = "Shine", version1[] = "<<FUCK>>", version2[] = "Hello?", version3[] = "HELL";
if (memcmp(version0, szPacketFlag, sizeof(version0) - 1) == 0) {
memcpy(m_szPacketFlag, version0, sizeof(version0) - 1);
m_nCompareLen = strlen(m_szPacketFlag);
switch (m_nFlagType = flagType)
{
case FLAG_UNKNOWN:
return PR{ PARSER_FAILED };
case FLAG_SHINE:
memcpy(m_szPacketFlag, szPacketFlag, 5);
m_nCompareLen = 5;
m_nFlagLen = m_nCompareLen;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
m_Encoder = new Encoder();
}
else if (memcmp(version1, szPacketFlag, sizeof(version1) - 1) == 0) {
memcpy(m_szPacketFlag, version1, sizeof(version1) - 1);
m_nCompareLen = strlen(m_szPacketFlag);
m_Encoder2 = new Encoder();
break;
case FLAG_FUCK:
memcpy(m_szPacketFlag, szPacketFlag, 8);
m_nCompareLen = 8;
m_nFlagLen = m_nCompareLen + 3;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
m_Encoder = new XOREncoder();
}
else if (memcmp(version2, szPacketFlag, sizeof(version2) - 1) == 0) {
memcpy(m_szPacketFlag, version2, sizeof(version2) - 1);
m_nCompareLen = strlen(m_szPacketFlag);
m_Encoder2 = new Encoder();
break;
case FLAG_HELLO:
// This header is only for handling SOCKET_DLLLOADER command
memcpy(m_szPacketFlag, szPacketFlag, 8);
m_nCompareLen = 6;
m_nFlagLen = 8;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
compressMethod = COMPRESS_NONE;
m_Encoder = new Encoder();
}
else if (memcmp(version3, szPacketFlag, sizeof(version3) - 1) == 0) {
memcpy(m_szPacketFlag, version3, sizeof(version3) - 1);
m_nCompareLen = strlen(m_szPacketFlag);
m_nFlagLen = 8;
m_Encoder2 = new XOREncoder16();
break;
case FLAG_HELL:
// This version
memcpy(m_szPacketFlag, szPacketFlag, 8);
m_nCompareLen = FLAG_COMPLEN;
m_nFlagLen = FLAG_LENGTH;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
m_Encoder = new Encoder();
}
else {
return PR{ PARSER_FAILED };
m_Encoder2 = new XOREncoder16();
break;
default:
break;
}
return PR{ m_nFlagLen };
}
BOOL IsEncodeHeader() const {
return m_nFlagType == FLAG_HELLO || m_nFlagType == FLAG_HELL;
}
HeaderParser& Reset() {
SAFE_DELETE(m_Encoder);
SAFE_DELETE(m_Encoder2);
memset(this, 0, sizeof(HeaderParser));
return *this;
}
@@ -183,13 +165,18 @@ protected:
Encoder* GetEncoder() const {
return m_Encoder;
}
Encoder* GetEncoder2() const {
return m_Encoder2;
}
private:
BOOL m_bParsed; // <20><><EFBFBD>ݰ<EFBFBD><DDB0>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD>
int m_nHeaderLen; // <20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
int m_nCompareLen; // <20>ȶ<EFBFBD><C8B6>ֽ<EFBFBD><D6BD><EFBFBD>
int m_nFlagLen; // <20><>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
FlagType m_nFlagType; // <20><>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
char m_szPacketFlag[32]; // <20>Ա<EFBFBD><D4B1><EFBFBD>Ϣ
Encoder* m_Encoder; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Encoder* m_Encoder2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
};
enum IOType
@@ -219,13 +206,15 @@ typedef struct CONTEXT_OBJECT
BOOL m_bProxyConnected; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
BOOL bLogin; // <20>Ƿ<EFBFBD> login
std::string PeerName; // <20>Զ<EFBFBD>IP
VOID InitMember()
VOID InitMember(SOCKET s)
{
memset(szBuffer, 0, sizeof(char) * PACKET_LENGTH);
v1 = 0;
hDlg = NULL;
sClientSocket = INVALID_SOCKET;
sClientSocket = s;
PeerName = ::GetPeerName(sClientSocket);
memset(&wsaInBuf, 0, sizeof(WSABUF));
memset(&wsaOutBuffer, 0, sizeof(WSABUF));
olps = NULL;
@@ -243,16 +232,41 @@ typedef struct CONTEXT_OBJECT
sClientInfo[i] = s[i];
}
}
PBYTE GetBuffer(int offset) {
return InDeCompressedBuffer.GetBuffer(offset);
}
ULONG GetBufferLength() {
return InDeCompressedBuffer.GetBufferLength();
}
std::string GetPeerName() const {
return PeerName;
}
CString GetClientData(int index) const{
return sClientInfo[index];
}
void CancelIO() {
SAFE_CANCELIO(sClientSocket);
}
BOOL CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos) {
return InDeCompressedBuffer.CopyBuffer(pDst, nLen, ulPos);
}
BYTE GetBYTE(int offset) {
return InDeCompressedBuffer.GetBYTE(offset);
}
// Write compressed buffer.
void WriteBuffer(LPBYTE data, ULONG dataLen, ULONG originLen) {
if (Parser.IsParsed()) {
ULONG totalLen = dataLen + Parser.GetHeaderLen();
OutCompressedBuffer.WriteBuffer((LPBYTE)Parser.GetFlag(), Parser.GetFlagLen());
BYTE szPacketFlag[32] = {};
const int flagLen = Parser.GetFlagLen();
memcpy(szPacketFlag, Parser.GetFlag(), flagLen);
if (Parser.IsEncodeHeader())
encrypt(szPacketFlag, FLAG_COMPLEN, szPacketFlag[flagLen - 2]);
OutCompressedBuffer.WriteBuffer((LPBYTE)szPacketFlag, flagLen);
OutCompressedBuffer.WriteBuffer((PBYTE)&totalLen, sizeof(ULONG));
OutCompressedBuffer.WriteBuffer((PBYTE)&originLen, sizeof(ULONG));
InDeCompressedBuffer.CopyBuffer(szPacketFlag + flagLen, 16, 16);
Encode2(data, dataLen, szPacketFlag);
OutCompressedBuffer.WriteBuffer(data, dataLen);
}
}
@@ -260,13 +274,14 @@ typedef struct CONTEXT_OBJECT
PBYTE ReadBuffer(ULONG &dataLen, ULONG &originLen) {
if (Parser.IsParsed()) {
ULONG totalLen = 0;
char szPacketFlag[32] = {};
BYTE szPacketFlag[32] = {};
InCompressedBuffer.ReadBuffer((PBYTE)szPacketFlag, Parser.GetFlagLen());
InCompressedBuffer.ReadBuffer((PBYTE)&totalLen, sizeof(ULONG));
InCompressedBuffer.ReadBuffer((PBYTE)&originLen, sizeof(ULONG));
dataLen = totalLen - Parser.GetHeaderLen();
PBYTE CompressedBuffer = new BYTE[dataLen];
InCompressedBuffer.ReadBuffer(CompressedBuffer, dataLen);
Decode2(CompressedBuffer, dataLen, szPacketFlag);
return CompressedBuffer;
}
return nullptr;
@@ -283,6 +298,14 @@ typedef struct CONTEXT_OBJECT
void Decode(PBYTE data, int len) const {
Parser.GetEncoder()->Decode((unsigned char*)data, len);
}
// Encode data after compress.
void Encode2(PBYTE data, int len, PBYTE param) const {
Parser.GetEncoder2()->Encode((unsigned char*)data, len, param);
}
// Decode data before uncompress.
void Decode2(PBYTE data, int len, PBYTE param) const {
Parser.GetEncoder2()->Decode((unsigned char*)data, len, param);
}
std::string RemoteAddr() const {
sockaddr_in ClientAddr = {};
int ulClientAddrLen = sizeof(sockaddr_in);
@@ -346,7 +369,7 @@ public:
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
ContextObjectList m_ContextConnectionList;
ContextObjectList m_ContextFreePoolList;
PCONTEXT_OBJECT AllocateContext();
PCONTEXT_OBJECT AllocateContext(SOCKET s);
VOID RemoveStaleContext(CONTEXT_OBJECT* ContextObject);
VOID MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject);
@@ -369,6 +392,9 @@ public:
VOID Send(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
}
VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
}
BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompressedLength);
void UpdateMaxConnection(int maxConn);
IOCPServer(void);
@@ -417,3 +443,39 @@ typedef CONTEXT_OBJECT ClientContext;
#define m_Socket sClientSocket
#define m_DeCompressionBuffer InDeCompressedBuffer
// <20><><EFBFBD>ж<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ĶԻ<C4B6><D4BB><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>
class CDialogBase : public CDialog {
public:
CONTEXT_OBJECT* m_ContextObject;
IOCPServer* m_iocpServer;
CString m_IPAddress;
bool m_bIsClosed;
HICON m_hIcon;
CDialogBase(UINT nIDTemplate, CWnd* pParent, IOCPServer* pIOCPServer, CONTEXT_OBJECT* pContext, int nIcon) :
m_bIsClosed(false),
m_ContextObject(pContext),
m_iocpServer(pIOCPServer),
CDialog(nIDTemplate, pParent) {
sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr));
int nSockAddrLen = sizeof(sockaddr_in);
BOOL bResult = getpeername(m_ContextObject->sClientSocket, (SOCKADDR*)&sockAddr, &nSockAddrLen);
m_IPAddress = bResult != INVALID_SOCKET ? inet_ntoa(sockAddr.sin_addr) : "";
m_hIcon = nIcon > 0 ? LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(nIcon)) : NULL;
}
public:
virtual void OnReceiveComplete(void) = 0;
void OnClose() {
CDialog::OnClose();
m_bIsClosed = true;
#if CLOSE_DELETE_DLG
delete this;
#endif
}
};
typedef CDialogBase DialogBase;

267
server/2015Remote/Loader.c Normal file

File diff suppressed because one or more lines are too long

View File

@@ -108,7 +108,6 @@ VOID CShellDlg::AddKeyBoardData(void)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
//Hello>dir
//Shit\0
m_ContextObject->InDeCompressedBuffer.WriteBuffer((LPBYTE)"", 1); //<2F>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>\0
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(0);
@@ -130,8 +129,7 @@ VOID CShellDlg::AddKeyBoardData(void)
}
//<2F>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڵ<EFBFBD><DAB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
int iLength = m_Edit.GetWindowTextLength(); //kdfjdjfdir
//hello
int iLength = m_Edit.GetWindowTextLength(); //kdfjdjfdir
//1.txt
//2.txt
//dir\r\n
@@ -144,7 +142,7 @@ VOID CShellDlg::AddKeyBoardData(void)
//<2F><><EFBFBD>µõ<C2B5><C3B5>ַ<EFBFBD><D6B7>Ĵ<EFBFBD>С
m_nCurSel = m_Edit.GetWindowTextLength(); //Hello
m_nCurSel = m_Edit.GetWindowTextLength();
//<2F><><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Զ<EFBFBD><D4B6><EFBFBD>ն<EFBFBD>ʱ <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>س<EFBFBD>
//Ҫ<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD>Ҫ<EFBFBD><D2AA>PreTranslateMessage<67><65><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
@@ -229,7 +227,6 @@ BOOL CShellDlg::PreTranslateMessage(MSG* pMsg)
}
// ʾ<><CABE><EFBFBD><EFBFBD>
//dir\r\n 5
//hello\r\n 7
}
return CDialog::PreTranslateMessage(pMsg);

View File

@@ -408,7 +408,7 @@ void CSystemDlg::OnWlistRecover()
if (nItem>=0)
{
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]=CMD_WINDOW_TEST;
lpMsgBuf[0]= CMD_WINDOW_TEST;
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID;
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD>ʾ");
@@ -430,7 +430,7 @@ void CSystemDlg::OnWlistMax()
if (nItem>=0)
{
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]=CMD_WINDOW_TEST;
lpMsgBuf[0]= CMD_WINDOW_TEST;
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID;
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD>ʾ");
@@ -452,7 +452,7 @@ void CSystemDlg::OnWlistMin()
if (nItem>=0)
{
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]=CMD_WINDOW_TEST;
lpMsgBuf[0]= CMD_WINDOW_TEST;
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID;
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD>ʾ");

View File

@@ -17,6 +17,7 @@ public:
CBmpToAvi();
virtual ~CBmpToAvi();
bool Open(LPCTSTR szFile, LPBITMAPINFO lpbmi);
bool Open(HWND m_hWnd, LPCTSTR szFile, LPBITMAPINFO lpbmi, BOOL bIsWebCam = FALSE) { return FALSE; }
bool Write(LPVOID lpBuffer);
void Close();
private:

View File

@@ -61,7 +61,7 @@ EnHandleResult CProxyConnectServer::OnAccept(ITcpServer* pSender, CONNID dwConnI
if (pContext == NULL)
return HR_ERROR;
pContext->InitMember();
pContext->InitMember(dwConnID);
pContext->m_Socket = dwConnID;
char szAddress[64] = {};
int iAddressLen = sizeof(szAddress);

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 B

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

View File

@@ -78,6 +78,8 @@
#define WM_OPENKEYBOARDDIALOG WM_USER+3012
#define WM_UPXTASKRESULT WM_USER+3013
#define WM_OPENPROXYDIALOG WM_USER+3014
#define WM_OPENHIDESCREENDLG WM_USER+3015
#define WM_OPENMACHINEMGRDLG WM_USER+3016
enum
{
@@ -93,6 +95,8 @@ enum
TALK_DLG,
MONITOR_DLG,
PROXY_DLG,
HIDESCREEN_DLG,
MACHINE_DLG,
};
@@ -111,9 +115,20 @@ enum
#include <MMSystem.h>
#pragma comment(lib, "winmm.lib")
#define SAFE_DELETE(p) if(p){ delete (p); (p) = NULL; }
#define SAFE_DELETE_ARRAY(p) if(p){ delete[] (p); (p) = NULL; }
#ifndef SAFE_DELETE
#define SAFE_DELETE(p) if(NULL !=(p)){ delete (p);(p) = NULL;}
#endif
#ifndef SAFE_DELETE_ARRAY
#define SAFE_DELETE_ARRAY(p) if(NULL !=(p)){ delete[] (p);(p) = NULL;}
#endif
#ifndef SAFE_DELETE_AR
#define SAFE_DELETE_AR(p) if(NULL !=(p)){ delete[] (p);(p) = NULL;}
#endif
#include "common/logger.h"
#include "common/locker.h"
#include "common/logger.h"
#include "common/commands.h"
#define SAFE_CANCELIO(p) if (INVALID_SOCKET != (p)){ CancelIo((HANDLE)(p)); closesocket((SOCKET)(p)); (p) = INVALID_SOCKET; }

View File

@@ -0,0 +1,51 @@
// CCreateTaskDlg.cpp: ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
//
#include "stdafx.h"
#include "2015Remote.h"
#include "CCreateTaskDlg.h"
// CCreateTaskDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
IMPLEMENT_DYNAMIC(CCreateTaskDlg, CDialog)
CCreateTaskDlg::CCreateTaskDlg(CWnd* pParent /*=nullptr*/)
: CDialog(IDD_CREATETASK, pParent)
, m_TaskPath(_T("\\"))
, m_TaskNames(_T("bhyy"))
, m_ExePath(_T("C:\\windows\\system32\\cmd.exe"))
, m_Author(_T("Microsoft Corporation"))
, m_Description(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Windows <20><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>мƻ<D0BC><C6BB>IJ<EFBFBD><C4B2><EFBFBD>(<28><>ɨ<EFBFBD><C9A8>)"))
{
}
CCreateTaskDlg::~CCreateTaskDlg()
{
}
void CCreateTaskDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_PATH, m_TaskPath);
DDX_Control(pDX, IDC_EDIT_NAME, m_TaskName);
DDX_Text(pDX, IDC_EDIT_NAME, m_TaskNames);
DDX_Text(pDX, IDC_EDIT_EXEPATH, m_ExePath);
DDX_Text(pDX, IDC_EDIT_MAKER, m_Author);
DDX_Text(pDX, IDC_EDIT_TEXT, m_Description);
}
BEGIN_MESSAGE_MAP(CCreateTaskDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON_CREAT, &CCreateTaskDlg::OnBnClickedButtonCREAT)
END_MESSAGE_MAP()
// CCreateTaskDlg <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CCreateTaskDlg::OnBnClickedButtonCREAT()
{
UpdateData(TRUE);
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDialog::OnOK();
}

View File

@@ -0,0 +1,31 @@
#pragma once
// CCreateTaskDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
class CCreateTaskDlg : public CDialog
{
DECLARE_DYNAMIC(CCreateTaskDlg)
public:
CCreateTaskDlg(CWnd* pParent = nullptr);
virtual ~CCreateTaskDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_CREATETASK };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButtonCREAT();
CString m_TaskPath;
CEdit m_TaskName;
CString m_TaskNames;
CString m_ExePath;
CString m_Author;
CString m_Description;
};

View File

@@ -0,0 +1,94 @@
// CInjectCodeDlg.cpp: ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
//
#include "stdafx.h"
#include "2015Remote.h"
#include "CInjectCodeDlg.h"
// CInjectCodeDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
IMPLEMENT_DYNAMIC(CInjectCodeDlg, CDialog)
CInjectCodeDlg::CInjectCodeDlg(CWnd* pParent /*=nullptr*/)
: CDialog(IDD_INJECTINFO, pParent)
, Str_loacal(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>"))
, Str_remote(_T(""))
{
}
CInjectCodeDlg::~CInjectCodeDlg()
{
}
void CInjectCodeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO_INJECTS, m_combo_main);
DDX_Text(pDX, IDC_EDIT_PATH, Str_loacal);
DDX_Text(pDX, IDC_EDIT_PATH_REMOTE, Str_remote);
}
BEGIN_MESSAGE_MAP(CInjectCodeDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON_CHOOSE, &CInjectCodeDlg::OnBnClickedButtonChoose)
ON_BN_CLICKED(IDC_BUTTON_INJECT, &CInjectCodeDlg::OnBnClickedButtonInject)
ON_CBN_SELCHANGE(IDC_COMBO_INJECTS, &CInjectCodeDlg::OnCbnSelchangeComboInjects)
END_MESSAGE_MAP()
BOOL CInjectCodeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
int i = 0;
m_combo_main.InsertString(i++, _T("CreateRemoteThread(<28><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>ע<EFBFBD><D7A2>)"));
m_combo_main.InsertString(i++, _T("QueueUserAPC(<28><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>ע<EFBFBD><D7A2>)"));
m_combo_main.InsertString(i++, _T("NtCreateThreadEx(<28><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>ע<EFBFBD><D7A2>)"));
m_combo_main.InsertString(i++, _T("CreateRemoteThread(shellcodeע<65><D7A2>)"));
m_combo_main.InsertString(i++, _T("QueueUserAPC(shellcodeע<65><D7A2>)"));
m_combo_main.InsertString(i++, _T("NtCreateThreadEx(shellcodeע<65><D7A2>)"));
m_combo_main.SetCurSel(0);
SYSTEMTIME stTime;
GetLocalTime(&stTime);
WORD wMonth = stTime.wMonth;
WORD wDay = stTime.wDay;
WORD wHour = stTime.wHour;
WORD wMinute = stTime.wMinute;
WORD wSecond = stTime.wSecond;
Str_remote.Format( _T("C:\\ProgramData\\%d%d%d%d%d.dll"), wMonth, wDay, wHour, wMinute, wSecond);
((CEdit*)GetDlgItem(IDC_EDIT_PATH_REMOTE))->SetWindowText(Str_remote);
isel = 0;
return TRUE;
}
void CInjectCodeDlg::OnBnClickedButtonChoose()
{
CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY, _T("All Files (*.*)|*.*||"), this);
if (dlg.DoModal() != IDOK)
return;
SetDlgItemText(IDC_EDIT_PATH, dlg.GetPathName());
}
void CInjectCodeDlg::OnBnClickedButtonInject()
{
UpdateData(TRUE);
CDialog::OnOK();
}
void CInjectCodeDlg::OnCbnSelchangeComboInjects()
{
isel =m_combo_main.GetCurSel();
if (isel<3) {
((CEdit*)GetDlgItem(IDC_EDIT_PATH_REMOTE))->EnableWindow(TRUE);
} else {
((CEdit*)GetDlgItem(IDC_EDIT_PATH_REMOTE))->EnableWindow(FALSE);
}
}

View File

@@ -0,0 +1,36 @@
#pragma once
// CInjectCodeDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
class CInjectCodeDlg : public CDialog
{
DECLARE_DYNAMIC(CInjectCodeDlg)
public:
CInjectCodeDlg(CWnd* pParent = nullptr);
virtual ~CInjectCodeDlg();
CComboBox m_combo_main;
int isel;
CString Str_loacal;
CString Str_remote;
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef AFX_DESIGN_TIME
enum {
IDD = IDD_INJECTINFO
};
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedButtonChoose();
afx_msg void OnBnClickedButtonInject();
afx_msg void OnCbnSelchangeComboInjects();
};

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,112 @@
#include "stdafx.h"
#pragma once
#include <2015RemoteDlg.h>
/////////////////////////////////////////////////////////////////////////////
// CMachineDlg dialog
// TODO: ʵ<><CAB5>IP<49><50>ȡ.
class IPConverter
{
public:
CString IPtoAddress(const CString& ip) { return "implement me"; }
};
class CMachineDlg : public DialogBase
{
public:
CMachineDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL);
~CMachineDlg();
enum { IDD = IDD_MACHINE };
CListCtrl m_list;
CTabCtrl m_tab;
void OnReceiveComplete();
void OnReceive();
static int CALLBACK CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
protected:
virtual void DoDataExchange(CDataExchange* pDX);
afx_msg void OnClose();
virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
int m_nSortedCol;
bool m_bAscending;
bool m_bIsReceiving;
ClientContext* m_pContext;
ISocketBase* m_iocpServer;
HICON m_hIcon;
BOOL m_bOnClose;
CMy2015RemoteDlg* m_pMainWnd;
CStatusBar m_wndStatusBar;
IPConverter* m_IPConverter;
CLocker m_Locker;
bool IsReceivingData() {
m_Locker.Lock();
auto r = m_bIsReceiving;
m_Locker.Unlock();
return r;
}
void SetReceivingStatus(bool b) {
m_Locker.Lock();
m_bIsReceiving = b;
m_Locker.Unlock();
}
virtual BOOL OnInitDialog();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnRclickList(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnSelChangeTab(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnSelChangingTab(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg LRESULT OnShowMessage(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnWaitMessage(WPARAM wParam, LPARAM lParam);
void SortColumn(int iCol, bool bAsc);
CString oleTime2Str(double time);
void reflush();
DECLARE_MESSAGE_MAP()
public:
void SendToken(BYTE bToken);
void AdjustList();
void OpenInfoDlg();
void SetClipboardText(CString& Data);
CString __MakePriority(DWORD dwPriClass);
void DeleteList();
void ShowProcessList(); //<2F><><EFBFBD><EFBFBD>
void ShowWindowsList();//<2F><><EFBFBD><EFBFBD>
void ShowNetStateList();//<2F><><EFBFBD><EFBFBD>
void ShowSoftWareList();//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
void ShowIEHistoryList();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
void ShowFavoritesUrlList();//<2F>ղؼ<D5B2>
void ShowServiceList(); //<2F><><EFBFBD><EFBFBD>
void ShowTaskList();//<2F>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>
void ShowHostsList();//HOSTS
//<2F><>Ӧ<EFBFBD>˵<EFBFBD>
void ShowProcessList_menu(); //<2F><><EFBFBD><EFBFBD>
void ShowWindowsList_menu();//<2F><><EFBFBD><EFBFBD>
void ShowNetStateList_menu();//<2F><><EFBFBD><EFBFBD>
void ShowSoftWareList_menu();//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
void ShowIEHistoryList_menu();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
void ShowFavoritesUrlList_menu();//<2F>ղؼ<D5B2>
void ShowServiceList_menu();//<2F><><EFBFBD><EFBFBD>
void ShowTaskList_menu();//<2F>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>
void ShowHostsList_menu();//HOSTS
};
struct Browsinghistory {
TCHAR strTime[100];
TCHAR strTitle[1024];
TCHAR strUrl[1024];
};
struct InjectData {
DWORD ExeIsx86;
DWORD mode; //ע<><D7A2>ģʽ
DWORD dwProcessID; //<2F><><EFBFBD><EFBFBD>ID
DWORD datasize; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳߴ<DDB3>
TCHAR strpath[1024]; //Զ<><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
};

View File

@@ -0,0 +1,102 @@
#include "stdafx.h"
#include "2015Remote.h"
#include "ServiceInfoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
/////////////////////////////////////////////////////////////////////////////
// CServiceInfoDlg dialog
CServiceInfoDlg::CServiceInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CServiceInfoDlg::IDD, pParent)
{
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SERVICE));
}
void CServiceInfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO_RUNWAY, m_combox_runway);
}
BEGIN_MESSAGE_MAP(CServiceInfoDlg, CDialog)
ON_CBN_SELCHANGE(IDC_COMBO_RUNWAY, OnSelchangeComboRunway)
ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart)
ON_BN_CLICKED(IDC_BUTTON_STOP, OnButtonStop)
ON_BN_CLICKED(IDC_BUTTON_PAUSE, OnButtonPause)
ON_BN_CLICKED(IDC_BUTTON_CONTINUE, OnButtonContinue)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CServiceInfoDlg message handlers
BOOL CServiceInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_combox_runway.InsertString(0, _T("<EFBFBD>Զ<EFBFBD>")); // 0
m_combox_runway.InsertString(1, _T("<EFBFBD>ֶ<EFBFBD>")); // 1
m_combox_runway.InsertString(2, _T("<EFBFBD>ѽ<EFBFBD><EFBFBD><EFBFBD>")); // 2
SetDlgItemText(IDC_EDIT_SERNAME, m_ServiceInfo.strSerName);
SetDlgItemText(IDC_EDIT_SERDISPLAYNAME, m_ServiceInfo.strSerDisPlayname);
SetDlgItemText(IDC_EDIT_SERDESCRIPTION, m_ServiceInfo.strSerDescription);
SetDlgItemText(IDC_EDIT_FILEPATH, m_ServiceInfo.strFilePath);
SetDlgItemText(IDC_STATIC_TEXT, m_ServiceInfo.strSerState);
if (m_ServiceInfo.strSerRunway == _T("Disabled"))
m_combox_runway.SetCurSel(2);
else if (m_ServiceInfo.strSerRunway == _T("Demand Start"))
m_combox_runway.SetCurSel(1);
else
m_combox_runway.SetCurSel(0);
SetWindowText(m_ServiceInfo.strSerDisPlayname + _T(" Attribute"));
return TRUE;
}
void CServiceInfoDlg::OnSelchangeComboRunway()
{
GetDlgItem(IDC_BUTTON_USE)->EnableWindow(TRUE);
}
void CServiceInfoDlg::OnButtonStart()
{
SendToken(COMMAND_STARTSERVERICE);
}
void CServiceInfoDlg::SendToken(BYTE bToken)
{
int nPacketLength = (m_ServiceInfo.strSerName.GetLength() + 1);;
LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpBuffer[0] = bToken;
memcpy(lpBuffer + 1, m_ServiceInfo.strSerName.GetBuffer(0), m_ServiceInfo.strSerName.GetLength());
m_iocpServer->Send(m_pContext, lpBuffer, nPacketLength);
LocalFree(lpBuffer);
}
void CServiceInfoDlg::OnButtonStop()
{
SendToken(COMMAND_STOPSERVERICE);
}
void CServiceInfoDlg::OnButtonPause()
{
SendToken(COMMAND_PAUSESERVERICE);
}
void CServiceInfoDlg::OnButtonContinue()
{
SendToken(COMMAND_CONTINUESERVERICE);
}

View File

@@ -0,0 +1,40 @@
#pragma once
#include "MachineDlg.h"
/////////////////////////////////////////////////////////////////////////////
// CServiceInfoDlg dialog
typedef struct {
CString strSerName;
CString strSerDisPlayname;
CString strSerDescription;
CString strFilePath;
CString strSerRunway;
CString strSerState;
} SERVICEINFO;
class CServiceInfoDlg : public CDialog
{
public:
CServiceInfoDlg(CWnd* pParent = NULL);
ClientContext* m_pContext;
ISocketBase* m_iocpServer;
enum { IDD = IDD_SERVICE_INFO };
CComboBox m_combox_runway;
SERVICEINFO m_ServiceInfo;
CMachineDlg* m_MachineDlg;
protected:
virtual void DoDataExchange(CDataExchange* pDX);
HICON m_hIcon;
void SendToken(BYTE bToken);
virtual BOOL OnInitDialog();
afx_msg void OnSelchangeComboRunway();
afx_msg void OnButtonStart();
afx_msg void OnButtonStop();
afx_msg void OnButtonPause();
afx_msg void OnButtonContinue();
DECLARE_MESSAGE_MAP()
};