电竞比分网-中国电竞赛事及体育赛事平台

分享

ActiveX控件解析

 北風(fēng)雨 2011-09-05

ActiveX控件解析

ActiveX是Microsoft對于一系列面向?qū)ο蟪绦蚣夹g(shù)和工具的稱呼,其中主要的技術(shù)是組件對象模型(COM)。ActiveX控件是Microsoft為抗衡Sun的JAVA技術(shù)而提出的,功能和JAVA applet功能類似。在Windows系統(tǒng)中,有一些以O(shè)CX結(jié)尾的文件。OCX代表"對象鏈接與嵌入控件"(OLE),用于處理桌面文件的混合使用。現(xiàn)在COM的概念已經(jīng)取代OLE的一部分,Microsoft也使用ActiveX控件代表組件對象。組件的最大優(yōu)點(diǎn)就是可以被大多數(shù)應(yīng)用程序再使用(這些應(yīng)用程序稱為組件容器)。使用ActiveX控件可快速實(shí)現(xiàn)小型的組件重用、代碼共享,從而提高編程效率,降低開發(fā)成本。大家小時(shí)候都玩過七巧板和積木,用簡單的形狀就能構(gòu)造出我們所能想象出的各種千奇百怪的物體,編程也是這樣,組件就好比積木塊,我們把組件按不同的方式組合起來,就能實(shí)現(xiàn)單個(gè)程序達(dá)不到的功能。ActiveX控件運(yùn)行在客戶端。通過它,我們可以獲得客戶端的一些信息,如IC卡的信息,客戶端的驗(yàn)證等,同時(shí),它也可以在我們?yōu)g覽網(wǎng)頁時(shí),得到更多的功能體驗(yàn),比如觀看Flash動畫、欣賞電影、歌曲等等。但是ActiveX控件也有許多缺點(diǎn),最大的缺點(diǎn)是客戶端的部署很困難,如客戶端不能正確下載,下載了以后不能正確執(zhí)行,下載的時(shí)候需要設(shè)置IE的安全級別等等,這也是我行網(wǎng)銀使用中客戶咨詢的熱點(diǎn)。另外一個(gè)缺點(diǎn)就是由于ActiveX控件可被黑客用來放毒,所以大多數(shù)安全類軟件都會對其嚴(yán)防死守,這也給我行的控件安裝帶來了很大的影響。為了幫助大家解決控件安裝使用中的一些問題,我將從以下幾方面對控件做一個(gè)簡單的介紹。

 

控件的工作原理

在介紹控件之前,有必要先來講一下GUID。

在生活當(dāng)中,很多事物都可以用一個(gè)編號來進(jìn)行標(biāo)識,汽車可以用號牌來標(biāo)識,網(wǎng)卡可以用MAC地址來標(biāo)識,而人也可以用身份證號來標(biāo)識,那么在軟件世界,面對不同的國家、不同的廠商以及他們所開發(fā)出來的不同的組件、不同的接口,我們怎么來標(biāo)識呢?我們是用一個(gè)GUID結(jié)構(gòu)來標(biāo)識不同的對象、組件及接口的,GUID是英文globally unique identifier(全球唯一標(biāo)識符)的首字母縮寫,它是微軟使用的一個(gè)術(shù)語,通過特定的算法,它可以給某一個(gè)實(shí)體創(chuàng)建一個(gè)唯一的標(biāo)識,并且此標(biāo)識符是全球唯一的。

一個(gè)GUID共有128位長(16字節(jié)),形如XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。其中每個(gè)X是0-9或A-F范圍內(nèi)的一個(gè)十六進(jìn)制的數(shù)字。根據(jù)定義,GUID在時(shí)間和空間上都是唯一的。為保證空間唯一性,每一個(gè)GUID需要一個(gè)對于生成它的計(jì)算機(jī)來說是單一的48位值。這個(gè)值一般就是機(jī)器所裝網(wǎng)卡的地址。使用這個(gè)值可以保證不同的機(jī)器上所生成的GUID值是不相同的。為保證時(shí)間上的唯一性,每一個(gè)GUID值具有一個(gè)60位的時(shí)間戳。這個(gè)時(shí)間戳表示自1852年10月15日00:00:00.00以來以100納秒為間隔的記數(shù)值。根據(jù)目前的算法,可保證到公元3400年GUID值仍然是唯一的。

