首页 > 编程语言 >19 JavaScript的hook

19 JavaScript的hook

时间:2023-08-28 16:44:42浏览次数:57  
标签:function return 函数 19 JavaScript hook eval debugger

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

标签:function,return,函数,19,JavaScript,hook,eval,debugger
From: https://www.cnblogs.com/zczhaod/p/17662730.html

相关文章

  • 18 JavaScript中的三元运算
    18JavaScript中的三元运算先来看一个例子:leta=10;letb=20;letd=a>b?a:bconsole.log(d); //20三元运算语法:条件表达式?A:B说明:当条件表达式为True,运算后的结果为A,否则结果为B。接下来在看一个恶心的:leta=10;letb=20;letc=5;letd=17......
  • Parallels Desktop 19 for Mac 发布, 简化 macOS 和 Windows 交互
    ParallelsDesktop19forMac发布,简化macOS和Windows交互ParallelsDesktop19BusinessEdition请访问原文链接:https://sysin.org/blog/parallels-desktop-19/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgAugust21,2023Mac爱好者大家好,这是多么令......
  • javascript中parseInt的问题
    今天遇到一个有趣的问题,就是在用javascript的parseInt函数时,parseInt("08")或者parseInt("09")返回的居然是0,而parseInt("01")...parseInt("07")都是正确的,一开始很难理解,后来发现出现这个问题的原因是当在前面有"0"时,javascript会认为这是一个八进制数,而"08"和"09"不是一个合法......
  • 你不知道的 JavaScript - “this”
    JavaScript里的this到底指得是什么?很多人都会告诉你this指的是当前对象。这样理解对么?在大多数情况下确实没错。比如我们经常会在网页上写这样的JavaScript: <inputtype="submit"value="提交"onclick="this.value='正在提交数据'"/......
  • JavaScript FSO属性大全
     什么是FSO?FSO即FileSystemObject文件系统对象,是一种列表Windows磁盘目录和文件,对目录和文件进行删除、新建、复制、剪切、移动等操作的技术。使用FSO网站的好处:直接读取目录下的文件和子目录,方便维护,如需要添加任何内容,将文件放在相应的目录下即可;FSO网站类似Window......
  • Javascript中this的用法小结
    1.概述this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象。但是在javascript中,由于javascript的动态性(解释执行,当然也有简单的预编译过程),this的指向在运行时才确定。这个特性在给我们带来迷惑的同时也带来了编程上的......
  • vs2019-cuda配置入门
    cuda使用如下1、打开VS,新建C++空项目 2、右击源文件->添加->新建项 3、选择CUDAC/C++File,名称位main.cu 4、把下面的示例源码复制到main.cu中#include"cuda_runtime.h"#include"device_launch_parameters.h"#include<stdio.h>/***************************......
  • 【CF1519D】Maximum Sum of Products
    #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;lln,a[5000+10],b[5000+10],abpre[5000+10],absuf[5000+10],ans;intmain(){ cin>>n; for(lli=1;i<=n;i++)cin>>a[i]; for(lli=1;i<=n;i++)cin>>b[i]; for(......
  • Javascript Print(*)
    1.实现打印功能1)ExecWB()通过脚本程序来调用IE菜单下面的打印命令。实现的代码如下:<scriptlanguage="javascript">functionprintsetup(){//打印页面设置wb.execwb(8,1);}functionprintpreview(){//打印页面预览wb.execwb(7,1);......
  • Javascript压缩工具
    javascriptcompressor.com(在线压缩)shrinksafe.dojotoolkit.org(在线文件压缩)dean.edwards.name/packer(在线压缩)YUICompressor(使用命令行来压缩,需要JAVA虚拟机来运行压缩程序 有个压缩比更高的,是个要注册的软件...javascriptObfuscatorhttp://www.javascript-source.......