您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
HOOK API
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/40863/266172/HOOK.js
// ==UserScript== // @name HOOK // @namespace http://www.infosec-wiki.com/ // @version 1.3 // @description HOOK API // @author http://www.infosec-wiki.com/ // @match * // @run-at document-start function Hooks() { return { initEnv:function () { Function.prototype.hook = function (realFunc,hookFunc, run, context,funcName) { var _context = null; //函數上下文 var _funcName = null; //函數名 _context = context || window; //_context = context || unsafeWindow; _funcName = funcName || getFuncName(this); _context[realFunc] = this; if(_context[_funcName].prototype && _context[_funcName].prototype.isHooked) { console.log("Already has been hooked,unhook first"); return false; } function getFuncName (fn) { // 獲取函數名稱 var strFunc = fn.toString(); var _regex = /function\s+(\w+)\s*\(/; var patten = strFunc.match(_regex); if (patten) { return patten[1]; }; return ''; } try { if (run) { eval('_context[_funcName] = function ' + _funcName + '(){\n' + 'var args = Array.prototype.slice.call(arguments,0);\n' + 'var obj = this;\n' + 'hookFunc.apply(obj,args)\n' + 'return _context[realFunc].apply(obj,args);\n' + '};'); }else { eval('_context[_funcName] = function ' + _funcName + '(){\n' + 'var args = Array.prototype.slice.call(arguments,0);\n' + 'var obj = this;\n' + 'hookFunc.apply(obj,args)\n' + '};'); } _context[_funcName].prototype.isHooked = true; return true; }catch (e) { console.log("Hook failed,check the params."); return false; } }; Function.prototype.unhook = function (realFunc,funcName,context) { var _context = null; var _funcName = null; _context = context || window; _funcName = funcName; if (!_context[_funcName].prototype.isHooked) { console.log("No function is hooked on"); return false; } _context[_funcName] = _context[realFunc]; delete _context[realFunc]; return true; }; }, cleanEnv:function () { if(Function.prototype.hasOwnProperty("hook")) { delete Function.prototype.hook; } if(Function.prototype.hasOwnProperty("unhook")) { delete Function.prototype.unhook; } return true; } }; }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址