19 JavaScript的hook

19 JavaScript的hook

什么叫hook?
Hook技术又叫钩子函数,在系统没有调用该函数之前,钩子程序就捕获该消息,钩子函数先得到该函数的控制权,这时钩子函数既可以改变该函数的执行行为,还可以强制结束消息的传递,简单来说。就是把系统的程序拉出来,来变成我们自己执行的片段。我们可以控制执行函数的入参和出参。

为什么能实现hook?
客户端拥有js的最高解释权,可以决定在任何的时候注入js服务器而无法左右,只能通过 检测和混淆手段令hook难度加大,但是却无法阻止hook。
hook的目的:找到函数入口以及一些参数的变化,便于分析js逻辑。

例如, hook eval:

eval_ = eval; // 先保存系统的eval函数
eval = function(s){
    console.log(s);
    debugger;
    return eval_(s);
}
eval()
eval.toString = function(){return 'function eval() { [native code] }'}  // 可能会被检测到, 用这种方案来进行

对Function的hook, 主要为了解决无限debugger:

var free_function_constructor = (function(){}).__proto__.constructor;
(function(){}).__proto__.constructor = function(arg){
    console.log("自由无畏");
    if(arg ==='debugger'){
        return function(){}
    } else {
        return new qiaofu_function_constructor(arg);
    }
}

上面都是hook的系统函数. 但有时, 我们需要hook某个属性. 此时应该怎么办?

var v;
Object.defineProperty(document, "cookie", {
    set: function(val) {
        console.log("有人来存cookie了");
    	v = val;
        if(val.indexOf("uuid")){debugger;}

        return val;
    },
    get() {
        console.log("有人提取cookie了");
        debugger;
        return v;
    }
});

剩下的咱就不再赘述了. 在逆向时, 常用的主要有:
hook eval 、hook Function 、hook JSON.stringify、JSON.parse 、setInterval, setTimeout, hook cookie

posted @ 2023-08-28 16:34  生而自由爱而无畏  阅读(104)  评论(0编辑  收藏  举报