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

时间:2021-06-13 16:53:50

申明:  本文涉及到的技术只供参考研究之用,不可用于非法行为,本人不负责。

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/%22),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 ;

 

如图: 

反流技术之IE插件技术研究第一部分
功能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"
这样不容易导至你天天自动去运行恶意程序.