GUID的使用非常廣泛,我們平時(shí)經(jīng)??吹?,如注冊表、類及接口標(biāo)識、數(shù)據(jù)庫、以及自動生成的機(jī)器名、目錄名等,你可以打開你的系統(tǒng)盤下的\WINDOWS\Installer目錄,可以看到很多類似{0A869A65-8C94-4F7C-A5C7-972D3C8CED9E}的文件夾,這就是系統(tǒng)自動生成的目錄名。至于注冊表中更是到處都是它的影子。

咦, 圖片找不到了耶!

當(dāng)我們?yōu)g覽網(wǎng)頁時(shí),控件是如何下載并安裝到我們的計(jì)算機(jī)上的?為了弄清楚這個(gè)問題,先來看下面的一段網(wǎng)頁代碼。

<object id="safeSubmit1"
classid="CLSID:8D9E0B29-563C-4226-86C1-5FF2AE77E1D2"
codebase="/icbc/newperbank/AxSafeControls.cab#version=1,0,0,6"
style="HEIGHT: 0px; WIDTH: 0px" VIEWASTEXT>
</object>

這段代碼是我行個(gè)人網(wǎng)銀登錄頁面中的一部分,object元素表示將向網(wǎng)頁文件中插入一個(gè)對象,classid屬性是該對象的類標(biāo)識,它的值形如"CLSID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",表明這是一個(gè)ActiveX控件。codebase屬性是該控件的URL地址,它指向一個(gè)cab文件,這個(gè)文件是控件開發(fā)商打包發(fā)行的,里面是控件的執(zhí)行文件,有.dll文件、.ocx文件、.exe文件等,為了能夠自動安裝和注冊控件,一般還有INF文件來記錄相關(guān)的一些安裝信息。"1,0,0,6"是服務(wù)器上該控件的版本號。系統(tǒng)會根據(jù)classid先到注冊表中去查詢,查詢該控件的安裝及版本信息,查詢路徑是"HKEY_CLASSES_ROOT\CLSID\{8D9E0B29-563C-4226-86C1-5FF2AE77E1D2}\",如果鍵值不存在,則控件需要新安裝,如果鍵值存在但版本號小于服務(wù)器上的版本號,則會更新控件。

以上面的例子說明,當(dāng)瀏覽器解析出object元素時(shí),IE會按照以下流程進(jìn)行處理:

  1. 通過URL鏈接下載必要的文件(.cab、.inf或者.exe);
  2. 執(zhí)行WinVerifyTrust函數(shù)對下載文件進(jìn)行驗(yàn)證,確保文件是安全的;
  3. 完成所有COM組件的自注冊,這是調(diào)用組件執(zhí)行文件中的DllRegisterServer函數(shù)來完成的;
  4. 向注冊表中添加注冊信息;
  5. 執(zhí)行函數(shù)CoGetClassObjectFromURL,返回類廠接口指針;
  6. 執(zhí)行函數(shù)CoCreateInstance,創(chuàng)建組件對象實(shí)例。

 

好了,到這里,一個(gè)組件實(shí)例就生成了。這個(gè)過程我寫得比較簡單,大家如果有興趣,可以看些軟件開發(fā)類的書籍,大多數(shù)人只要清楚大概的流程就行了。

控件安裝前的IE瀏覽器設(shè)置

