使用脚本来监控新建进程及其父进程以及他们的命令行

Posted 浩天四哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用脚本来监控新建进程及其父进程以及他们的命令行相关的知识,希望对你有一定的参考价值。

如今,流氓软件越来越多,其中也包含很多的知名软件厂商也赫然在列,肆意弹框,广告,篡改首页及系统设置,这些操作都是在后台静默完成,操作的流氓技术手段层出不穷,在运维过程中出现的反复问题,通过肉眼或者一定的技术手段可能都无法捕获到最终是哪个进程发起的流氓行为。为此,通过一定的脚本编程手段来加以辅助可谓事半功倍。举一简单例子,某用户计算机卸载了各种流氓软件后,没一会儿又安装上了,那么是如何安装上的,下面的脚本会告诉你答案。

该功能一共有2个脚本,第一个是vbs主程序,用以实现监控,第二个是批处理,用以调用这个vbs,将vbs捕获的信息显示到窗口上。

下面是VBS脚本代码:

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colMonitoredProcesses = objWMIService. _ 
ExecNotificationQuery("select * from __instancecreationevent " & " within 1 where TargetInstance isa ‘Win32_Process‘") 
Wscript.echo "进程监控已开启,任何新建进程将会被捕获!"
Do While 1
    Set objLatestProcess = colMonitoredProcesses.NextEvent
    sppid = objLatestProcess.TargetInstance.ParentProcessID
    Wscript.Echo time & " 发现新建进程-->" & "发起父进程Process ID:" & sppid
    Wscript.Echo "父进程命令行:" & GetParentProcessName(sppid)
    Wscript.Echo "创建新进程:" & objLatestProcess.TargetInstance.CommandLine
    Wscript.Echo "----------------------------------------------------------------"
Loop

Function GetParentProcessName(pid)
On error resume next
Dim sComputerName,WMI_Obj,WMI_ObjProps,ObjClsItem
sComputerName="."
   Set WMI_Obj = GetObject("winmgmts:\\" & sComputerName & "\root\cimv2")
   Set WMI_ObjProps = WMI_Obj.ExecQuery("Select * from Win32_Process where ProcessId=‘" & pid & "", , 48)

   For Each ObjClsItem in WMI_ObjProps
    GetParentProcessName = ObjClsItem.CommandLine
   Next
End Function

下面是bat批处理脚本代码:

@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if %errorlevel% NEQ 0 (
    echo 请求管理员权限...
    goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
    "%temp%\getadmin.vbs"
    exit /B
:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
cscript.exe //Nologo "%~dp0"procsm.vbs

pause>nul

将上面的2个脚本放在同一个目录中,然后运行批处理脚本,此时,批处理会调用UAC以管理员身份运行,随后载入执行vbs脚本,运行后,我们可以看到以下监控的效果:

技术分享

 

以上是关于使用脚本来监控新建进程及其父进程以及他们的命令行的主要内容,如果未能解决你的问题,请参考以下文章

JDK监控及故障处理工具使用

进程内存监控

zabbix监控nginx进程

Linux进程管理及相关命令

Linux下创建定时任务监控zookeeper进程,异常时自动启动

Linux下创建定时任务监控kafka进程,异常时自动启动