加入收藏| 设为首页
黑客技术 >> 返回 您当前所在位置:首页 > 黑客技术 > 正文

利用BHO实现浏览器劫持,网页监控技术

更新时间:2018-10-17 11:02:46点击次数:756次字号:T|T

小常识:BHO(Browser Helper Object,浏览器辅佐目标,简称BHO)。BHO是微软推出的作为浏览器对第三方程序员敞开交互接口的业界规范,经过简略的代码就能够进入浏览器范畴的“交互接口”(INTERACTIVED Interface)。经过这个接口,程序员能够编写代码获取浏览器的行为,比方“撤退”、“行进”、“当前页面”等,运用BHO的交互特性,程序员还能够用代码操控浏览器行为,比方修正替换浏览器东西栏,增加自己的程序按钮等。这些在体系看来都是没有问题的。BHO本来的意图是为了更好的帮助程序员打造个性化浏览器,以及为程序供给更简练的交互功用,现在许多IE个性化东西就是运用BHO的来完成。


在正式编写代码之前,咱们需求了解一些东西,首先是IE浏览器加载BHO插件的原理。


1.IE的窗口翻开时,先寻觅HKLM下的SOFTWA RE\Microsoft\Windows\CurrentVersion\


Explorer\Browser Helper Objects\里的CLSID,这些CLSID,都对应着相应的BHO插件,然后依据这个CLSID到HKCR下的CLSIDs里找到此插件的信息,包含文件方位等。IE浏览器中的一个迅雷插件。


2.IE依据找到的CLSID信息创立BHO目标,而且查找IObjectWithSite接口。(这个接口十分简略,只要SetSite和GetSite两个办法)


3.IE把IWebBrowser2(浏览器插件)传到BHO的SetSite办法,用户在此办法中可挂载自己的事情处理办法。


4.窗口封闭时,iE把null传到BHO的SetSite办法,此办法用来去掉挂载的事情处理办法。


了解了IE浏览器加载BHO的办法之后,咱们就来看一下BHO插件的编写流程。


1、创立IObj ectWithSite显式接口,创立COM类型,完成承继IObjectWithSite接口


2、完成此接口并在SetSite办法里加上所要挂载的事情


3、处理事情


4、注册此BHO到注册表中HKLM下的Softw are\\Microsoft\\Windows\\CurrentVersion\\ExplorerBrowser Helper Objects;(HKCR下的CLSIDs是依据上面的路径自动注册的)


5、.net下须设置此BHO项意图”装备特点一>生成”中为Interop注册为True,这样才干将.net类库文件注册到COM。


咱们采用VC6.O创立好环境之后,就要进行代码的编写了。因为咱们在IE浏览器中加载插件,所以其他的浏览器咱们就不答应dll加载了。这样咱们就需求在dllMain函数中对加载该dll的程序进行判别,代码如下:




STDMETHODIMP CIEH1probj::lnvoke(DISPID dispidMemberm,REFIID riid,LCID lcid,WORD wFlags,




DISPPARAMS*pDispParams,VARIANT*pvarResult,




EXCEPINFO* pExceplnfo,UINT*puArgerr)


{


USES_CONVERSION;


if (!pDispParams)


return E_INVALIDARG;


LPOLESTR lpURL=NULL;


m_spwebBrowser2->get_LocationURL(&lpURL);


char sitelist{100}{1024};   //所有站点称号(1024)


char site{1024};             //站点称号


ifstream in("C:\\SiteList dat",ios::in);//从咱们的文件中读取要检测的网址


if(in.fail())


{


return E_INVALIDARG;


}




这段代码咱们增加在dllMain函数的开端方位,这样就能确保只要iexplore.exe才干加载咱们的插件。BHO目标与浏览器进行交互是经过事情完成的,那么他们之间的交互有几种事情呢?下面就罗列一下常用到的事情:


DISPID__ BEFORENAVIGATE2: 该事情在浏览器预备下载网页之前触发,这样这个事情就能够用在咱们检测用户输入的网页地址上。


DISPID_DOWNLOADBEGrN:该事情在浏览器开端下载网页时触发。


DISPID_NAVIGATECOMPLETE:该事情是在一个链接(网页窗口或许网页Frame结构窗口)被彻底翻开后,IE浏览器或WebBrowser控件触发的事情。这个事情现已废弃。应该运用DISPIDNAVIGATECOMPLETE2。


DISPID_DOVVrNLOADCOMPLETE:该事情在网页彻底被浏览器下载结束之后触发。


DISPID_DOCUMENTCOMPLETE:页面加载结束时触发该事情,当每个FRAME加载结束后都会触发DISPID_DOCUMENTCOMPLETE。能够在DISPID_DOCUMENTCOMPLETE中,判别是否是整个页面加载结束。


DISPID_NEWWINDOW2:该事情在有新的窗口翻开时触发,例如弹窗网页。


了解了上述的事情机制之后,咱们就清晰怎样编写咱们的代码了,既然是监控网址的,那么咱们能够在DISPID_BEFORENAVIGATE2事情中对网址进行监控。事情的办法咱们需求在Invoke函数中编写。这儿咱们用switch句子对事情进行判别,要处理的网址咱们放到文件里,让程序从文件里读取网址,然后与用户输入的网址进行比照。



编译之后生成了一个dll文件,这就是咱们需求的文件。咱们在网址文件中写入咱们需求拦截的网址,这儿用百度做测试。下一步就是注册咱们的dll文件,用cmd命令“regsvr32 c://IEHelper.dll”来注册,注册成果,注册成功。咱们翻开一个新的网页,输入网址百度回车,弹出了咱们的显现信息,ok,到这儿咱们的意图就完成了,当然读者能够经过修正风险散步供给的代码进行二次开发,能够完成网址替换、网页内容替换等等功用功用,这些有待读者自己发掘。代码现已为读者打包,记住不是用的时分别忘记写在插件,或许直接删去就能够了。