BHO C# IE 插件.docx

上传人:b****3 文档编号:3650921 上传时间:2022-11-24 格式:DOCX 页数:13 大小:817.47KB
下载 相关 举报
BHO C# IE 插件.docx_第1页
第1页 / 共13页
BHO C# IE 插件.docx_第2页
第2页 / 共13页
BHO C# IE 插件.docx_第3页
第3页 / 共13页
BHO C# IE 插件.docx_第4页
第4页 / 共13页
BHO C# IE 插件.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

BHO C# IE 插件.docx

《BHO C# IE 插件.docx》由会员分享,可在线阅读,更多相关《BHO C# IE 插件.docx(13页珍藏版)》请在冰豆网上搜索。

BHO C# IE 插件.docx

BHOC#IE插件

IE插件技术BHOC#IE插件

这类的文章比较少,尤其那种IE插件类型的,大多数就是个webbrowser而已,但网上还是有的转载一篇吧!

在给出其他连接!

用C#搭建IEBHO勾子,取表单密码

授权CSDN,请在征求同意后转载.作者:

陈嘉,NetSecureInc,Canada,软件工程师

微软在1997年正式退出BrowserHelperObject(BHO),使程序员能够更好的对IE进行二次开发和操作.在通过编写BHO程序数月后,我希望把我的一些经验告诉才开始的同志,避免走一些弯路.

我本人是非常喜欢C++的.因为C++对内存直接操作的方式可以节省非常多的内存损耗,也更快一些.但是在开发BHO的时候,我的确也认识到,C#明显要比C++强大很多.例如C#提供的FOREACH循环就可以避免FOR循环产生的溢出.另外C#的类型转换也明显要强于C++.毕竟BHO和C#都是出自微软一家,理所当然,C#更适合BHO开发一些.我的第一个BHO程序是用C++写的.对于COM的操作,让我至少弄了几天才搞清楚他们到底想干什么.但是我的第一个C#BHO程序只用了几分钟就搭建好了钩子.如果你希望从事BHO开发,而且你才开始学.我想这片篇文章对您有点帮助.

这篇文章本来是用英文写成的.因为工作环境的原因,中文已经越来越生疏.如果有错误或者不太明显的地方.请参考英文原文

下面竟让我们开始.

首先我们需要在C#中新建一个DLL工程.因为BHO是通过让IE调用DLL来驱动的.我用的是VC#EXPRESS.因为这已经完全够用了.VC#PROFESSIONAL并不需要,而且还很浪费内存. 

当我们建立一个空工程以后,随便添加一个文件夹叫BHO,然后添加一个文件.

 

需要我们注意的是,我们这个文件必须被命名为IObjectWithSite.cs因为这样IE才知道这是一个BHO程序.如果想知道更多关于IObjectWiteSite接口的内容,请查询MSDN 

在IObjectWithSite中必须有两个方法GetSite和SetSite.我们主要是对后者进行调用.通过名字大家就可以猜到他们是干什么的.

GetSite:

 GetsthelastsitesetwithIObjectWithSite:

:

SetSite.Ifthereisnoknownsite,theobjectreturnsafailurecode.

SetSite:

 Providesthesite'sIUnknownpointertotheobject.

请把VSSTUIDO默认的类名给去掉.因为IObjectWithSite并不是一个类,而是一个接口.

 

不要忘记添加System.Runtime.InteropServices

下面我们再添加剂一个叫BHO.CS的主文件.

这个新建的类是基于IObjectWithSite接口的.正如同我前面讲的.你就是通过这个接口来调用IE.

为了使用微软的BHO库.我们必须添加下面两个库:

SHDocVwandMSHTML.他们一般都在Windows\System32下面

SHDocVwis MicrosoftShellDocObjectandControlLibrary

MSHTMLis:

  AllinterfacesforaccessingtheDynamicHTML(DHTML)ObjectModelarebasedonIDispatchandarethebasisofaccesstotheobjectmodelthatisalsousedbyscripts. 

光usingSHDocVw"是不够的,你需要添加

