前言:海guan局的RS5代 环境检测点相对于药监J 要多了不少
本文主要是说下海guan局新闻页的RS5检测环境
网址 base64
: aHR0cDovL3d3dy5jdXN0b21zLmdvdi5jbi9jdXN0b21zL3h3ZmIzNC8zMDI0MjUvaW5kZXguaHRtbA==
本文说下重点的地方
一、window
下的一些函数检测
挂上window
代理 会发现检测了很多函数
贴上一些 剩余的对照下 浏览器下环境 补就行了 没有的就不要补了
其中有个比较重要的是window.matchMedia
函数 检测了一些参数返回的bool
值
window.matchMedia = function matchMedia(x){if(x === '(any-pointer: fine )'){return {matches: true,media: "(any-pointer: fine)",onchange: null,}}else if(x === '(any-pointer: coarse )'){return {matches: false,media: "(any-pointer: coarse)",onchange: null}}else if(x === '(any-pointer: none )'){return {matches: false,media: '(any-pointer: none)',onchange: null}}else if (x==='(any-pointer )'){return {matches: true,media: "(any-pointer)",onchange: null}}else if (x==='(any-hover: hover )'){return {matches: true,media: '(any-hover: hover )',onchange: null}}else if(x === '(any-hover: on-demand )'){return {matches: false,media: '(any-hover: on-demand )',onchange: null}}else if(x==='(any-hover: none )'){return {matches: false,media: '(any-hover: none )',onchange: null}}else if(x === '(any-hover )'){return {matches: true,media: '(any-hover )',onchange: null}}else if (x==='(color-gamut: srgb )'){return {matches: true,media: '(color-gamut: srgb )',onchange: null}}else if(x === '(color-gamut: p3 )'){return {matches: false,media: '(color-gamut: p3 )',onchange: null}}else if(x === '(color-gamut: rec2020 )'){return {matches: false,media: '(color-gamut: rec2020 )',onchange: null}}else if(x=== '(color-gamut )'){return {matches: true,media: '(color-gamut )',onchange: null}}};
还有个就是window.WebSocket
函数
window['WebSocket'] = function WebSocket(){throw DOMException('Failed to construct \'WebSocket\': The URL \'itsgonnafail\' is invalid.')
};
二、document.createElement
方法 里面的 audio
video
标签里面的canPlayType
方法检测
else if(tagName == 'audio'){var audio = {};audio['canPlayType'] = function (x){if (x === "audio/x-m4a;audio/aac;"){return 'maybe'}else {return 'probably'}};audio['canPlayType'].toString = ()=>'function canPlayType() { [native code] }';return audio}
三、原型属性检测
navigator
下的原型属性webdriver
检测
代码运行过程中 会使用 以下两次方法
Object.getOwnPropertyDescriptor(navigator,"webdriver")
Object.getOwnPropertyDescriptor(navigator.__proto__,"webdriver")
这里是获取navigator的原型下的描述属性
所以我们要把webdriver
定义再其原型上
正常情况下我们补的时候 描述属性是这样的
在浏览器 环境下 是没有value
属性的这个要注意!
后续也会判断 描述属性下是否有value
接着又是判断get
方法 是不是一个函数 并且检测了它的toString
方法 是否包含native code
toString
检测
在浏览器环境下 是这样的
'function get webdriver() { [native code] }'
四、点击事件对象的target
属性里面的getBoundingClientRect
函数
这个函数会返回你当前点击节点的对应坐标位置
getBoundingClientRect = ()=>{return {"x": 454.078125,"y": 736.21875,"width": 570,"height": 26,"top": 736.21875,"right": 1024.078125,"bottom": 762.21875,"left": 454.078125}
这样就行了
其他比较重要的就是load
事件之后的 canvas
webgl
里面的东西了 自己补补吧
大概比较重要的就这么多