Update private master program code
This commit is contained in:
@@ -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
@@ -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);
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
51
server/2015Remote/CTextDlg.cpp
Normal file
51
server/2015Remote/CTextDlg.cpp
Normal 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();
|
||||
}
|
||||
27
server/2015Remote/CTextDlg.h
Normal file
27
server/2015Remote/CTextDlg.h
Normal 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();
|
||||
};
|
||||
927
server/2015Remote/HideScreenSpyDlg.cpp
Normal file
927
server/2015Remote/HideScreenSpyDlg.cpp
Normal 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;
|
||||
}
|
||||
93
server/2015Remote/HideScreenSpyDlg.h
Normal file
93
server/2015Remote/HideScreenSpyDlg.h
Normal 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;
|
||||
};
|
||||
@@ -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;
|
||||
|
||||
@@ -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
267
server/2015Remote/Loader.c
Normal file
File diff suppressed because one or more lines are too long
@@ -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);
|
||||
|
||||
@@ -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>ʾ");
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
BIN
server/2015Remote/res/machine.ico
Normal file
BIN
server/2015Remote/res/machine.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
BIN
server/2015Remote/res/screen.ico
Normal file
BIN
server/2015Remote/res/screen.ico
Normal file
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.
@@ -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; }
|
||||
|
||||
51
server/2015Remote/sys/CCreateTaskDlg.cpp
Normal file
51
server/2015Remote/sys/CCreateTaskDlg.cpp
Normal 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();
|
||||
}
|
||||
31
server/2015Remote/sys/CCreateTaskDlg.h
Normal file
31
server/2015Remote/sys/CCreateTaskDlg.h
Normal 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;
|
||||
};
|
||||
94
server/2015Remote/sys/CInjectCodeDlg.cpp
Normal file
94
server/2015Remote/sys/CInjectCodeDlg.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
36
server/2015Remote/sys/CInjectCodeDlg.h
Normal file
36
server/2015Remote/sys/CInjectCodeDlg.h
Normal 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();
|
||||
};
|
||||
1693
server/2015Remote/sys/MachineDlg.cpp
Normal file
1693
server/2015Remote/sys/MachineDlg.cpp
Normal file
File diff suppressed because it is too large
Load Diff
112
server/2015Remote/sys/MachineDlg.h
Normal file
112
server/2015Remote/sys/MachineDlg.h
Normal 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>Ŀ¼
|
||||
};
|
||||
102
server/2015Remote/sys/ServiceInfoDlg.cpp
Normal file
102
server/2015Remote/sys/ServiceInfoDlg.cpp
Normal 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);
|
||||
}
|
||||
40
server/2015Remote/sys/ServiceInfoDlg.h
Normal file
40
server/2015Remote/sys/ServiceInfoDlg.h
Normal 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()
|
||||
};
|
||||
Reference in New Issue
Block a user