為了能夠順利下載和安裝ActiveX控件,我們需要對IE瀏覽器做必要的設(shè)置,特別是安全級別,安全級太高,很多控件都不可能正常下載,即使下載了也無法安裝,安全級太低,又容易引起很多安全問題。那怎樣設(shè)置才合理呢,我的建議是添加信任站點(diǎn),將一些銀行網(wǎng)站、支付寶等加入信任站點(diǎn),然后將信任站點(diǎn)的安全級別設(shè)為"低",把控件的有關(guān)選項(xiàng)全部"啟用",而Internet域的安全級別可設(shè)置得高一點(diǎn),這樣,我們就既可以有針對性的安裝需要的控件,又可以防止一些惡意控件帶來的安全問題。具體地設(shè)置步驟,大家可以參考這里

控件的安裝

一般來說,只要IE設(shè)置正確,那么控件會自動下載并安裝,除非你的防火墻和殺毒軟件等對它進(jìn)行了攔截,現(xiàn)在大多數(shù)的病毒和木馬是在我們?yōu)g覽網(wǎng)頁時(shí)下載和傳播的,殺毒軟件對控件防范還是很嚴(yán)密的,如果總是安裝不成功,可能得考慮將殺毒軟件和防火墻關(guān)閉了。關(guān)于瀏覽網(wǎng)頁時(shí)安裝控件的操作過程,大家可以參考一下在瀏覽網(wǎng)頁時(shí)如何安裝控件。

控件的注冊

對于應(yīng)用軟件來說,一般都有一個(gè)安裝程序,在用戶執(zhí)行安裝程序時(shí),ActiveX控件將自動在用戶機(jī)器上安裝并注冊。

對于IE來說,在安裝控件的時(shí)候,它也會自動地進(jìn)行注冊。

對于從網(wǎng)上下載的一些控件,要想使用它們,得手工注冊后方可使用,還有一些控件,由于注冊信息遭到破壞,無法正常使用時(shí),我們也需要手工注冊。這個(gè)過程可以通過執(zhí)行Regsvr32.exe文件來完成。

Regsvr32.exe位于\Windows\System目錄(Windows Me/Windows 98/Windows 95)或者\Windows\System32目錄(Windows NT/Windows XP/Windows Vista),是32位系統(tǒng)下使用的DLL注冊和反注冊工具,使用它必須通過命令行的方式使用。它的使用語法如下:

Regsvr32 [/u] [/n] [/i[:cmdline]] dllname
/u - 反注冊DLL文件。
/i - 調(diào)用DllInstall時(shí)將它傳遞到可選的[cmdline];在與/u共同使用時(shí),
它卸載DLL文件。
/n - 不調(diào)用DllRegisterServer,它必須與/i連用。
/s - 安靜模式,即在注冊/反注冊時(shí)不顯示結(jié)果提示框。(Windows XP和
Windows Vista中加入)
dllname - 指定要注冊的DLL文件名。

輸入DLL文件名時(shí),如果是非系統(tǒng)文件,必須使用文件絕對路徑,文件路徑中不包含中文,否則很可能導(dǎo)致處理失敗。如果regsvr32不能正常執(zhí)行,很可能系統(tǒng)文件遭到破壞,因?yàn)槭褂胷egsvr32.exe時(shí)會調(diào)用Kernel32.dll、User32.dll和Ole32.dll三個(gè)文件,在DOS模式或其它系統(tǒng)替換正常文件即可解決。

咦, 圖片找不到了耶!

控件的禁用

有時(shí)我們根據(jù)需要,不希望某些控件運(yùn)行,這時(shí)我們就需要對相關(guān)控件進(jìn)行禁用,禁用控件很簡單,可以在IE中設(shè)置,也可以直接在注冊表中設(shè)置。

在IE中禁用控件,打開Internet選項(xiàng),單擊程序選項(xiàng)卡,單擊管理加載項(xiàng),這里列出了IE中加載的所有控件,我們選中需要禁用的控件,選擇禁用就行了。

咦, 圖片找不到了耶!

咦, 圖片找不到了耶!

我們將網(wǎng)銀輸入控件禁用后,大家可以看一下結(jié)果。

