JS HOOK 代码段
1、定位header关键字
(function(){ let headerCache = window.XMLHttpRequest.prototype.setRequestHeader; window.XMLHttpRequest.prototype.setRequestHeader = function(key, value){ console.log('Hook set header %s => %s', key, value); // 定位到所需的header关键字 if (key === "Sign"){ debugger; } return headerCache.apply(this, arguments); } })();
2、定位cookie关键字
// 定位cookie关键字 (function() { "use strict"; var cookieTemp = ""; Object.defineProperty(document, "cookie", { writable: false, // 表示能否修改属性的值,即值是可写的还是只读 configurable: false, // 表示能否通过 delete 删除属性、能否修改属性的特性,或者将属性修改为访问器属性 set: function(val) { if (val.indexOf("cookie的参数名称") != -1) { debugger ; } cookieTemp = val; return val; }, get: function() { return cookieTemp; } }) } )(); // 定位cookie关键字 上面不能用时更换成这个 enumerable:true,configurable:true, https://www.cnblogs.com/lifengjuan/p/17722573.html (function() { "use strict"; var cookieTemp = ""; Object.defineProperty(document, "cookie", { enumerable:true, configurable:true, set: function(val) { if (val.indexOf("_yq_bid") != -1) { debugger ; } cookieTemp = val; return val; }, get: function() { return cookieTemp; } }) } )(); // 捕获cookie (function(){ // 严格模式,检查所有错误 'use strict' // document 为要hook的对象 ,属性是cookie Object.defineProperty(document,'cookie',{ // hook set方法也就是赋值的方法,get就是获取的方法 set: function(val){ // 这样就可以快速给下面这个代码行下断点,从而快速定位设置cookie的代码 debugger; // 在此处自动断下 console.log('Hook捕获到set-cookie ->',val); return val; } }) })();
3、定位URL关键字
// 定位url关键字 (function () { var open = window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open = function (method, url, async) { if (url.indexOf("key") != -1) { debugger; } return open.apply(this, arguments); }; })();
4、定位JSON.stringify、JSON.parse 用于请求或者响应是密文
// 定位JSON.stringify、JSON.parse,一般用于请求和响应是密文 // 请求是密文 (function() { var _stringify = JSON.stringify; JSON.stringify = function(ps) { console.log("Hook JSON.stringify ——> ", ps); debugger; return _stringify(ps); // 不改变原有的执行逻辑 } })(); // 响应是密文 (function() { var _parse = JSON.parse; JSON.parse = function(ps) { console.log("Hook JSON.parse ——> ", ps); debugger; return _parse(ps); // 不改变原有的执行逻辑 } })();
5、定位键盘、鼠标的动作
// F12的键码为 123,可以直接全局搜索 keyCode == 123, == 123 ,keyCode document.onkeydown = function() { if (window.event && window.event.keyCode == 123) { // 改变键码 event.keyCode = 0; event.returnValue = false; // 监听到F12被按下直接关闭窗口 window.close(); window.location = "about:blank"; } } ;
// 监听鼠标右键是否被按下方法 1, oncontextmenu事件 document.oncontextmenu = function () { return false; };
// 监听鼠标右键是否被按下方法 2,onmousedown事件 document.onmousedown = function(evt){ // button属性是2 就代表是鼠标右键 if(evt.button == 2){ alert('监听到鼠标右键被按下') evt.preventDefault() // 该方法将通知 Web 浏览器不要执行与事件关联的默认动作 return false; } }
// 监听用户工具栏调起开发者工具,判断浏览器的可视高度和宽度是否有改变,有改变则处理, // 判断是否开了开发者工具不太合理。 var h = window.innerHeight, w = window.innerWidth; window.onresize = function(){ alert('改变了窗口高度') }
// 鼠标 (function() { //严谨模式 检查所有错误 'use strict'; // hook 鼠标选择 Object.defineProperty(document, 'onselectstart', { set: function(val) { console.log('Hook捕获到选中设置->', val); return val; } });
// hook 鼠标右键 Object.defineProperty(document,'oncontextmenu',{ set:function(evt){ console.log("检测到右键点击"); return evt } }); })();
6、加载器
//在加载器后面下断点 执行下面代码 // 这里的f 替换成需要导出的函数名 //在你要的方法加载前下断点 执行 window.isz=true //在你要的方法运行后代码处下断点 执行 window.wbpk_ 拿到所有代码 注意后面有个逗号 window.zhiyuan = f; window.wbpk_ = ""; window.isz = false; f = function(r){ if(window.isz) { // e[r]里的e 是加载器里的call那里 window.wbpk_ = window.wbpk_ + r.toString()+":"+(e[r]+"")+ ","; } return window.zhiyuan(r); }
// hook // 如果只是调用模块,不用模块里面的方法, 那么直接获取调用模块的时候所有加载过的模块,进行拼接 function o(t) { if (n[t]) return n[t].exports; var i = n[t] = { i: t, l: !1, exports: {} }; console.log("被调用的 >>> ", e[t].toString()); // 这里进行拼接,bb变量需要在全局定义一下 // t 是模块名, e[t] 是模块对应的函数, 也就是key:value形式 bb += `"${t}":${e[t].toString()},` return e[t].call(i.exports, i, i.exports, o), i.l = !0, i.exports } bz = o;
7、document下的createElement()方法的hook,查看创建了什么元素
(function() { 'use strict' var _createElement = document.createElement.bind(document); document.createElement = function(elm){ // 这里做判断 是否创建了script这个元素 if(elm == 'body'){ debugger; } return _createElement(elm); } })();