Board logo

标题: [系统相关] 是否可以用批处理终止指定路径的进程 [打印本页]

作者: 我就是大懒虫    时间: 2008-3-25 15:51     标题: 是否可以用批处理终止指定路径的进程

目前被一个病毒所困扰,想用批处理去解决他,问题是这样的:

这个病毒与系统的正常进程lsass.exe同名,这样如果在批处理中写入taskkill lsass.exe,那么正常进程也杀掉了,怎么才能选择性的结束同名的进程呢?

我有一个思路,不知可行不可行,请大家指正

1.用一个命令列出符合要求的进程(符合病毒路径),同时获取此进程的PID,将此PID写入一个txt
2.用一个命令获取txt中病毒进程的PID,并终止此pid

大家一定要帮帮我!用什么命令行工具,如何写代码,或有更好的思路
作者: 随风    时间: 2008-3-25 16:42

怎样才是 符合病毒路径呢?  若是知道病毒路径,你直接删除它不就可以了么?
我想你那个系统的进程路径应该是绝对的吧,
不知道wmic可不可以通过进程名来获取路径。。。

[ 本帖最后由 随风 于 2008-3-25 16:49 编辑 ]
作者: 我就是大懒虫    时间: 2008-3-25 17:08

谢谢随风回帖
病毒路径是之前测试得知的,在进程管理器里面无法直接结束病毒进程,所以知道路径也无法直接删除文件,何况文件被隐藏,并且系统隐藏显示设置被锁定。
另外,做此批处理的一个目的是,批量简单的处理此病毒,而不是单台机器手动处理 ,举个例子:
c:
attrib /s  -s -h -r  lsass.exe    //去除文件属性
pskill lsass.exe                      //结束病毒进程(问题出在这里,这么写的话,结束的不仅仅是病毒进程,因为没有指明路径,把系统进程也结束了)
del /s lsass.exe                    //删除病毒文件

另外我知道好像不能直接结束指定路径的进程,那么换种思路。获取指定进程的pid是不成问题的,在获取的pid的同时获取进程的路径也不成问题,MT.EXE可以做到。但是获取之后如何比较两个进程路径的不同,然后提取病毒文件所在路径的进程的pid,再用PSKILL去结束此PID就ok了,那么思路如下
C:
attrib /s  -s -h -r  lsass.exe //去除文件属性
MT -pllist >l.txt                    //获取所有进程信息,包括路径和PID写入l.txt
????????                          //将l.txt中进程名为lsass.exe并且路径为%windir%\system32\com的pid提取到一个p.txt文件
Pskill pid                            //用pskill结束p.txt 中的pid


随风看看这样是否可行,指导一下,谢谢
作者: 我就是大懒虫    时间: 2008-3-25 17:10

我没看你的第二个回帖,不好意思,我现在去试一下
作者: 我就是大懒虫    时间: 2008-3-25 17:17

随风,我按你的去做了后,发现他会试图结束两个进程
作者: 我就是大懒虫    时间: 2008-3-25 17:32

谢谢楼上,那么如果我就要结束%windir%\system\com\smss.exe这个进程,但是不想结束正常的SMSS.exe呢
作者: 我就是大懒虫    时间: 2008-3-25 17:36

谢谢kclmx,但是出了个错误:

此时不应有 takens=*"。
请按任意键继续. . .
作者: 随风    时间: 2008-3-25 18:16     标题: 回复 10楼 的帖子

此时不应有 takens=*"。
是因为楼上匆忙中写错了,应该是  tokens=*
你再试试 3 楼的代码,已作更改。。

[ 本帖最后由 随风 于 2008-3-25 18:29 编辑 ]
作者: 我就是大懒虫    时间: 2008-3-26 09:18

现在还出了一个问题,不知道怎么回事
作者: 我就是大懒虫    时间: 2008-3-26 10:09

回KCLMX

还是不行

能不能同时获取smss的路径和pid写入文本,比较文本的第一行和第二行内容取指定内容的行,提取PID赋值,再用结束进程的命令或工具结束pid呢
作者: 我就是大懒虫    时间: 2008-3-26 10:51

回KCLMX

非常感谢你的耐心回答。

首先我现在测试的不是真的病毒环境。
我将一个正常程序改名为smss.exe,再运行它。这样系统中有两个smss.exe,然后运行你给的那个bat,结果显示:无可用范例。

我不知道是不是结束不了还是错误。关于IceSword,不是不想用,而是他已经被病毒禁掉了,大部分安全工具都被禁用了,何况我想批量的解决问题。针对这个病毒而言,用批处理要做的东西很多,比如修复注册表,修复安全模式,卸载dll等,现在唯一出问题的就是如何有针对性的结束同名的进程。

另外命令结束进程工具比较强的是PSKILL,你是否可以把此工具应用到上述BAT呢。
PsKill的命令格式  PsKill pid or name

如何可以,我想是能不能加MSN或QQ聊聊,再次感谢
作者: 我就是大懒虫    时间: 2008-3-26 11:47

高调感谢Kclmx,帮助我解决此问题,现将代码放出

@echo off
setlocal enabledelayedexpansion
set "str=wmic process where caption="smss.exe" get ExecutablePath^,Handle"
for /f "skip=1 tokens=*" %%i in ('!str!') do (
  for /f "tokens=1-2" %%a in ("%%i") do (
    if /i not "%%a"=="!systemroot!\system32\smss.exe" (call pskill %%b)
  )
)
pause

注:PsKill为结束进程工具
作者: fastslz    时间: 2008-3-26 12:50

单条wmic命令不需要for 的
杀死除C:\WINDOWS\system32\lsass.exe以外的进程
wmic process where "name='lsass.exe' and ExecutablePath<>'C:\\WINDOWS\\system32\\lsass.exe'" call Terminate

杀死绝对路径C:\WINDOWS\system32\com\lsass.exe的进程
wmic process where "name='lsass.exe' and ExecutablePath='C:\\WINDOWS\\system32\\com\\lsass.exe'" call Terminate

[ 本帖最后由 fastslz 于 2008-3-26 12:55 编辑 ]
作者: 我就是大懒虫    时间: 2008-3-26 13:41

原帖由 fastslz 于 2008-3-26 12:50 发表
单条wmic命令不需要for 的
杀死除C:\WINDOWS\system32\lsass.exe以外的进程
wmic process where "name='lsass.exe' and ExecutablePath'C:\\WINDOWS\\system32\\lsass.exe'" call Terminate

杀死绝对路径C:\WIN ...

-----------------------------------------------------------------------------------------------------------------

谢谢。但是这样是不能终止进程了,我试过了。如果调用PSKILL的话,需给出pid
作者: L592181260    时间: 2021-1-14 17:04

大神们有没有这方面的教程
作者: Batcher    时间: 2021-1-14 22:35

回复 15# L592181260


    具体需要哪方面的教程?
作者: toyerspollors    时间: 2021-1-14 23:10

这么高深的东西暂时不是我初学者涉及的地方




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2