js hook

Hook定义

Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权

这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递

简单来说,就是把系统的程序拉出来变成我们自己执行代码片段

在 js 中,系统程序可以指浏览器API,也可以指代码中实现的一些方法等


Hook 步骤

1、寻找 hook 点

2、编写 hook 逻辑

3、调试

函数 hook 公式:

old_func = func
func = function(argument){
	my task;
	return old_func .apply(argument)
}
func.prototype..... = .......

func :要hook的函数

对象中属性 hook 公式:

old_attr = obj.attr
Object.defineProperty(obj, ‘attr‘, {
        get: function() {
            console.log(cookie_cache);
            return old_attr 
	},
        set: function(val) {
		 return  ......
}

hook cookie

Object.defineProperty(document, ‘cookie‘, {
        get: function(){
        debugger;
        return;
    },
        set: function(val){
        debugger;
        return;
    }
})

js hook

hook eval

eval_bk = eval
eval = function(val){
    debugger;
    return eval_bk(val)
}
eval.toString = function(){
    return "function eval() { [native code] }"
}

js hook目的是找到函数入口以及一些参数变化,便于分析js逻辑


Hook 插件:油猴脚本

Tampermonkey

// ==UserScript==
// @name         Hook global
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       悦来客栈的老板+妄为写代码+萌木盖
// @include      *
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    ‘use strict‘;
    //全局变量 监控
    var t = window._t;
    var window_flag = ‘_t‘;
    var window_value = window[window_flag];
    Object.defineProperty(window, window_flag, {
        get: function() {
            console.log(‘Getting window._t‘,window_value);
            return t;
        },
        set: function(val) {
            console.log(‘Setting window._t‘, val);
            debugger;
            t = val;
            return t;
        }
    });
})();

hook的关键代码:@run-at document-start 意思为脚本将尽快注入。

还一个主要函数是defineProperty他监控函数值,set该值和get该值都会调用这里面的两个方法。

此脚本是针对一号店的登录页面,其他网站需根据想监控的数据改对象名和变量值

js hook

上一篇:JSON.stringfy选择性地把属性转化成字符串


下一篇:Python的抽象方法实现的简洁方式