• 技术文章 >web前端 >前端问答

    javascript的函数可以hook吗

    长期闲置长期闲置2022-06-29 16:57:38原创117

    javascript的函数可以hook;hook是一种动态修改函数执行流程或返回结果的方法,JavaScript作为一种动态语言也可以进行hook操作,hook通常用来针对某些参数或者变量进行侦听、打印输出、替换等操作。

    本教程操作环境:windows10系统、javascript1.8.5版、Dell G3电脑。

    javascript的函数可以hook吗

    可以。

    Hook是一种动态修改函数执行流程或返回结果的方法,在实际应用中非常广泛。Javascript作为一种动态语言,也可以进行Hook操作。随着Javascript语言的发展,Hook的方法也越来越多,

    hook直译的意思为钩子,在逆向领域通常用来针对某些参数,变量进行侦听,打印输出,替换等操作。

    示例如下:

    示例代码

    function add(a,b){
    return a + b
    }

    hook代码

    这是一个很简单加法函数,通过Hook能获取到这两个参数的值,相当于在return之前添加了一句代码console.log(a,b),这样便能输出这两个的值便于分析。那么可以使用如下的方式来复写改函数,而这个方式在javascript也就是装饰者模式

    let _add = add
    add = function () {
      console.log('arguments', arguments)
      let result = _add.apply(this, arguments)
      console.log('result', result)
      return result // 如果不需要result 则可直接return _add()
    }

    完整代码

    function add(a, b) {
      return a + b
    }
     
    let _add = add
    add = function () {
      console.log('arguments', arguments)
      let result = _add.apply(this, arguments)
      console.log('result', result)
      return result 
    }
     
    add(1, 2)

    再次调用add(1,2)便会输出arguments参数以及结果3,一个很简单HOOK就实现了。

    不过这个例子可能过于简单,我所要表达的意思是,通过Hook,定位到我们想Hook的函数与变量,通过一系列操作(函数复写,元编程),只要触发该函数或使用(取值,修改)该变量,便能将我们想要的结果(前后的结果(如 加密前,加密后))获取到。这才是我们的目的。

    书中给的例子想说明的,想为某个原函数(比如这里的add)添加一些功能,但该原函数可能是由其他开发者所编写的,那么直接修改原函数本身将可能导致未知BUG,于是便可以用上面的方式进行复写原函数的同时,还不破坏原函数。

    【相关推荐:javascript视频教程web前端

    以上就是javascript的函数可以hook吗的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:javascript
    上一篇:javascript是服务器端脚本语言吗 下一篇:javascript是全栈语言吗
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 什么是javascript对象的属性值• javascript中驼峰命名法是什么• 简单聊聊JavaScript中的事件监听• 整理分享JavaScript开发中常见的5种数据处理问题• JavaScript数据处理的5个常见问题详解
    1/1

    PHP中文网