Boss 检测点(浏览器环境)-浅谈
1-注意点
- cookie的有效长度是
145, 但是不代表145长度就可以用 - cookie长度145之后,分段比较,
一般是中间一两段不同 - 调试的时候一定要
固定 [随机数种子, 时间戳], 便于比较结果 - 在
Boss里面注意下 window, top... ,我在环境里面有提到 - 检测了是否格式化
ua, canvas, location, cookie这些值替换为自己浏览器的, 有参与到加密里面, 我就被坑了, 有三个值对不上, 最后发现是ua不一致, 所以, 尽量和自己的环境保持一致
bd73eGnpoFgR+NzIlAF4DFR5ICANuWGdLNCUlNSNRZy58S0JtZUUPB38nc2EjACg4Tx90dFkMFhlJemQf FS ddIwwd ODMeTB4MdXEjUH AQYRp2eDR7GQM7IBZJCl9ia0d3DSZGfSR3fGR1IT4= 正确 bd73eGnpoFgR+NzIlAF4DFR5ICANuWGdLNCUlNSNRZy58S0JtZUUPB38nc2EjACg4Tx90dFkMFhlJemQf FS ddIwwd azMeTB4MdXEjUH AQYRp2eDR7GQM7IBZJCl9ia0d3DSZGfSR3fGR1IT4= Object.keys(window).length < 150
2- 检测点(相对比较隐晦的检测)
- 检测了
window是否挂代理 - 检测了
Object.keys(window).length是不是大于150 OfflineAudioContext需要完善,快速定位搜1,44100,44100)单步跟一下, 把没补的地方补全, 应该就可以跑通了, 我是用的框架跑,对比之后发现是OfflineAudioContext没有补全- 大概也许应该,
OfflineAudioContext补全之后就能用了, 如果没有的话, 自己单步调一下吧,成品我就不发了, 这个残次品应该是补了 80%了, 差也差不多了
3- 固定随机数种子, 时间戳
- 有时候
function尾部的;也很重要, 不要忘了
Date.now = function now() { return 1661986251253 };
Date.parse = function () { return 1661986251253 };
Date.prototype.valueOf = function () { return 1661986251253 };
Date.prototype.getTime = function () { return 1661986251253 };
Date.prototype.toString = function () { return 1661986251253 };
Math.random = function random() { return 0.08636862211354912 };
4- 检测梳理
-
检测了
sele,top, 有大佬说在boss里面,top != window, 如果相等的话, 生成出来的值是错误的, 我尝试了一下, 确实不相等, 但是相等的话也不会强校验, 不知道是不是我测试的样本少了 -
检测了
canvas,2d类型, 有这些方法就好了, 最后把浏览器生成的结果return -
有一堆的
Object.getOwnPropertyDescriptors对象描述符检测,感觉这个检测不严格 -
然后就是常规的检测,
Proxy给window挂上代理,把常规的环境补好,cookie的长度应该就是145了 -
长度
145之后,可以单步调试,记得取消window代理,boss有一个特点, 在代码开始之前, 会有一个变量储存会走的分支,这些地方需要注意, 可以快速的跳到关键点 -
如:
let branch = Object.keys(window).length > 150? true : false; if(branch){}else() -
检测
Object.keys(window).length > 150

检测parent

检测window是否挂代理

效果:

