BHO C# IE 插件.docx
- 文档编号:3650921
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:13
- 大小:817.47KB
BHO C# IE 插件.docx
《BHO C# IE 插件.docx》由会员分享,可在线阅读,更多相关《BHO C# IE 插件.docx(13页珍藏版)》请在冰豆网上搜索。
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插件技术研究第二部分
特别推荐博主空间:
为了您的安全,请只打开来源可靠的网址
打开网站 取消
来自:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BHO C# IE 插件
![提示](https://static.bdocx.com/images/bang_tan.gif)