咦, 圖片找不到了耶!

除了在IE中設(shè)置外,我們也可以在注冊表中進(jìn)行控件的禁用。打開注冊表編輯器,進(jìn)入路徑"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Settings\",下面已經(jīng)有一些控件了,我們可以試著增加一條,點(diǎn)擊Settings,新建一個(gè)項(xiàng),就輸入"{73E4740C-08EB-4133-896B-8D0A7C9EE3CD}"吧,在該鍵值下,我們新建兩個(gè)值,一個(gè)是"Flags",類型是"DWORD",值為"1",一個(gè)是"Version",類型是"字符串",值為"*"。好了,大家再登錄一下網(wǎng)銀試試看。

咦, 圖片找不到了耶!

咦, 圖片找不到了耶!

咦, 圖片找不到了耶!

有時(shí)我們一打開某個(gè)網(wǎng)頁,IE就提示"非法關(guān)閉",這很可能是因?yàn)樵摼W(wǎng)頁加載的控件被破壞,這時(shí),我們可以將已加載的控件逐個(gè)禁用,來找到出現(xiàn)問題的控件,然后將之刪除或者重新安裝,解決IE的故障。

控件的免疫

不知你有沒有遇到過這種事,無論你把控件安裝程序執(zhí)行多少遍,控件始終不起作用,網(wǎng)銀也用不了,這時(shí)很多人都會選擇重裝系統(tǒng)。其實(shí),這個(gè)問題很好解決,原因也很簡單,控件可能被殺毒軟件給免疫了,我們只需要解除免疫,就可以解決這個(gè)問題??丶庖吆涂丶檬遣灰粯拥模丶煤?,我們還可以在IE瀏覽器中看到這個(gè)控件,并且可以啟用它,然而控件一旦被免疫,那么IE瀏覽器就對它完全視而不見,根本不會去理它。

咦, 圖片找不到了耶!

不管控件是被禁用,還是被免疫,現(xiàn)象都是一樣的。

咦, 圖片找不到了耶!

那么怎樣才能對控件實(shí)行免疫呢?方法跟控件禁用差不多,我們還是要先弄清楚目標(biāo)控件的CLSID,這是一個(gè)GUID值,千萬不能搞錯(cuò)了,最穩(wěn)妥的方法當(dāng)然是咨詢控件開發(fā)商,可這不太現(xiàn)實(shí),那我們只好自已找了,一般而言,我們可以通過搜索注冊表中HKEY_CLASSES_ROOT\CLSID路徑下的ProgID鍵值來確定控件的CLSID。有了這個(gè)值就好辦了,比如我們要免疫網(wǎng)銀輸入控件,打開注冊表編輯器,進(jìn)入路徑"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility",在該鍵值下增加一項(xiàng),輸入"{73E4740C-08EB-4133-896B-8D0A7C9EE3CD}",在該項(xiàng)下,我們新建一個(gè)DWORD類型的值,名字叫"Compatibility Flags",值為"0x00000400"(十進(jìn)制為1024)。這樣,我們就將網(wǎng)銀輸入控件給免疫了。免疫后,只要不啟用IE中的"對未標(biāo)記為安全的ActiveX控件初始化并執(zhí)行腳本"選項(xiàng),IE就不會調(diào)用該控件。

咦, 圖片找不到了耶!

將"Compatibility Flags"的值修改為"0",哈哈,該控件就解除免疫了。為了安全起見,除非你確實(shí)沒有辦法了,可以按照這個(gè)方法來分析解決控件安裝的問題,對于新手而言,最好還是使用相關(guān)工具。

控件的卸載和刪除

