JS安全防护算法与逆向分析——JS Hook

《反爬虫AST原理与还原混淆实战》书稿内容

JS Hook

声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。


一、JS Hook原理与作用

JS Hook原理非常简单,现在将一个最简单的例子,比如有这样一个函数

function test(a,b){
    return a+b;
}

我们可以直接在console里边修改这个函数,比如如下这样:

var _test=test;
test=function(a,b){
    console.log(a,b);
    var result=_test(a,b);
    console.log(result);
}

我们在console里边调用test(1,2),会发现函数输出已经被我们修改了。这里的修改和APP的frida修改几乎一样。我们可以用它来做什么呢?最常见的是修改一些系统函数,比如debugger、Function、eval、JSON.stringfy等等反调试相关的。

二、JS Hook检测与过检测

有的网站会在Hook这里做个检测,比如读者可以在console里边输出test+"",你会发现我们修改后的函数已经和以前的不一样的,因而可以在网页源代码里做个判断函数字符串是否相等的检测来防止你Hook,如下所示。

setInterval(function(){
    test+""=="function test(a,b){return a+b;}"
    ?console.log("未修改")
    :setInterval(function(){eval("debugger")},
    1000);

我们要想过这种检测,可以Hook一下toString方法,笔者在这里直接返回正确的。实际开发中,读者可以添加不同的if条件定位到需要的函数再来做修改。

Function.prototype.toString=function(){
    return "function test(a,b){return a+b;}"
}

Hook setInterval也可以做到

var _setInterval=setInterval;
setInterval=function(a,b){
    if(a.toString().indexOf("debugger") != -1){
        return null;
    }
    _setInterval(a,b);
}

三、JS Hook对象属性

Object.defineProperty()定义新的属性或者修改属性。

<script>
    var obj={};
    console.log("过渡代码");
    
    
    function test(){
        obj.name="losenine";
    }
</script>

 对这段代码进行Hook,我们在定义name之前让它停下来。然后进行Hook,代码如下:

Object.defineProperty(obj,"name",
    {set:function(x)
        {debugger;return x;}
    }
)

Hook cookies的话,必须在加载之前进行Hook。除了使用Chrome拓展,我们可以自己查找。比如查找pwd的cookie:

Object.defineProperty(document,"cookie",
    {set:function(x){
        if(x.indexOf("pwd")!=-1){
            if(x.indexOf("pwd=null;")==-1){
                console.log(x);
            }
        }
        retrun x;
    }
})

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值