5-boss环境
Date.now = function now() { return 1661986251253 };
Date.parse = function () { return 1661986251253 };
Date.prototype.valueOf = function () { return 1661986251253 };
Date.prototype.getTime = function () { return 1661986251253 };
Date.prototype.toString = function () { return 1661986251253 };
Math.random = function random() { return 0.08636862211354912 };
; (() => {
"use strict";
const $toString = Function.toString;
const myFunction_toString_symbol = Symbol('('.concat('', ')_', (Math.random() + '').toString(36)));
const myToString = function () {
return typeof this === 'function' && this[myFunction_toString_symbol] || $toString.call(this);
};
function set_native(func, key, value) {
Object.defineProperty(func, key, {
value: value,
configurable: true,
enumerable: false,
writable: true
})
};
delete Function.prototype['toString']; //删除原型链上的toString
set_native(Function.prototype, "toString", myToString); //自己定义个getter方法
set_native(Function.prototype.toString, myFunction_toString_symbol, "function toString() { [native code] }"); //套个娃 保护一下我们定义的toString 否则就暴露了
window.safefunction = (func, func_name, user_defined_func_name) => {
if (func_name !== undefined && user_defined_func_name === true) {
set_native(func, myFunction_toString_symbol, `function ${func_name || ''}() { [native code] }`);
} else {
set_native(func, myFunction_toString_symbol, `function ${func.name || func_name || ''}() { [native code] }`);
}
};
}).call(this);
rename = (function () {
function buffer_memory(value) {
let d = buffer_memory.d || (
buffer_memory.d = {
configurable: true, enumerable: false, writable: false
}
);
d.value = value;
return d;
};
/**
* 保护伪造Object (Object[Symbol.toStringTag]) 让其更难被识破
* @param { Object } Obj
* @param { String } Objname - 可显示的名称
* @returns { undefined }
*/
return function (Obj, Objname) {
Object.defineProperties(Obj, {
[Symbol.toStringTag]: buffer_memory(Objname)
})
};
})();
myproxy = function (obj) {
return new Proxy(obj, {
set(target, property, value) {
return Reflect.set(...arguments);
},
get(target, property, receiver) {
return target[property];
}
});
};
window = global;
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
function atob(input) {
var str = (String(input)).replace(/[=]+$/, ''); // #31: ExtendScript bad parse of /=
if (str.length % 4 === 1) {
throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded.");
}
for (
var bc = 0, bs, buffer, idx = 0, output = '';
buffer = str.charAt(idx++);
~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
) {
buffer = chars.indexOf(buffer);
}
return output;
};
HTMLCanvasElement = function HTMLCanvasElement() { };
rename(HTMLCanvasElement, 'HTMLCanvasElement')
window.safefunction(HTMLCanvasElement, 'HTMLCanvasElement');
HTMLCanvasElement.prototype = {
getContext() {
return {
textBaseline: "",
'font': '',
'fillStyle': '',
'fillRect': function (a, b, c, d) { },
'fillText': function (a, b, c) { },
}
},
toDataURL() {
return "data:image/png;base64,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"
}
};
window.HTMLCanvasElement = HTMLCanvasElement;
// setTimeout = function () { };
// clearTimeout = function () { };
screenTop = 0
Array.prototype.setAttribute = {}
Document = function Document(){};
rename(Document, 'Document')
window.safefunction(Document, 'Document');
window.Document = Document;
Document.body = {};
HTMLDocument = function HTMLDocument() { };
rename(HTMLDocument, 'HTMLDocument')
HTMLDocument.prototype = {
createElement(a) {
console.log(a)
switch (a) {
case 'canvas':
return new HTMLCanvasElement()
}
}
}
window.HTMLDocument = HTMLDocument;
window.safefunction(HTMLDocument, 'HTMLDocument');
rename(HTMLDocument, 'HTMLDocument')
document = new HTMLDocument();
document.isExtensible = true;
document.referrer ='https://www.zhipin.com/web/common/security-check.html?seed=35RlLUuTTh6g26lBz1cBplZdepbJ6vQzb507t%2Fo7JZ8%3D&name=4672dc2c&ts=1664246307766&callbackUrl=https%3A%2F%2Fwww.zhipin.com%2Fweb%2Fgeek%2Fjob%3Fquery%3D%26city%3D101210100%26position%3D100101%26page%3D1'
document.cookie = 'lastCity=101210100; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1662443756; wd_guid=86a84d99-3d6e-4b15-8df8-3c08239470b4; historyState=state; _bl_uid=kXl637tmpvts9F3XqjkjmwaekhhO; __zp_seo_uuid__=9b4caed5-bd47-401f-99d4-e9860622005d; __g=-; __l=r=https%3A%2F%2Fcn.bing.com%2F&l=%2Fwww.zhipin.com%2Fweb%2Fgeek%2Fjob%3Fquery%3D%26city%3D101210100%26position%3D100101&s=3&g=&friend_source=0&s=3&friend_source=0; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1664246308; __c=1662443756; __a=96096595.1653529792.1655263172.1662443756.39.3.11.23; __zp_stoken__=e468eGiBFYQ49fFUyBAAnN2gUUHZBAi9RP1ZBPBURdxpgSnx8awd3JWh6PXsEejZlQR9SdDA6IjZ3ZkANAiEHNVs%2FawdQEwR6Kw9%2FQjJ1KH9ieE9%2BSi0STSA1CxQpTFx3AyZgfT88XTxpVkU%3D; __zp_sseed__=35RlLUuTTh6g26lBz1cBphl7k9O9tSGHKruxK+FxGYs=; __zp_sname__=4672dc2c; __zp_sts__=1664246323419'
window.document = document;
Navigator = function Navigator() { };
window.safefunction(Navigator, 'Navigator');
rename(Navigator, 'Navigator')
window.Navigator = Navigator ;
navigator = new Navigator();
navigator.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.44";
navigator.cookieEnabled = true;
navigator.language = 'zh-CN';
navigator.languages = ['zh-CN', 'zh'];
window.navigator = navigator;
DOMParser = function DOMParser() { };
rename(DOMParser, 'DOMParser')
window.safefunction(DOMParser, 'DOMParser');
window.DOMParser = DOMParser;
performance = {};
window.performance = performance;
HTMLFrameSetElement = function HTMLFrameSetElement() { };
window.safefunction(HTMLFrameSetElement, 'HTMLFrameSetElement');
window.HTMLFrameSetElement = HTMLFrameSetElement;
isFinite = function isFinite() { };
window.safefunction(isFinite, 'isFinite');
window.isFinite = isFinite;
// 这个地方没补全,自己补,需要成品私我
OfflineAudioContext = function () {
var h = {
createOscillator: function () {
return {
'type': '',
'frequency': {
'setValueAtTime': function () { }
},
'connect': function () { },
'disconnect': function () { },
'start': function () { },
}
},
currentTime: '',
destination: '',
startRendering: function () { },
oncomplete: function () { },
createDynamicsCompressor: function () {
return {
'threshold': {
'setValueAtTime': function (a, b) { }
},
'connect': function () { },
'disconnect': function () { }
}
}
}
Object.defineProperty(h, 'oncomplete', {
get: function () {
return window['oncomplete']
},
set: function (newValue) {
window['oncomplete'] = newValue
window['oncomplete'](window)
}
})
return h
};;
window.safefunction(OfflineAudioContext, 'OfflineAudioContext');
window.OfflineAudioContext = OfflineAudioContext;
SpeechSynthesisUtterance = function SpeechSynthesisUtterance() { };
window.safefunction(SpeechSynthesisUtterance, 'SpeechSynthesisUtterance');
window.SpeechSynthesisUtterance = SpeechSynthesisUtterance;
SourceBuffer = function SourceBuffer() { }
window.safefunction(SourceBuffer, 'SourceBuffer');
window.SourceBuffer = SourceBuffer;
ScreenOrientation = function ScreenOrientation() { }
window.safefunction(ScreenOrientation, 'ScreenOrientation');
window.ScreenOrientation = ScreenOrientation;
MediaEncryptedEvent = function MediaEncryptedEvent() { };
window.safefunction(MediaEncryptedEvent, 'MediaEncryptedEvent');
window.MediaEncryptedEvent = MediaEncryptedEvent;
XMLHttpRequest = function XMLHttpRequest() { };
window.safefunction(XMLHttpRequest, 'XMLHttpRequest');
window.XMLHttpRequest = XMLHttpRequest;
Path2D = function Path2D() { };
window.safefunction(Path2D, 'Path2D');
window.Path2D = Path2D;
CDATASection = function CDATASection() { };
window.safefunction(CDATASection, 'CDATASection');
window.CDATASection = CDATASection;
SVGGraphicsElement = function SVGGraphicsElement() { };
window.safefunction(SVGGraphicsElement, 'SVGGraphicsElement');
window.SVGGraphicsElement = SVGGraphicsElement;
PerformancePaintTiming = function PerformancePaintTiming() { };
window.safefunction(PerformancePaintTiming, 'PerformancePaintTiming');
window.PerformancePaintTiming = PerformancePaintTiming;
setInterval = function setInterval() { };
window.safefunction(setInterval, 'setInterval');
window.setInterval = setInterval;
window.scrollBy = function () { };
window.scrollTo = function () { };
window.alert = function () { };
localStorage = {};
window.localStorage = localStorage;
sessionStorage = {};
window.sessionStorage = sessionStorage;
window.safefunction(localStorage, 'localStorage');
history = function history() { };
window.history = history;
window.safefunction(history, 'history');
location = {
hash: "",
host: "www.zhipin.com",
hostname: "www.zhipin.com",
href: "https://www.zhipin.com/web/geek/job?query=&city=101210100&position=100101&page=2",
origin: "https://www.zhipin.com",
pathname: "/web/geek/job",
port: "",
protocol: "https:"
};
location.toString = function () { return location.href };
window.safefunction(location, 'location');
window.location = location;
onmessage = null;
window.outerHeight = 1067;
window.innerHeight = 963;
window.outerWidth = 1707;
window.innerWidth = 1707;
window.onmessage = onmessage;
window.RegExp = RegExp;
window.Date = Date;
window.Math = Math;
window.decodeURI = decodeURI;
window.length = 0;
window.scrollX = 0;
window.screenY = 0;
window.pageXOffset = 0;
window.pageYOffset = 0;
window.visualViewport = {};
window.screenX = 0;
window.screenY = 0;
window.devicePixelRatio = 1;
window.screenLeft = 0;
window.screenTop = 0;
window.defaultStatus = "";
window.styleMedia = {};
window.onsearch = null;
window.isSecureContext = true;
window.performance = {};
window.onappinstalled = null;
window.onbeforeinstallprompt = null;
window.originAgentCluster = false;
window.crypto = {};
window.indexedDB = {};
window.webkitStorageInfo = {};
window.onbeforexrselect = null;
window.webkitStorageInfo = {};
window.onbeforexrselect = null;
window.onabort = null;
window.onblur = null;
window.oncancel = null;
window.oncanplay = null;
window.oncanplaythrough = null;
window.onchange = null;
window.onclick = null;
window.onclose = null;
window.oncontextmenu = null;
window.oncuechange = null;
window.ondblclick = null;
window.ondrag = null;
window.ondragend = null;
window.ondragenter = null;
window.ondragleave = null;
window.ondragover = null;
window.ondragstart = null;
window.ondrop = null;
window.ondurationchange = null;
window.onemptied = null;
window.onended = null;
window.onerror = null;
window.onfocus = null;
window.onformdata = null;
window.oninput = null;
window.oninvalid = null;
window.onkeydown = null;
window.onkeypress = null;
window.onkeyup = null;
window.onload = null;
window.onloadeddata = null;
window.onloadedmetadata = null;
window.onloadstart = null;
window.onmousedown = null;
window.onmouseenter = null;
window.onmouseleave = null;
window.onmousemove = null;
window.onmouseout = null;
window.onmouseover = null;
window.onmouseup = null;
window.onmousewheel = null;
window.onpause = null;
window.onplay = null;
window.onplaying = null;
window.onprogress = null;
window.onratechange = null;
window.onreset = null;
window.onresize = null;
window.onscroll = null;
window.onseeked = null;
window.onseeking = null;
window.onselect = null;
window.onstalled = null;
window.onsubmit = null;
window.onsuspend = null;
window.ontimeupdate = null;
window.ontoggle = null;
window.onvolumechange = null;
window.onwaiting = null;
window.onwebkitanimationend = null;
window.onwebkitanimationiteration = null;
window.onwebkitanimationstart = null;
window.onwebkittransitionend = null;
window.onwheel = null;
window.onauxclick = null;
window.ongotpointercapture = null;
window.onlostpointercapture = null;
window.onpointerdown = null;
window.onpointermove = null;
window.onpointerup = null;
window.onpointercancel = null;
window.onpointerover = null;
window.onpointerout = null;
window.onpointerleave = null;
window.onselectstart = null;
window.onselectionchange = null;
window.onanimationend = null;
window.onanimationiteration = null;
window.onanimationstart = null;
window.ontransitionrun = null;
window.ontransitionstart = null;
window.ontransitionend = null;
window.ontransitioncancel = null;
window.onafterprint = null;
window.onafterprint = null;
window.onbeforeprint = null;
window.onbeforeunload = null;
window.onhashchange = null;
window.onlanguagechange = null;
window.onmessage = null;
window.onmessageerror = null;
window.onoffline = null;
window.ononline = null;
window.onpagehide = null;
window.onpageshow = null;
window.onpopstate = null;
window.onrejectionhandled = null;
window.onstorage = null;
window.onunhandledrejection = null;
window.onunload = null;
window.toString = function () {
return '[object Window]'
}
delete module;
delete process;
delete __filename;
delete Buffer;
delete Thread
delete SharedArrayBuffer
delete GLOBAL
delete root
delete VMError
delete KNBCore
// 需要注意的地方
top = myproxy(window);
parent = top;
window.top = top;
window.parent = parent;
setTimeout = function setTimeout(){};