发新话题
打印

[转帖,技术参考用] WINDOWS 2000/XP/2003 系列命令行进程管理

[转帖,技术参考用] WINDOWS 2000/XP/2003 系列命令行进程管理

WINDOWS 2000/XP/2003 系列命令行进程管理

作者: niublog  日期: 2006-12-20 13:29
   毫无疑问的是,我们有大量的第三方进程管理工具,功能强大,而且有些牛到可以清楚掉rootkit一类的木马进程.但是一般来说,如果计算机没有遇到严重的安全问题,那么WINDOWS自己带的一些命令足够我们解决一些进程管理问题.况且有时候计算机上没有第三方程序,任务管理器又无法使用(比如说有些病毒会杀掉进程管理器)那么这时候命令行的好处还是明显的.
    首先必须详细的解释一下,进程的概念.进程实际上是一个比较大的单位,它是计算机系统中运行着的程序实体.每一个进程可以同时拥有多个线程,加载多个动态或者静态的库文件.
    我举一个现实的列子好了,我现在想看看本机有哪些程序在使用网络,然后把这些程序关闭.在这个过程中,我介绍一下NT系统中自带的和进程有关的命令.抱歉,我觉得没有必要详细的列出我机器上的进程,大家可以在自己的机器上看运行结果
c:>netstat -a -o
    我们可以看到,目前有多少个进程在使用网络,虽然看不见名字,但是我们可以知道它们的PID.什么是PID?就是process id,是NT系统给每一个进程分配的编号.现在我们可以查看一下目前的进程.
C:>tasklist
    然后,我们只要对照两者,就可以知道,哪些程序正在使用网络了.比如说QQ.如果你现在想干掉QQ,当然,我是说不用它自带的退出,那么QQ总共有多少种命令行下的死法呢?
    三种!tskill命令,taskkill命令,ntsd命令.
    tskill命令的使用最为简单,C:>tskill

TSKILL processid | processname [/SERVER:servername] [/ID:sessionid | /A] [/V]

  processid           要结束的进程的 Process ID。
  processname         要结束的进程名称。
  /SERVER:servername  含有 processID 的服务器(默认值是当前值)。
                         使用进程名和 /SERVER 时,必须指定
                         /ID 或 /A
  /ID:sessionid       结束在指定会话下运行的进程。
  /A                  结束在所有会话下运行的进程。
  /V                  显示正在执行的操作的信息。

    taskkill命令主要的好处是带很多筛选器,可以批量结束进程
C:>taskkill /?

