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); } })();