文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学的各位小编整理了VC与C++类别-基于VC++设计的一种木马程序的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
1.1 具体功能实现 1.1.1 获取信息功能 当Server先在被控计算机上启动以后,Client输入被控计算机IP如:192.168.0.5,就可以连接上服务端,Client 端单击获取信息按钮,Server端收到Client发过来的消息并响应,然后Server端调用四个API函数:调用函数GetSystemInfo()来返回当前系统的信息,调用函数GlobalMemoryStatus()来获得当前可用的物理和虚拟内存信息,调用函数GetVersionEx()来返回当前操作系统的版本信息,调用函数GetSystemMetrics()来返回与Windows环境有关的信息。Server通过调用以上函数,得到系统消息,并返回给Client. Client 端收到Server返回的消息并显示在文本框中如图3-3: 客户端源获取消息控件的核心代码如下: void CClientDlg::OnGetinformation() { // TODO: Add your control notification handler code here m_message.ResetContent(); m_message.SendMessage(LB_SETHORIZONTALEXTENT,0,0); pThreadInformation=::AfxBeginThread(_GetInformationThread,this); } 1.1.2 清除信息 此功能主要实现客户端文本框中对获取的系统信息和进程信息进行删除。当Client接收到Server返回的系统信息和进程信息以后,单击Client上面的清除信息按钮就可以清除掉文本框中的信息。本功能不需要要Server和Client进行通信,client通过调用成员函数CClientDlg::OnClean(){}中的函数CClientDlg::OnClean(){}就可以实现。Client端获取Server端系统信息并清除的效果如图3-4和3-5: 图3-4获取信息 图3-5清除信息 客户端核心代码如下: void CClientDlg::OnClean() { // TODO: Add your control notification handler code here m_message.ResetContent(); m_message.SendMessage(LB_SETHORIZONTALEXTENT,0,0); } 1.1.3 锁定鼠标和键盘 本功能主要实现锁定远程受控鼠标和键盘的移动,单击,双击等操作,具体实现方式如下:client端点击“锁定鼠标”或者“锁定键盘”按钮,发送消息到server端。Server端通过全局变量函数LockOrUnLockKey和LockOrUnLockMouse来判断是操作键盘还是鼠标,然后用相应的钩子(HOOK函数)来拦截Server端的消息来实现鼠标或键盘的锁定。client通过调用void CClientDlg::OnLockMouse() 函数向server端发送消息,激发server端的锁定鼠标函数响应;通过调用void CClientDlg::OnUnLockKeyBord() 函数激发server端的开启鼠标函数响应;通过调用void CClientDlg::OnLockKeyBord() 函数激发server端锁定键盘函数响应;通过调用void CClientDlg::OnUnLockKeyBord()函数激发server端开启键盘函数响应。锁定开启键盘和鼠标的效果图如图3-6: 1.1.4 注销、重启和关机 这三个功能都是调用ExitWindowsEx函数实现,所不同的是远程重启和关机所需要的权限较高,需要把程序进程提权。远程重启和关机的实现比较类似,只是ExitWindowsEx的调用不同(重启EWX_REBOOT,关机EWX_SHUTDOWN)。服务端添加注销计算机函数LogOff(),重启计算机函数Reboot()和关机函数poweroff()。 核心代码如下: 注销功能是通过以下函数实现: int CMainFrame::LogOff() //注销 { ExitWindowsEx(EWX_LOGOFF,0); return 0; } 重新启动计算机通过以下函数实现: int CMainFrame::Reboot() //重新启动 { HANDLE hToken; TOKEN_PRIVILEGES tkp; DWORD dwVersion; // 版本号 dwVersion = GetVersion(); //得到WINDOWS NT或Win32的版本号 if(dwVersion < 0x80000000) { OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; //设置权限 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0); ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0); } else //WIN系列其它系统 { ExitWindowsEx(EWX_FORCE | EWX_REBOOT, 0); } return 0; } 关机功能通过以下函数实现: int CMainFrame::PowerOff() //关机 { HANDLE hToken; TOKEN_PRIVILEGES tkp; DWORD dwVersion; // 版本号 dwVersion = GetVersion(); //得到WINDOWS NT或Win32的版本号 if(dwVersion < 0x80000000) //用于判断WIN系列,从而设置相应的权限 { OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; //设置权限 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0); } else { ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN, 0); } return 0; } 1.1.5 隐藏并开启任务栏 当server与client连接以后,单击client的隐藏任务栏和开启任务栏按钮,就可以实现对server端任务栏的隐藏和开启的功能。这个功能的实现方式如下:client端点击“隐藏任务栏” ,并发送消息到server端。Server端通过添加HideTaskBar()函数来隐藏任务栏,添加UnHideTaskBar()函数来开启任务栏。 |
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |