// ==UserScript==
// @name hook xxx
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @run-at document-start
// @match https://match.yuanrenxue.cn/match/5
// @icon https://www.google.com/s2/favicons?sz=64&domain=yuanrenxue.cn
// @grant none
// ==/UserScript==
// header hook 监听请求头部参数
// 头部参数 请求对象当中的 设为请求头部参数
(function () {
var org = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) {
// 关键字 在请求当中发现有键是Authorization 断点
if (key == 'xx') {
debugger;
}
return org.apply(this, arguments);
}
})();
// hook cookie 知道具体cookie的key
(function() {
// 'use strict';
Object.defineProperty(document, 'cookie', {
set: function (val){
if(val.indexOf('RM4hZBv0dDon443M') !== -1){
debugger;
return val
}
}
})
})();
// hook cookie 不知道cookie的具体key
(function() {
var cookie_cache = document.cookie;
Object.defineProperty(document, 'cookie', {
get:function (){
console.log('Get cookie');
// debugger
return cookie_cache;
},
set:function (val){
console.log('Set cookie');
debugger
var cookie = val.split(';')[0];
var ncookie = cookie.split("=");
var flag = false;
var cacha = cookie_cache.split('; ');
cacha = cacha.map(function (a){
if(a.split('=')[0] === ncookie[0]){
flag = true;
return cookie;
}
return a;
})
cookie_cache = cacha.join('; ');
if(!flag) {
cookie_cache += '; ';
}
this. value = val;
return cookie_cache;
},
});
})();
// hook URL
(function () {
var open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function (method, url, async) {
if (url.indexOf("login") != -1) {
debugger;
}
return open.apply(this, arguments);
};
})();
// hook eval
(function() {
// 保存原始方法
window.__cr_eval = window.eval;
// 重写 eval
var myeval = function(src) {
console.log(src);
console.log("=============== eval end ===============");
debugger;
return window.__cr_eval(src);
}
// 屏蔽 JS 中对原生函数 native 属性的检测
var _myeval = myeval.bind(null);
_myeval.toString = window.__cr_eval.toString;
Object.defineProperty(window, 'eval', {
value: _myeval
});
})();
// hook JSON.parse
(function() {
var parse = JSON.parse;
JSON.parse = function(params) {
console.log("Hook JSON.parse ——> ", params);
debugger;
return parse(params);
}
})();
// hook JSON.stringify
(function() {
var stringify = JSON.stringify;
JSON.stringify = function(params) {
console.log("Hook JSON.stringify ——> ", params);
debugger;
return stringify(params);
}
})();
// hook Function
(function() {
// 保存原始方法
window.__cr_fun = window.Function;
// 重写 function
var myfun = function() {
var args = Array.prototype.slice.call(arguments, 0, -1).join(","),
src = arguments[arguments.length - 1];
console.log(src);
console.log("=============== Function end ===============");
debugger;
return window.__cr_fun.apply(this, arguments);
}
// 屏蔽js中对原生函数native属性的检测
myfun.toString = function() {
return window.__cr_fun + ""
}
Object.defineProperty(window, 'Function', {
value: myfun
});
})();
// 去除无限debugger
Function.prototype.__constructor_back = Function.prototype.constructor;
Function.prototype.constructor = function() {
if(arguments && arguments[0] === 'string'){
if('debugger' === arguments[0]){
// arguments[0] = 'console.log("debugger")';
// arguments[0] = ";"
return
}
}
return Function.prototype.__constructor_back.apply(this, arguments);
}
// 通用反调试
(function() {
var _constructor = unsafeWindow.Function.prototype.constructor;
// Hook Function.prototype.constructor
unsafeWindow.Function.prototype.constructor = function() {
var fnContent = arguments[0];
if (fnContent) {
if (fnContent.includes('debugger')) { // An anti-debugger is attempting to stop debugging
var caller = Function.prototype.constructor.caller; // Non-standard hack to get the function caller
var callerContent = caller.toString();
if (callerContent.includes(/\bdebugger\b/gi)) { // Eliminate all debugger statements from the caller, if any
callerContent = callerContent.replace(/\bdebugger\b/gi, ''); // Remove all debugger expressions
eval('caller = ' + callerContent); // Replace the function
}
return (function () {});
}
}
// Execute the normal function constructor if nothing unusual is going on
return _constructor.apply(this, arguments);
};
})();
标签:function,常用,return,debugger,代码,hook,window,cookie,var
From: https://www.cnblogs.com/lsixu/p/18400829