反流技術之IE插件技術研究第一部分

申明:  本文涉及到的技術只供參考研究之用,不可用於非法行爲,本人不負責。

A. 寫在開始:

繼寫了木馬技術研究第一部分 後, 我發現我的blog,PageRank上升了.最終發現中國的很多網站上摘抄我blog上的一些文章. 我寫的東西很少,而能讓別人摘抄, 怎麼說也是一件榮幸的事. 這裏只希望摘抄文章的朋友能夠繼續深入研究,
爲中國的反流反木馬事業做點貢獻. 我的文章能啓到拋屎引玉的程度,那就可幸了.

今天我要寫的主題是反流技術之IE插件技術研究第一部分.
google: IE插件技術, 結果是很多IE插件安裝程序的下載...
從而讓人想到的是中國internet 網的現狀. 流軟橫行的世界.

3721 VS 殺毒軟件的事,更是讓人鬱悶. 因此, 讓我提筆寫點IE插件技術的研究的相關文字.

 

B. 什麼是流氓IE插件, 什麼是IE插件技術

技術不存在流氓不流氓, IE插件技術並非從古到今就是用於流氓事情的.
所以本文所討論的技術希望大家能用於反流事業. 但現在要反流必須先要研究流氓軟件.

例如:
3721使用的技術是所有流氓軟件都可以參考的.
早在2000年,3721沒有出來的時候,就已經有了使用BHO技術的IE Tool Bar. 現在市面上的IE Tool bar 層出不窮.讓人感覺好像是能做IE Toolbar的都做了自己的IE Toolbar, 都說自己Toolbar有多少歷害, 什麼攔截窗口啊的...

從社會經濟角度看, 大多數公司都是利益爲重, 開公司就是爲了賺錢. IE Toolbar 至少是一種非常好的宣傳方式.

從技術角度看, 沒有一家公司的toolbar 能做到真正意義上的: 攔截窗口 這個功能,更不用說其他什麼功能了.或許有些toolbar作者看了這話不服, 那麼請繼續看下去就知道了.我會在技術層面上分析的很清楚.

從技術角度看3721和流氓軟件也差不多. 但3721做的事和流氓軟件做的事完全不一樣.流氓軟件可能會隱藏使用IE打開一個網頁, 那個網頁的流量自然是增大了, 同時還可能使用下載者之類的局域網感染技術, 如果本機所在局域網的某些或全部電腦的安全做的不是太好. 那就有被感染的危險.

總之有一點, 你的代碼在IE進程運行或者是在Explorer進程運行,或者是自己獨立的進程運行或者是其他無進程方式運行, 那麼你的Toolbar, 你的插件 還有什麼事情不能做的?

關鍵看你的插件做的事情是什麼事情, 而來定義是否是屬於流氓性質.

 


C. IE插件主要實現技術

1.分析:
大家都知道Microsoft 公司出品的 Internet Explorer 瀏覽器, 熟稱: IE, 使用Internet Explorer_Server class封裝,
其中實現: IWebBrowser2 接口, GUID: {D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}
而IWebBrowser2 接口下有: 非常重要兩個Navigate和Navigate2 API
具體參考MSDN.

 

MSDN上的描述:
This interface enables applications to implement an instance of the WebBrowser control (Microsoft® ActiveX® control) or control an instance of the InternetExplorer application (OLE Automation). Note that not all of the methods listed below are supported by the WebBrowser control.

Remarks
 The IWebBrowser2 interface derives from IDispatch indirectly. IWebBrowser2 derives from IWebBrowserApp, which in turn derives from IWebBrowser, which finally derives from IDispatch.
Note 
 The IWebBrowser and IWebBrowserApp interfaces are deprecated.

Interface Information:
Stock Implementation shdocvw.dll
Custom Implementation No
Inherits from IDispatch
Header Exdisp.h
Minimum availability Internet Explorer 4.0
Minimum operating systems Windows 95, Windows NT 4.0, Windows CE 2.12


從MSDN上了解到是這樣的情況: IDispatch->IWebBrowser->IWebBrowserApp->IWebBrowser2
另外所有的封裝是在shdocvw.dll裏面.
發現shdocvw.dll, BROWSEUI.dll是相互依賴的, 使用了delayload技術. 同時delayload 了非常重要的MSHTML.dll

當然這些我們只作初步研究, 如果再深入研究, 會發現這些dll裏面導出了很多實用的API. 以及他們之間是如何相互工作的.

