Loading... # 引言 有些网站不允许电脑访问,甚至只允许通过微信内置浏览器打开,这样对于用户来说极不方便,看个电影都这么麻烦了嘛。emmm 页面刚开始的时候能正常显示一下,然后突然就变成了下面这样的效果。 ![image.png](https://www.zunmx.top/usr/uploads/2023/11/221799550.png) ![image.png](https://www.zunmx.top/usr/uploads/2023/11/2717900744.png) # 分析 实际上页面是加载过来的,因为开发者工具中能够看到响应部分)——(尴尬的是console已经暴露了) ![image.png](https://www.zunmx.top/usr/uploads/2023/11/135980011.png) 暴力搜索一下platform ![image.png](https://www.zunmx.top/usr/uploads/2023/11/3981311200.png) 简单分析一下note.js ```js (function(w, d) { var system = { win: false, mac: false, xll: false }; var p = navigator.platform; // 获取操作系统 var us = navigator.userAgent.toLowerCase(); system.win = p.indexOf("Win") == 0; system.mac = p.indexOf("Mac") == 0; system.x11 = (p == "X11") || (p.indexOf("Linux") == 0); if (system.win || system.mac || system.xll) { // 如果是windows,max或者是??什么鬼,x11,写成了xll,程序员扣大分 console.log(system) // 你要是不输出,我还费点劲,这下直接告诉我你在哪儿校验的了。emmm console.log(navigator.platform) var iframe_url='/note.html'; $("head").html('<meta charset="UTF-8"><meta name="referrer" content="no-referrer"><title>xxxxx</title><style>body{position:static !important;}body *{ visibility:hidden; }</style> '); $("body").empty(); $(d).ready(function () { $("body").html('<iframe style="width:100%; height:100%;position:absolute;margin-left:0px;margin-top:0px;top:0%;left:0%;" id="mainFrame" src="'+iframe_url+'" frameborder="0" scrolling="no"></iframe>').show(); $("body *").css("visibility", "visible"); }); } })(window, document); ``` 好多网站都是这一套,变量名都没变过,开来面向CV的工程师不少呀。 这个例子不太好,我再找一个。 ![image.png](https://www.zunmx.top/usr/uploads/2023/11/734625684.png) 这个网站还好,毕竟没有把x11写成xll,😓 # 进阶分析 ```js <script type="text/javascript"> //平台、设备和操作系统 var system ={ win : false, mac : false, x11 : false }; //检测平台 var p = navigator.platform; system.win = p.indexOf("Win") == 0; system.mac = p.indexOf("Mac") == 0; system.x11 = (p == "X11") || (p.indexOf("Linux") == 0); if(system.win||system.mac||system.x11){ window.location.href="xxx"; }else{ } </script> ``` 当页面加载的时候,就进行校验,此时如果是win、mac、x11,就跳转页面,捕捉难度稍微高了点,这里可以通过代理修改页面逻辑,删掉代码,可以考虑使用fiddler,具体操作自行学习(fiddler 修改响应体) ```js function is_weixin(){ var ua = navigator.userAgent.toLowerCase(); //判断浏览器的类型 if(ua.match(/MicroMessenger/i)=="micromessenger") { return true; } else { return false; } } if (!is_weixin()) { // 如果不是微信内置浏览器,就动态跳转到以下页面 window.location.href = 'xxx'; } ``` 这个demo的代码注释写的很好,下次不要写了,要不我写啥呢?emmm 这段代码只允许微信内置浏览器访问。 # 解决方案 1. 通过F12,设置网速,让网速变慢,然后页面加载过来就停止加载页面,在sources中添加断点,然后一步一步的修改跳转的条件。 2. 通过Fiddler,修改页面响应体,删掉校验逻辑,或者注入自己的逻辑 3. 使用油猴插件,见下文 暂时想到这么些 # 油猴插件 ```js // ==UserScript== // @name 浏览器UA和操作系统反拦截 // @namespace https://www.zunmx.top/ // @version 0.1 // @description try to take over the world! // @author zunmx // @match *://*/* // @run-at document-start // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // ==/UserScript== // ==UserScript== // ==/UserScript== (function() { 'use strict'; console.log("start"); Object.defineProperty(navigator,'platform',{get:function(){return 'Android';}}) var UserAgent = 'MicroMessenger'; //修改后的userAgent Object.defineProperty(navigator, 'userAgent', { value: UserAgent, writable: false }); })(); ``` # 使用插件后 ![image.png](https://www.zunmx.top/usr/uploads/2023/11/3671310752.png) ![image.png](https://www.zunmx.top/usr/uploads/2023/11/525647591.png) © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