软件内嵌页面被运营商插入广告的处理方法

本文仅讨论内嵌页面被插入广告的处理(可控制的IWebBrowser2)


一些内嵌页面的软件往往被无耻的电信运营商加入广告弹窗,严重影响用户体验和口碑,我将在这里讨论几个现象和方法,希望可以给大家一些启发。


一、直接弹窗类

这个我定义为只要是打开你的页面,随之就会弹出一个或数个另外的IE或其他浏览器窗口,显示广告或其他推广内容。(比如广州电信的催费通知)


1.解决方法1

不管你使用的什么语言,都可以对使用的Web控件的方法做挂接,就是所谓的NewWindow3,我们可以拿到bstrUrl,也就是准备打开的新窗口的Url连接,然后可以对Cancel赋值来取消这个动作。

那就很好办了,做一个黑名单或者白名单,来过滤弹出的域名即可达到目的。


(如果处理BeforeNavigate2的话,也可以起到一定效果,如一些内嵌iframe的跳转是会跳到这里的,这样就可以阻止其显示)



2.解决方法2

你可能实验了第一种方法,然后有疑问,为什么我这样做还是会有用户被弹窗,这个问题很明显,弹出的一定不是IE的窗口,可能是360安全浏览器什么的,原因就是其对注册表修改或者使用BHO技术(OCX调用的时候其Dll也会被加载到你的程序里),直接或间接的修改了IE的NewWindow3,使你的程序说了不算,你即使取消了动作,他依然会把这个操作劫持到他的浏览器来打开。

那么这种问题怎么办!

内嵌页面跳出新窗口的浏览器,一定是由当前进程创建的,所以我们只需要Hook下自身的CreateProcessA、CreateProcessW函数并修改,从lpCommandLine可以得到启动命令行,命令行中包含网址信息,对其过滤即可,大概的格式会是这样:

C:\360\360se.exe "http://www.baidu.com"


(此方法有风险,不同浏览器的BHO等兼容性难以测试,请慎用)



二、内嵌iframe


看到右下角那个弹窗了没有,就是它没错。

它的原理是替换了百度统计的h.js文件,所有使用了百度统计的页面都会被强X。


这个是个头疼的问题,可以通过取得IWebBrowser2的Document,枚举iframe及div对象,然后填充为空的代码来实现,后续扩展可以做成黑名单,如满足DispHTMLDivElement增加id=***、src="***"的条件,符合就进行填充。


该方法亲测有效,但还没有实际应用。

我目前正在写代码测试iframe这部分...


三、通用处理

对软件自身从WinInet层面或者Socket做Hook,使用类似广告过滤插件的原理,阻断对应域名、IP的连接。

需收集非法的广告插入地址及域名,可能成本比较高,除非有通用的域名规则(或白名单)。


----------------------------------------------------------------------------------------------------------------------

看到这里,肯定有人说,你怎么不提供代码。

你如果会在意到内嵌页面被插入广告这种程度的问题,你肯定负责的不会是个小项目,相信这些代码对于你来说并不是什么难事,你可以在Git上搜一搜作为参考。

----------------------------------------------------------------------------------------------------------------------

关于运营商是如何推送这些东西的,可以搜索一下DNS劫持、Ipush(学名叫做电信什么什么增值系统)等等,说白了就是:


你>请求>运营商节点>各种路由>所请求的服务器

所请求的服务器>返回>各种路由>运营商节点(修改一下)>返回给你


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值