Windows
/XP內含的任務管理器(Taskmgr)相信大家都熟悉吧
相比之下XP裡的要比
功能更加強大
返回的信息也更加的詳細
不過您是否覺得還有很多希望獲得的消息沒有包含在裡面嗎?您是否覺得Windows的系統管理工具箱裡的東西太分散了嗎?下面就讓我們看看它們的開發原理
並動手實現一個真正的任務管理器
現在我們是調用Win
API來實現這些功能的
但是大家都說MS隱藏了太多的細節
以後我們將討論更多關於Windows內核的東東
可能大家對任務管理器裡最熟悉的功能要數進程管理了
常常我們在懷疑中了病毒/木馬的時候都會看看任務管理器裡有沒有什麼特別的進程在運行
所以進程查看器應該是一個非常重要的功能
我們除了需要獲得進程的名稱外
還有什麼呢?當然包括它的進程標識符(ProcessID)
用戶信息(UserName)
CPU使用時間(CPUTime)和存儲器的使用情況(MemoryUsage)
還有它的優先權(BasePriority)
CPU和Memory信息可以幫助我們分析進程的運行情況
而優先權可以表示進程在CPU分配處理器使用時的優先情況
這些都是通用的進程信息
讓我們再看看其他的信息吧
進程的父進程標識符(Parent Process ID)
創建時間(Create Time)
程序名稱等在很多情況下也是我們關心的信息
我們再看看進程相關的性能信息
在Windows下通常有兩種模式
內核模式(Kernel: Level
)和用戶模式(User: Level
)
進程往往在兩種模式中來回切換
所以可以獲得進程在內核模式和用戶模式各自的使用時間
同時還包括進程相關的工作集(WorkingSet)
分頁池(PagedPool)
非分頁池(NonePagedPool)和頁面文件(PageFile)信息
進程相關的I/O操作包括讀/寫/其他等動作
我們可以獲得這些操作的次數和傳送數據的數量
如果您懷疑某個進程是木馬
那您還想獲得哪些信息呢?簡單的進程名稱應該是不夠的吧!我們希望獲得進程的實際程序的路徑
這樣可以幫助我們判斷究竟是那個程序在運行
前段時間不是在討論什麼進程隱藏的
其中一種就是
創建遠程線程
而注體往往又是以動態鏈接庫(DLL)的形式存在的
我們就希望看到某個具體進程所包含的所有模塊(Module)
常常是DLL也
線程
是一個大家熟悉的名字
它是Windows系統中的實現體
而進程則是線程運行的環境
一個進程到底創建了多少線程了?我們同樣可以枚舉進程內部的所有線程信息
如果您發現一個木馬進程
下面的動作就應該是分析它的運行機制(如果您對它感興趣)
不過最終您還是要將它結束吧
在Windows
k下
很多系統關鍵進程在TaskMgr裡是不能被結束的
不過現在您不用擔心了
好的
對進程的操作當然就包括結束進程
如果您用過中文的XP
您是否常常遇到任務欄
假死
的情況
雖然您的電腦沒有掛掉
但卻動彈不得
那好我們也同樣可以將任意的進程掛起來
不管您對它做什麼動作(除了結束)
它都不會有任何的反應
有了掛起進程
同樣我們也可以將進程從
掛起
狀態激活哈
桌面窗口是大家接觸得最多的交互界面了
您是否想獲得每個窗口的標題信息呢?當然我們還可以獲得與窗口關聯的進程
線程與窗口句柄屬性
如果大家對VC比較熟悉
就應該知道其中的一個SPY++工具吧
它就可以獲得桌面窗口
進程和線程的詳細信息
不過現在就不用打開這個
打開那個了
通通搞定了!
系統性能是每個用戶關心的話題
它包括整個系統當前創建的句柄
進程以及線程的數目
還有物理存儲器(Physical Memory)的總量和使用情況
系統高速緩存(System Cache)的大小
存儲器保留與提交(Commit Charge)狀況
當然還有核心分頁/非分頁池(Kernel Memory)的使用情況
幾乎包括了Windows系統下存儲器管理的大部分信息
雖然現在硬盤的價格已經很低了
不過我還是在用
G的小東東
所以常常遇到
Low Disk
!我們常常要看看硬盤的使用情況
不過每次都要進入我的電腦
太麻煩了
而我們現在可以一次了解所有磁盤的容量和當前使用情況
同時還有它們的格式類型(如FAT
NTFS
CDFS等)和磁盤標簽
說到環境塊
或許不是那麼熟悉吧
它包含一些環境變量
而每個環境變量對應一個/多個字符串
您可以在控制面板的SYSTEM/Advanced(系統/高級)裡對它們進行設置
包括添加新的環境變量
刪除和編輯系統環境變量
事件記錄對我們分析系統的使用情況有很大的幫助
事件記錄分為三種
應用程序
系統和安全
而對應的每種事件又可以分為幾種類型
它們分別是常規信息
警告和錯誤
其中包括記錄序號(Record Number)
事件類型(Type)
標識符(Event ID)
來源(Source)
產生時間(Time Generated)
用戶名(User)和相關描述信息(Description)
有時間大家可以多看看事件信息
當然每個網絡管理員對它們應該是很熟悉的
不過還包括其他的事件日志信息
Windows系統下的ipconfig /all這個命令我是常常用
因為我們使用的是DHCP
沒事看看自己的IP地址變了沒有
其中包括詳細的網絡適配器的信息
包括適配器名稱
描述
硬件地址和類型
IP地址及相應的子網掩碼
網關與DHCP服務器地址等
不過您是否對網絡流量也感興趣呢?我們當然可以獲得主機接受/發送了多少(非)廣播數據報
出現了多少錯誤
一共接受/發送了多少信息
這些對每個網友都是有用的信息喲
網絡共享往往是大家注意的地方
您究竟共享了多少信息
它們的文件路徑是什麼
還有它們的共享類型信息
我們在不需要某些共享資料時
當然不要忘了將其刪除
以免洩露自己的機密信息
Windows的NT是一個多用戶的系統
允許多種類型用戶的存在
我們希望獲得用戶賬號的使用期限(Password Expired)
記住要不定時的修改用戶的密碼喲
以及用戶標識符(User ID)
組標識符(Group ID)
還有用戶賬號的類型(Type)
不同的類型有不同的權限
我們當然希望有最High的權力喲!看看系統對某個賬號的磁盤空間使用情況是否有限制(Max Storage)
賬號登錄的次數(Number Of Logon)和登錄時間信息(Logon Hours)等
對我們分析用戶的使用情況也有幫助的
系統的Win
服務和設備驅動信息也是很重要的
我們希望探測每個服務/設備啟動程序的具體路徑
狀態
類型
啟動方式等等信息
我們還希望對服務進行控制
比如停止
啟動和刪除操作
大家可以參閱《淺析Windows
/XP服務與後門技術》獲得更多關於Win
服務的信息
關機也不是那麼的單調的
您可以注銷自己的系統
如果您要離開當然就需要鎖定了
最近大家都不喜歡關機
太麻煩了
所以都習慣使用冬眠
系統將會為我們保留當前信息
不過還有支持電源管理的關機和休眠
Windows
的用戶注意了
我們同樣可以使用XP系統下的帶有到記時與消息提示的關機和重啟功能了
系統的版本信息是比較固定的
主要包括操作系統的指紋
注冊組織/用戶
主機名和系統相關目錄等信息
說了這麼多
我們也該談談如何實現了
窗口信息
MS為我們提供了打開特定桌面和枚舉桌面窗口的函數
hDesk=OpenDesktop(lpszDesktop
FALSE
DESKTOP_ENUMERATE);
//打開我們默認的Default桌面
EnumDesktopWindows(hDesk
(WNDENUMPROC)EnumWindowProc
);
//枚舉打開桌面上的所有窗口
由回調函數實現
BOOL __stdcall EnumWindowProc(HWND
LPARAM);
//在回調函數中
我們可以獲得窗口的標題和相關進程
線程信息
GetWindowText(hWnd
szWindowText
dwMaxCount);
GetWindowThreadProcessId(hWnd
&dwPID);
設備驅動器信息
設備驅動信息有服務控制管理器(SCM)來管理的
我要打開服務控制管理器
並枚舉所有的設備驅動器
OpenSCManager(NULL
NULL
SC_MANAGER_ALL_ACCESS);
//以所有權限打開服務控制管理器
EnumServicesStatus(schManager
dwDeviceType
dwDeviceState
EnumStatus
dwBufSize
&dwBytesNeeded
&dwDevicesReturned
&dwResumeHandle))
//枚舉所有設備的當前狀態
CloseServiceHandle(schManager);
//記住
在結束訪問後要關閉服務句柄
OpenService(schManager
szDeviceName
SERVICE_ALL_ACCESS);
//打開特定的設備驅動器
QueryServiceConfig(schDevice
lpDeviceConfig
*
&dwBytesNeeded)
//查詢驅動器的服務配置信息
QueryServiceStatus(schDevice
&DeviceStatus)
//查詢設備驅動器的當前狀態
QueryServiceConfig
(schDevice
SERVICE_CONFIG_DESCRIPTION
(LPBYTE)lpDeviceDescription
*
&dwBytesNeeded)
//查詢設備的描述信息
StartService(schDevice
NULL)
//啟動設備
ControlService(schDevice
SERVICE_CONTROL_STOP
&DeviceStatus)
//停止設備
DeleteService(schDevice)
//刪除設備
磁盤信息
我們希望獲得系統所有磁盤的信息
包括軟盤
硬盤
光盤等等
GetLogicalDriveStrings(dwBufferLength
lpBuffer);
//獲得邏輯設備的信息
GetVolumeInformation(lpRootPathName
lpVolumeNameBuffer
dwVolumeNameSize
&dwVolumeSerialNumber
&dwMaximumComponentLength
&dwFileSystemFlags
lpFileSystemNameBuffer
dwFileSystemNameSize);
//獲得磁盤卷信息
包括卷名稱和格式類型
GetDiskFreeSpaceEx(lpRootPathName
&FreeBytesAvailable
&TotalNumberOfBytes
&TotalNumberOfFreeBytes);
//探測磁盤的空間使用情況
From:http://tw.wingwit.com/Article/os/xtgl/201311/9379.html