控件如果不再使用了,我們需要將其從系統(tǒng)中刪除,大家可以按照以下流程來完成刪除工作。

  1. 單擊開始,指向設(shè)置,單擊控制面板,雙擊添加或刪除程序,然后單擊更改或刪除程序選項(xiàng)卡。
  2. 如果要?jiǎng)h除的ActiveX控件出現(xiàn)在安裝的程序列表中,請單擊該控件,單擊更改/刪除,然后按照屏幕上的說明操作。如果ActiveX控件沒有出現(xiàn)在安裝的程序列表中,則繼續(xù)執(zhí)行下一步。

    咦, 圖片找不到了耶!

  3. 在資源管理器中,雙擊"Windows\Downloaded Program Files"文件夾或 "Winnt\Downloaded Program Files"文件夾,右鍵單擊想要?jiǎng)h除的ActiveX控件,然后單擊刪除。
  4. 在系統(tǒng)提示是否刪除該控件后,單擊。

 

咦, 圖片找不到了耶!

如果你要嘗試刪除的ActiveX控件當(dāng)前在內(nèi)存中由IE或"活動桌面"組件加載,會顯示"共享沖突"的錯(cuò)誤信息,要解決此錯(cuò)誤消息,可以按照下列步驟操作:

  1. 關(guān)閉所有打開的IE窗口。
  2. 禁用"活動桌面"。
  3. 重新啟動Windows。
  4. 按前文介紹的步驟刪除ActiveX控件。

 

控件的安全性

ActiveX控件盡管增加了我們上網(wǎng)沖浪時(shí)的樂趣,與此同時(shí),它也給我們埋下了巨大的安全隱患,它是一種極其危險(xiǎn)的提供功能的方法(目前正在被MS逐漸冷落),因?yàn)樗且环N組建對象模型(COM)的對象,只要電腦的用戶可以完成的任務(wù),它都可以完成。比如它可以存取注冊表,可以隨意訪問本地文件系統(tǒng)等等。一個(gè)網(wǎng)頁上面的控件一般有2種不安全的狀態(tài),一種是腳本的不安全,一種是初始化的不安全。當(dāng)用戶將一個(gè)壓縮解壓縮空間指向一個(gè)遠(yuǎn)程被壓縮的包含特洛伊木馬的系統(tǒng)文件并且需要控件來解壓縮這個(gè)文件時(shí),系統(tǒng)安全會被打破。這個(gè)狀態(tài)就是初始化的不安全。從代碼的角度來講,如果控件從IPersist派生,也就是說控件實(shí)現(xiàn)了永久性,那么就會觸發(fā)unsafe for initializing。而在腳本程序安全執(zhí)行以前,一個(gè)控件依賴于特定的系統(tǒng)設(shè)置,那么在允許這段代碼運(yùn)行之前控件的開發(fā)人員需要提供一些必要的代碼。這意味著如果控件從IDispatch派生,也就是說控件支持腳本,那么就會觸發(fā)unsafe for scripting。

從用戶下載一個(gè)ActiveX控件開始,這個(gè)控件就很容易被攻擊,因?yàn)榫W(wǎng)絡(luò)上任何網(wǎng)絡(luò)程序都可以使用它,無論是出于友好的目的還是惡意的目的。因此IE瀏覽器總是試圖彈出一個(gè)對話框來告訴你,這個(gè)控件可能是不安全的。這幾乎總是一個(gè)很好的預(yù)防網(wǎng)絡(luò)攻擊的好方法,但是對于那些我們認(rèn)為總是安全的控件,我們?nèi)匀灰邮苓@種IE產(chǎn)生的干擾,這就使人厭煩了。為了解決這個(gè)問題,開發(fā)商可以采用軟件簽名技術(shù)。但代碼簽名證書價(jià)格不菲,不是一般人用得了的,同時(shí),即使ActiveX控件具有有效的數(shù)字簽名,在計(jì)算機(jī)上安裝這些ActiveX控件時(shí)也應(yīng)該謹(jǐn)慎。關(guān)于控件的安全性,涉及很多技術(shù)問題,這里就不多討論了,有興趣的朋友可以參考一下文章《為什么基于ActiveX的安全控件一定是不安全的》。


    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多