Windows 系统debug级 进程调试工具 ntsd 详解
生活随笔
收集整理的這篇文章主要介紹了
Windows 系统debug级 进程调试工具 ntsd 详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
???? ntsd從Windows 2000開始就是系統自帶的進程調試工具,在system32目錄下。NTSD的功能非常的強大,用法也比較復雜,但如果只用來結束一些進程,那就比較簡單了。在Windows中只有System、SMSS.EXE和CSRSS.EXE不能殺。前兩個是純內核態的,最后那個是Win32子系統,ntsd本身需要它。lsass.exe也不要殺掉,它是負責本地賬戶安全的。被調試器附著(attach)的進程會隨調試器一起退出,所以可以用來在命令行下終止進程。
打開cmd 后輸入以下命令就可以結束進程:
方法一:利用進程的PID結束進程
命令格式:ntsd -c q -p pid
命令范例: ntsd -c q -p 1332 (結束explorer.exe進程)
范例詳解:explorer.exe的pid為1332,但是如何獲取進程的pid呢?在CMD下輸入TASKLIST就可以獲取當前任務管理器所有進程的PID。或者打開任務管理器,在菜單欄,選擇“查看”—“選擇列”,在打開的選擇項窗口中將“PID(進程標識符)”項選擇鉤上,這樣任務管理器的進程中就會多出PID一項了。
(PID的分配并不固定,是在進程啟動是由系統隨機分配的,所以進程每次啟動的進程一般都不會一樣。)
方法二:利用進程名結束進程
命令格式:ntsd -c q -pn ***.exe (***.exe 為進程名,exe不能省)
命令范例:ntsd -c q -pn explorer.exe
如果同一個進程(比如iexplorer.exe)開了多個,就會出現錯誤 所以,ntsd 每次只能結束一個單獨出現的進程。
-c?? 表示執行debug命令
q?? 表示執行結束后退出(quit)
-p?? 表示后面緊跟著是你要結束的進程對應的PID
-pn 表示后面緊跟著是你要結束的進程名
另外的能結束進程的DOS命令還有taskkill和tskill命令:
命令格式: taskkill /pid 1234 /f ( 也可以達到同樣的效果。)
有一些高等級的進程,tskill和taskkill也可能無法結束,這時就得使用系統debug級的ntsd.準確的說,ntsd是一個系統調試工具,只提供給系統開發級的管理員使用,但是對我們殺掉進程還是很爽的.基本上除了WINDOWS系統自己的管理進程,ntsd都可以殺掉。
當然,有些rootkit級別的超級木馬,還是無能為力,幸好這種牛牛級別的木馬還是很少的。
鍵入 NTSD -p pid 來調試這個進程。NTSD 命令行使用如下的句法:
NTSD [options] imagefile
其中,imagefile 是要調試的映像名稱,options 是選項參數;以下為ntsd的用法和幫助:
ntsd
usage: ntsd [-?] [-2] [-d] [-g] [-G] [-myob] [-lines] [-n] [-o] [-s] [-v] [-w]
[-r BreakErrorLevel] [-t PrintErrorLevel]
[-hd] [-pd] [-pe] [-pt #] [-pv] [-x | -x{e|d|n|i} <event>]
[-- | -p pid | -pn name | command-line | -z CrashDmpFile]
[-zp CrashPageFile] [-premote transport] [-robp]
[-aDllName] [-c "command"] [-i ImagePath] [-y SymbolsPath]
[-clines #] [-srcpath SourcePath] [-QR \\machine] [-wake <pid>]
[-remote transport:server=name,portid] [-server transport:portid]
[-ses] [-sfce] [-sicv] [-snul] [-noio] [-failinc] [-noshell]
【command-line】 在dubugger模式下運行
【--】 默認為執行【-G -g -o -p -1 -d -pd】參數
【-aDllName】設置默認的擴展dll
【-c】執行后面的dubugger命令
【-clines】 number of lines of output history retrieved by a remote client
【-failinc】失敗時產生不完全的符號和模型
【-d】 通過DbgPrint向kernel(核心)發送debugger輸出信息,并重定向到調試終端
注: -d 不可與debugger remoting同用,只能在kernel(核心)debugger 可以用時才能使用
【-g】在debuggee下忽略初始化斷點,使執行自動通過第一個斷點
【-G】忽略程序結束時的最終斷點,使NTSD 在子程序終止時立即退出;
【-hd】規定debug命令集不能用于(dubuggee)創建的程序。該參數只能作用在Windows Whistler(windows xp的測試版本)系統上
【-o】 debug所有由debuggee載入的程序,啟用多個進程的調試,默認值為由調試程序衍生的一個進程
【-p pid】指定要綁定的進程的十進制ID(就是pid)
【-pd】 指定debugger自動與綁定的程序分離
【-pe】 規定任何綁定都要對應一個存在的debug端口
【-pt #】指定中斷超時時間
【-pv】 指定任何綁定都是封閉的,不對外共享
【-r】 指定0-3等級的中斷(SeeSetErrorLevel)
【-robp】允許在只讀內存中設置斷點
【-t】 指定顯示0-3級的錯誤(SeeSetErrorLevel)
【-v】 產生詳細的輸出
【-w】 指定在一個單獨的VDM(DOS虛擬機)中debug 16位應用程序
【-x】 在AV排除項中設置第二個可選斷點
-x{e|d|n|i} <event> 為指定的事件設置中斷狀態
【-2】 為debuggee創建一個單獨核心的窗口,用于調試字符模式的應用程序;
例如:假設inetinfo.exe的進程ID為104。鍵入以下命令將 NTSD 調試程序連接到 inetinfo 進程 (IIS) “NTSD -p 104 ”
也可使用 NTSD 啟動一個新進程來進行調試。“NTSD notepad.exe ”將啟動一個新notepad.exe 進程,并與它建立連接。
一旦連接到某個進程,您就可以用各種命令來查看堆棧、設置斷點、轉儲內存,等等。
~顯示所有線程的一個列表KB 顯示當前線程的堆棧軌跡
~*KB顯示所有線程的堆棧軌跡
R顯示當前幀的寄存器輸出
U反匯編代碼并顯示過程名和偏移量
D[type][< range>]轉儲內存BP[#]
設置斷點BC[ ]清除一個或多個斷點BD[]禁用一個或多個斷點BE[< bp>]啟用一個或多個斷點BL[ ]列出一個或多個斷點
有一個非常重要的參數就是-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文件的調試信息.
打開cmd 后輸入以下命令就可以結束進程:
方法一:利用進程的PID結束進程
命令格式:ntsd -c q -p pid
命令范例: ntsd -c q -p 1332 (結束explorer.exe進程)
范例詳解:explorer.exe的pid為1332,但是如何獲取進程的pid呢?在CMD下輸入TASKLIST就可以獲取當前任務管理器所有進程的PID。或者打開任務管理器,在菜單欄,選擇“查看”—“選擇列”,在打開的選擇項窗口中將“PID(進程標識符)”項選擇鉤上,這樣任務管理器的進程中就會多出PID一項了。
(PID的分配并不固定,是在進程啟動是由系統隨機分配的,所以進程每次啟動的進程一般都不會一樣。)
方法二:利用進程名結束進程
命令格式:ntsd -c q -pn ***.exe (***.exe 為進程名,exe不能省)
命令范例:ntsd -c q -pn explorer.exe
如果同一個進程(比如iexplorer.exe)開了多個,就會出現錯誤 所以,ntsd 每次只能結束一個單獨出現的進程。
-c?? 表示執行debug命令
q?? 表示執行結束后退出(quit)
-p?? 表示后面緊跟著是你要結束的進程對應的PID
-pn 表示后面緊跟著是你要結束的進程名
另外的能結束進程的DOS命令還有taskkill和tskill命令:
命令格式: taskkill /pid 1234 /f ( 也可以達到同樣的效果。)
有一些高等級的進程,tskill和taskkill也可能無法結束,這時就得使用系統debug級的ntsd.準確的說,ntsd是一個系統調試工具,只提供給系統開發級的管理員使用,但是對我們殺掉進程還是很爽的.基本上除了WINDOWS系統自己的管理進程,ntsd都可以殺掉。
當然,有些rootkit級別的超級木馬,還是無能為力,幸好這種牛牛級別的木馬還是很少的。
鍵入 NTSD -p pid 來調試這個進程。NTSD 命令行使用如下的句法:
NTSD [options] imagefile
其中,imagefile 是要調試的映像名稱,options 是選項參數;以下為ntsd的用法和幫助:
ntsd
usage: ntsd [-?] [-2] [-d] [-g] [-G] [-myob] [-lines] [-n] [-o] [-s] [-v] [-w]
[-r BreakErrorLevel] [-t PrintErrorLevel]
[-hd] [-pd] [-pe] [-pt #] [-pv] [-x | -x{e|d|n|i} <event>]
[-- | -p pid | -pn name | command-line | -z CrashDmpFile]
[-zp CrashPageFile] [-premote transport] [-robp]
[-aDllName] [-c "command"] [-i ImagePath] [-y SymbolsPath]
[-clines #] [-srcpath SourcePath] [-QR \\machine] [-wake <pid>]
[-remote transport:server=name,portid] [-server transport:portid]
[-ses] [-sfce] [-sicv] [-snul] [-noio] [-failinc] [-noshell]
【command-line】 在dubugger模式下運行
【--】 默認為執行【-G -g -o -p -1 -d -pd】參數
【-aDllName】設置默認的擴展dll
【-c】執行后面的dubugger命令
【-clines】 number of lines of output history retrieved by a remote client
【-failinc】失敗時產生不完全的符號和模型
【-d】 通過DbgPrint向kernel(核心)發送debugger輸出信息,并重定向到調試終端
注: -d 不可與debugger remoting同用,只能在kernel(核心)debugger 可以用時才能使用
【-g】在debuggee下忽略初始化斷點,使執行自動通過第一個斷點
【-G】忽略程序結束時的最終斷點,使NTSD 在子程序終止時立即退出;
【-hd】規定debug命令集不能用于(dubuggee)創建的程序。該參數只能作用在Windows Whistler(windows xp的測試版本)系統上
【-o】 debug所有由debuggee載入的程序,啟用多個進程的調試,默認值為由調試程序衍生的一個進程
【-p pid】指定要綁定的進程的十進制ID(就是pid)
【-pd】 指定debugger自動與綁定的程序分離
【-pe】 規定任何綁定都要對應一個存在的debug端口
【-pt #】指定中斷超時時間
【-pv】 指定任何綁定都是封閉的,不對外共享
【-r】 指定0-3等級的中斷(SeeSetErrorLevel)
【-robp】允許在只讀內存中設置斷點
【-t】 指定顯示0-3級的錯誤(SeeSetErrorLevel)
【-v】 產生詳細的輸出
【-w】 指定在一個單獨的VDM(DOS虛擬機)中debug 16位應用程序
【-x】 在AV排除項中設置第二個可選斷點
-x{e|d|n|i} <event> 為指定的事件設置中斷狀態
【-2】 為debuggee創建一個單獨核心的窗口,用于調試字符模式的應用程序;
例如:假設inetinfo.exe的進程ID為104。鍵入以下命令將 NTSD 調試程序連接到 inetinfo 進程 (IIS) “NTSD -p 104 ”
也可使用 NTSD 啟動一個新進程來進行調試。“NTSD notepad.exe ”將啟動一個新notepad.exe 進程,并與它建立連接。
一旦連接到某個進程,您就可以用各種命令來查看堆棧、設置斷點、轉儲內存,等等。
~顯示所有線程的一個列表KB 顯示當前線程的堆棧軌跡
~*KB顯示所有線程的堆棧軌跡
R顯示當前幀的寄存器輸出
U反匯編代碼并顯示過程名和偏移量
D[type][< range>]轉儲內存BP[#]
設置斷點BC[ ]清除一個或多個斷點BD[]禁用一個或多個斷點BE[< bp>]啟用一個或多個斷點BL[ ]列出一個或多個斷點
有一個非常重要的參數就是-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文件的調試信息.
總結
以上是生活随笔為你收集整理的Windows 系统debug级 进程调试工具 ntsd 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Audirvana Plus for M
- 下一篇: 计算机毕设(附源码)JAVA-SSM老年