TASKKILL [/S system [/U username [/P [password]]]]
         { [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]
描述:
    这个命令行工具可用来结束至少一个进程。
    可以根据进程 id 或图像名来结束进程。
参数列表:
    /S    system           指定要连接到的远程系统。
    /U    [domain]user    指定应该在哪个用户上下文
                           执行这个命令。
    /P    [password]       为提供的用户上下文指定
                           密码。如果忽略,提示输入。
    /F                     指定要强行终止
                           进程。
    /FI   filter           指定筛选进或筛选出查询的
                           的任务。
    /PID  process id       指定要终止的进程的
                           PID。
    /IM   image name       指定要终止的进程的
                           图像名。通配符 '*'
                           可用来指定所有图像名。
    /T                     Tree kill: 终止指定的进程
                           和任何由此启动的子进程。
    /?                     显示帮助/用法。
筛选器:
    筛选器名      有效运算符                有效值
    -----------   ---------------           --------------
    STATUS        eq, ne                    运行 | 没有响应
    IMAGENAME     eq, ne                    图像名
    PID           eq, ne, gt, lt, ge, le    PID 值
    SESSION       eq, ne, gt, lt, ge, le    会话编号
    CPUTIME       eq, ne, gt, lt, ge, le    CPU 时间,格式为
                                            hh:mm:ss。
                                            hh - 时,
                                            mm - 钟,ss - 秒
    MEMUSAGE      eq, ne, gt, lt, ge, le    内存使用,单位为 KB
    USERNAME      eq, ne                    用户名,格式为
                                            [domain]user
    MODULES       eq, ne                    DLL 名
    SERVICES        eq, ne                    服务名
    WINDOWTITLE     eq, ne                    窗口标题
注意: 只有带有筛选器的情况下,才能跟 /IM 切换使用通配符 '*'。
注意: 远程进程总是要强行终止,
      不管是否指定了 /F 选项。
例如:
    TASKKILL /S system /F /IM notepad.exe /T
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
    TASKKILL /F /IM notepad.exe /IM mspaint.exe
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITYSYSTEM" /IM notepad.exe
    TASKKILL /S system /U domainusername /FI "USERNAME ne NT*" /IM *
    TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"

    有一些高等级的进程,tskill和taskkill或许无法结束,那么我们还有一个更强大的工具,那就是系统debug级的ntsd.准确的说,ntsd是一个系统调试工具,只提供给系统开发级的管理员使用,但是对我们杀掉进程还是很爽的.基本上除了WINDOWS系统自己的管理进程,ntsd都可以杀掉.

当然咯,有些rootkit级别的超级木马,还是无能为力,幸好这种牛牛级别的木马还是很少的.
    NTSD 调试程序在启动时要求用户指定一个要连接的进程。使用 TLIST 或 PVIEWER,您可以获得某个现有进程的进程 ID,然后键入 NTSD -p pid 来调试这个进程。NTSD 命令行使用如下的句法:
NTSD [options] imagefile
其中,imagefile 是要调试的映像名称,options 是下面选项之一:
    选项说明-2打开一个用于调试字符模式的应用程序的新窗口-d将输出重定向到调试终端-g 使执行自动通过第一个断点-G使 NTSD 在子程序终止时立即退出o启用多个进程的调试,默认值为由调试程序衍生的一个进程-p指定调试由进程 ID 标识的进程-v产生详细的输出
    例如,假设 inetinfo.exe 的进程 ID 为 104。键入以下命令将 NTSD 调试程序连接到 inetinfo 进程 (IIS)。
    NTSD -p 104
    也可使用 NTSD 启动一个新进程来进行调试。例如,NTSD notepad.exe 将启动一个新的notepad.exe 进程,并与它建立连接。
    一旦连接到某个进程,您就可以用各种命令来查看堆栈、设置断点、转储内存,等等。
    命令含义~显示所有线程的一个列表KB 显示当前线程的堆栈轨迹~*KB显示所有线程的堆栈轨迹R显示当前帧的寄存器输出U反汇编代码并显示过程名和偏移量D[type][<range>]转储内存BP[#] <address>设置断点BC[<bp>]清除一个或多个断点BD[<bp>]禁用一个或多个断点BE[<bp>]启用一个或多个断点BL[<bp>]列出一个或多个断点
    个人意见,有一个非常重要的参数就是-v参数,我们可以通过它发现一个进程下面挂接了哪些连接库文件.有很多病毒,木马,或者恶意软件,都喜欢把自己做成动态库,然后注册到系统正常程序的加载库列表中,达到隐藏自己的目的.
    首先我们需要设置一下ntsd的输出重定向,最好是重定向到一个文本文件,方便我们分析研究.
c:>set _NT_DEBUG_LOG_FILE_APPEND=c:pdw.txt
    注意,虽然输出重定向了,但是我们的输出依然会继续显示在屏幕上,而且会进入到debug模式,我们使用-c q参数,就可以避免这个问题.
c:>ntsd -c q -v notepad.exe
    现在我们的pdw.txt文件中,就可以看见notepad.exe文件的调试信息.
    ntsd使用以下参数杀死进程.
c:>ntsd -c q -p PID    只要你能提供进程的PID,那么你就可以干掉进程.

    合理的使用上面的指令,你就可以用命令行,找到计算机上是什么程序在疯狂发包,然后杀掉它们.当然,如果你要彻底的清除它们,还必须删除这些程序,并在启动项中干掉它们.
Hacker代表一种充满激情和创造力的态度,你即使从未使用过计算机,也可能是一名Hacker。

TOP

发新话题