我們的主要研究目標就是: IWebBrowser2 interfaceIHTMLDocument2 interface

 

2. 實例演示應用IWebBrowser2, IHTMLDocument2:

關於WebBrowser View, Microsoft出品的VC中的MFC庫已經封裝了一個CHtmlView的class, 可以非常方便的讓開發人員使用.
那我們先來看看這個CHtmlView

2.1. 簡單CHtmlView應用的實例:

注意, 請有COM, VC基礎的程序員參考實例. 沒有相關基礎知識的程序員,請繼續學習基礎知識.

使用VC隨便建個單文檔的窗口應用程序, View繼承於CHtmlView 就可以了.
step 1:
OnInitialUpdate()
裏面寫上: Navigate2(_T("http://www.google.cn/"),NULL,NULL );
代表使用本HtmlView 打開 http://www.google.cn

step 2:
通過IHTMLDocument2得到源HTML代碼.
CHtmlView 實現了: LPDISPATHCH GetHtmlDocument() API
所以我們可以非常方便的得到IHTMLDocument2對象, 代碼如下:

CComPtr < IDispatch >  pDisp  =   this -> GetHtmlDocument();
CComQIPtr
< IHTMLDocument2,  & IID_IHTMLDocument2 >  spHTML  =  pDisp;

當然我們可以直接使用:
IHTMLDocument2* .. 的方式, 但是使用智能指針, 何樂不爲.

下面代碼實現從IHTMLDocument2 得到 Body 對象,然後得到源HTML代碼.

CComQIPtr < IHTMLElement >  body;
HRESULT hr 
=  spHTML -> get_body(  & body ); 
if  (FAILED(hr))
 
return  FALSE;

//  Get the HTML text
BSTR bstrHTMLText;
hr 
=  body -> get_outerHTML( & bstrHTMLText);  //  get_innerHTML( ... ) 也行.
if  (FAILED(hr))
 
return  FALSE;


加public virtual API: virtual void OnDocumentComplete(LPCTSTR lpszURL);
實現在完成打開一個URL後, 取得源HTML代碼. 並彈出非模式對話框顯示源HTML代碼.

具體限於篇幅, 參考源程序:  DVBowser_Code.zip


2.2. 深入CHtmlView應用

有了第一個CHtmlView應用的示例實驗, 相信大家比較瞭解HtmlView 的機制了.

那我們來償試實現一下現在市面上IE插件實現的一些功能.

功能a . 轉Url
調用:Navigate2 API就可以了.

功能b . 改Google 首頁圖片爲baidu.com的logo:
http://www.baidu.com/img/logo.gif
(該功能流軟作者可以擴展爲非常複雜的非常多的功能.
這裏只是爲了瞭解相關技術, 只作一個功能的單一示例.)

重新設置Body 源HTML代碼就可以實現.
關鍵代碼:

//  Replace
strText.Replace(  " /intl/zh-CN/images/logo_cn.gif " " http://www.baidu.com/img/logo.gif "  );
  
BSTR bszNewHTML 
=  strText.AllocSysString();
hr 
=  body -> put_innerHTML( bszNewHTML );
SysFreeString( bszNewHTML );

if  (FAILED(hr))
return ;

 

如圖: 


功能c. 彈IE
一句話代碼:
WinExec( "EXPLORER.EXE http://blog.csdn.net/davemin/ ", SW_NORMAL );
讓所有IE攔截工具都無效.
當然我們也可以先查註冊表, 找到IE路徑, 然後來打開.

如果改參數: SW_NORMAL 爲SW_HIDE, 那麼用戶就看不到了. 就更下流了.

具體限於篇幅, 參考源程序:  DVBowser2_Code.zip

最後爲QQ羣作下宣傳, 歡迎同仁加入VC技術羣:30107096  VC技術羣2: 30734090  Dotnet羣: 9949057


觀注下一篇: 反流技術之IE插件技術研究第二部分
2.3. BHO 示例
2.4. 其他應用IWebBrowser2接口的瀏覽器
等等內容.


安全提醒:
最近發現很多電腦的桌面上的IEXPLORE其實是惡意程序,
請大家把桌面上的IEXPLORE換成一個.lnk快捷方式, 直接指向IE:
"C:/Program Files/Internet Explorer/IEXPLORE.EXE"
這樣不容易導至你天天自動去運行惡意程序. 

 

 

 

 

 

 

---------

2011.01.17 更新了附件URL, 目前提供的222主機上的附件(源代碼zip文件)爲可下載的正確的附件(源代碼zip文件).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章