AddSHDocVw 

因为稍后我们需要用到MESSAGEBOX,所以这里我也添加了一个WINDOWSFORM库.

下面添加两个变量:

WebBrowserandHTMLDocument.就如同他们的名字.一个是IE的变量,另外一个是IE所访问的HTML页变量.

下面在这个类中田间一个叫OnDocumentComplete的函数.取其他名字也行,没什么太大关系.但是这里为了CODE的可用性,我们叫OnDocumentComplete.这个函数实际上是和CDHTMLDIALOG下面的OnDocumentComplete所对应的.

CDHtmlDialogClass  .

OnDocumentComplete的触发是在一个HTML页被LOAD完以后.你也可以避免用Navigate()orOnBeforeNavigate().他们表示在发出访问和访问之前触发.

Pleasereferto  tofindoutwhatyouneedexactly.

在IObjectWithSite.cs下,你需要支出IE的GUID,这样才方便注册表的更改.

另外你需要给自己的程序添加一个GUID.这样IE才能在注册表中找到你的信息.你可以使用System.Guid.NewGuid()method来得到一个GUID.这比C++得到GUID的方法要容易得多了.

我们必须给SetSiteandGetSite加上内容.在SETSITE中我们就需要加入一个EVENTHANDLER,让IE来触发我们的OnDocumentComplete函数.

Addonemorereference

在BHO.CS下我们需要为我们的DLL添加register/unregister函数.

 

编译,我们就有了我们的DLL.

下面通过DOS下的regasm/codebase"BHOHelloWorld.dll"命令在注册dll.这里有一个问题了,为什么?

因为我们忘了把我们的主类设置成PUBLIC,所以别人都不能调用到你的类.自然注册不了.

然后就成功了.

打开注册表,找到BrowserHelperObjectunderLOCAL_MACHINE->SOFTWARE->MICROSOFT->WINDOWS->EXPLORER,看看是不是有变化了?

我们注册完了,下面就是来写我们的住程序来控制IE了.下面就是一个例子来抓去你正访问的页面上的所有INPUT元素的NAME.

在DOCUMENT中,我们的所有元素都为IHTMLElement,我们需要调用的是IHTMLInputElement.所以我们通过GetElementByTagName的方法来查找所有的INPUTELEMENT.在找到以后还需要进行类型转换才能找到对应的ATTRIBUTE.否则IHTMLElement是不代有NAMEATTRIBUTE的.IHTMLElement提供的ATTRIBUTE都是所有元素都有的.例如ID,例如TITLE,例如OnClick等.有的元素有自己特有的ATTRIBUTE,例如INPUT有OnFocus这就必须要转换成IHTMLInputElement才能上使用.INPUT对应的IHTMLInputElement,Select->IHTMLSelectElement.......

 

Thereyougo,see?

下面我们试另外一个方法叫BeforeNavigate().它的触发是在你开始下一个页面之前.也就是说例如你要提交一个表单,页面要变化了,他就被触发.实际上MS提供了两个类似的接口BeforeNavigateandBeforeNavigate2().大家可以查MSDN看看有什么区别.这里我们不多讲了.

同样我们添加一个对应的函数原形(点图片,看大图).

添加EVENTHANDLER

我们下面要干的是截获页面上的密码.

See,howeasily,youcangetit.

通过上面的过程.我希望您对BHO有一个初步的了解.如果想知道更多内容,请访问MSDN.里面有非常详细的介绍.这里也引出了一个话题.我们可以看到,几乎用不了两分钟我们就可以截获你填写的任何内容,你觉得IE是安全的吗?

即使他可以通过SSL来对进出网卡的内容加密,但是在应用层一样是如此的薄弱.另外大家如果用IE都会发觉泛滥成灾的ADD-ON,这就是因为BHO惹的祸.

 

原文连接:

推荐系列文章:

C#开发BHO插件UrlTrack 

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

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

特别推荐博主空间:

 

为了您的安全,请只打开来源可靠的网址

打开网站    取消

来自:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1