成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript逆向時,常用的11個hook

開發 前端
在逆向分析JavaScript代碼時,開發者經常使用一些用于hook(鉤子)的技術來監視或修改程序的行為。以下是一些常用的hook技術及其示例代碼。

逆向分析JavaScript代碼時,開發者經常使用一些用于hook(鉤子)的技術來監視或修改程序的行為。以下是一些常用的hook技術及其示例代碼。

1、dom操作

在JS逆向油猴腳本中,DOM操作是最常用的一種Hook方式。通過修改DOM元素的屬性和樣式,我們可以實現對網頁的控制和修改。

// 修改DOM元素的屬性
document.getElementById('elementId').setAttribute('attrName', 'attrValue');
 
// 修改DOM元素的樣式
document.getElementById('elementId').style.property = 'value';

2、Cookie操作

Cookie Hook 用于定位 Cookie 中關鍵參數生成位置,以下代碼演示了當 Cookie 中匹配到了 __dfp 關鍵字, 則插入斷點:

(function () {
  'use strict';
  var cookieTemp = '';
  Object.defineProperty(document, 'cookie', {
    set: function (val) {
      if (val.indexOf('__dfp') != -1) {
        debugger;
      }
      console.log('Hook捕獲到cookie設置->', val);
      cookieTemp = val;
      return val;
    },
    get: function () {
      return cookieTemp;
    },
  });
})();
(function () {
    'use strict';
    var org = document.cookie.__lookupSetter__('cookie');
    document.__defineSetter__('cookie', function (cookie) {
        if (cookie.indexOf('__dfp') != -1) {
            debugger;
        }
        org = cookie;
    });
    document.__defineGetter__('cookie', function () {
        return org;
    });
})();

3、事件監聽操作

事件監聽也是JS逆向油猴腳本中常用的一種Hook方式。通過監聽網頁上的事件,我們可以觸發自定義的操作和行為。

// 監聽按鈕點擊事件
document.getElementById('buttonId').addEventListener('click', function() {
// 自定義操作和行為
});

4、AJAX攔截操作

AJAX攔截也是JS逆向油猴腳本中常用的一種Hook方式。通過攔截網頁上的AJAX請求,我們可以實現對數據的控制和修改。

// 攔截AJAX請求
XMLHttpRequest.prototype._send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function() {
// 自定義操作和行為
this._send.apply(this, arguments);
};

5、函數替換操作

函數替換也是JS逆向油猴腳本中常用的一種Hook方式。通過替換網頁上的函數,我們可以實現對函數的控制和修改。

// 替換原有函數
var originalFunction = window.functionName;
window.functionName = function() {
// 自定義操作和行為
originalFunction.apply(this, arguments);
};

6、Header操作

Header Hook 用于定位 Header 中關鍵參數生成位置,以下代碼演示了當 Header 中包含 Authorization 關鍵字時,則插入斷點:

(function () {
    var org = window.XMLHttpRequest.prototype.setRequestHeader;
    window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) {
        if (key == 'Authorization') {
            debugger;
        }
        return org.apply(this, arguments);
    };
})()

7、URL操作

URL Hook 用于定位請求 URL 中關鍵參數生成位置,以下代碼演示了當請求的 URL 里包含 login 關鍵字時,則插入斷點:

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

8、JSON.stringify操作

JSON.stringify() 方法用于將 JavaScript 值轉換為 JSON 字符串,在某些站點的加密過程中可能會遇到,以下代碼演示了遇到 JSON.stringify() 時,則插入斷點:

(function() {
    var stringify = JSON.stringify;
    JSON.stringify = function(params) {
        console.log("Hook JSON.stringify ——> ", params);
        debugger;
        return stringify(params);
    }
})();

9、JSON.parse操作

JSON.parse() 方法用于將一個 JSON 字符串轉換為對象,在某些站點的加密過程中可能會遇到,以下代碼演示了遇到 JSON.parse() 時,則插入斷點:

(function() {
    var parse = JSON.parse;
    JSON.parse = function(params) {
        console.log("Hook JSON.parse ——> ", params);
        debugger;
        return parse(params);
    }
})();

10、eval操作

JavaScript eval() 函數的作用是計算 JavaScript 字符串,并把它作為 腳本代碼來執行。如果參數是一個表達式,eval() 函數將執行表達式。如果參數是 Javascript 語句,eval() 將執行 Javascript 語句,經常被用來動態執行 JS。以下代碼執行后,之后所有的 eval() 操作都會在控制臺打印輸出將要執行的 JS 源碼:

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

11、Function操作

以下代碼執行后,所有的函數操作都會在控制臺打印輸出將要執行的 JS 源碼:

(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
    });
})();
責任編輯:華軒 來源: web前端開發
相關推薦

2021-01-31 23:56:49

JavaScript開發代碼

2024-07-10 18:51:52

2020-05-17 16:19:59

JavaScript代碼開發

2022-11-28 23:44:26

JavaScript技巧程序員

2021-10-09 07:10:31

JavaScript對象Python

2022-07-01 09:01:49

代碼hook框架

2023-08-13 16:32:12

JavaScript

2022-10-20 15:16:23

JavaScript數組技能

2021-05-26 08:50:37

JavaScript代碼重構函數

2009-06-10 21:58:51

Javascript常

2020-11-11 08:22:40

前端開發JavaScript

2023-06-13 15:15:02

JavaScript前端編程語言

2020-05-13 21:09:10

JavaScript前端技術

2020-08-18 10:30:39

云計算混合云IT

2012-10-29 11:16:13

2020-09-04 06:32:20

Pythonshutil函數

2019-03-18 08:12:31

Javascript機器學習

2019-04-18 09:42:31

JavaScript前端開發

2019-12-16 14:54:47

JavaScript開發語言

2009-09-03 10:08:27

JavaScript自
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99re视频在线 | 成人免费视频一区二区 | 91精品国产高清一区二区三区 | 国产美女在线观看 | 在线一区二区三区 | 91精品无人区卡一卡二卡三 | 亚洲免费三级 | 国产精久久久久久久妇剪断 | 成年免费大片黄在线观看岛国 | 欧美成人免费 | 91精品国产色综合久久 | 一本大道久久a久久精二百 国产成人免费在线 | 国产精品性做久久久久久 | 真人女人一级毛片免费播放 | 在线观看深夜视频 | 亚洲国产欧美日韩 | 伊人久久综合影院 | 欧美大片在线观看 | 别c我啊嗯国产av一毛片 | 日韩高清国产一区在线 | 羞羞的视频在线观看 | 一区二区三区视频在线 | 国产精品久久久久久吹潮日韩动画 | 日本a网站 | 人人人人人爽 | 人碰人操 | 久久国产日韩 | 色男人的天堂 | 激情网站在线观看 | 精品国产一区二区三区成人影院 | 九九热久久免费视频 | 久草视频观看 | 国产一区影院 | 亚洲va国产日韩欧美精品色婷婷 | 青娱乐av | 91精品国产综合久久久久久首页 | 久久tv在线观看 | h片在线看| 中文字幕乱码视频32 | 91精品国产欧美一区二区 | 天天av天天好逼 |