上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

js hook

[复制链接]

该用户从未签到

5

主题

3

回帖

17

积分

助理工程师

积分
17

新人报道

发表于 2021-11-20 14:10:21 | 显示全部楼层 | 阅读模式
下面是一个示例:这个示例演示了hook全局的cookie设置点
!(function() {
    //严谨模式 检查所有错误
    'use strict';
    //document 为要hook的对象   这里是hook的cookie
        var cookieTemp = "";
    Object.defineProperty(document, 'cookie', {
                //hook set方法也就是赋值的方法
                set: function(val) {
                                //这样就可以快速给下面这个代码行下断点
                                //从而快速定位设置cookie的代码
                                console.log('Hook捕获到cookie设置->', val);
                                cookieTemp = val;
                                return val;
                },
                //hook get方法也就是取值的方法
                get: function()
                {
                        return cookieTemp;
                }
    });
})();

首先这是一个规范的HOOK例子,在js逆向时你是否很多时候看到一个值但是断不到他是在哪里加密或者在哪里生成的,那么通过HOOK就可以获取,hook原理就是把每个值对比,然后自行进行一切判断是否是你自己想要的那个值
1.hook js是有时间性的例如在网页加载后你进行hook那么结果已经产生那么肯定是不行的。
2.你得知道是那个对象调用产生的,因为需要传递对象,get,set方法不可改变,规范写法
3.一般方法有fd拦截服务器返回的数据进行替换(通杀,可在任意地方下断点修改代码),脚本,手动注入(在网页加载第一个js的时候打下断点然后进行hook大部分可用)
4.其核心是把获取到的值保存然后导出,其次这玩意就是个自执行函数加导出,在逆向的时候经常会用到类似的,通过v8引擎本地实现js加密 或生成实现反反爬,模拟登录等
5.道总以前发过我这是一些玩了几次的个人见解不足得道总给我纠正下

  • TA的每日心情
    开心
    昨天 18:22
  • 签到天数: 703 天

    [LV.9]以坛为家II

    27

    主题

    733

    回帖

    7212

    积分

    荣誉开发者

    精通各种语言的HelloWord!

    积分
    7212

    荣誉开发者油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2021-11-20 17:28:50 | 显示全部楼层
    ggnb!!!!              
    回复

    使用道具 举报

  • TA的每日心情

    2023-12-8 22:55
  • 签到天数: 37 天

    [LV.5]常住居民I

    15

    主题

    145

    回帖

    153

    积分

    荣誉开发者

    积分
    153

    荣誉开发者

    发表于 2021-11-20 17:56:18 | 显示全部楼层
    ggnb呀
    摸鱼中
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    860

    回帖

    1359

    积分

    荣誉开发者

    积分
    1359

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2021-11-20 19:46:39 | 显示全部楼层
    这个写法不太好,因为cookie有这种赋值方法:
    1. document.cookie = 'test=1;domain=test.com;path=/';
    复制代码

    这样只会改变某个值,而访问document.cookie时得到的是所有值,还有个毛病是没有set之前去get,会得到空值,这个也不符合预期。建议改成这样,直接调用原型上的get、set方法:
    1. const descriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie');
    2. Object.defineProperty(document, 'cookie', {
    3.   configurable: true,
    4.   get: descriptor.get,
    5.   set: function(val) {
    6.     console.log('Hook捕获到cookie设置->', val);
    7.     descriptor.set.call(document, val);
    8.   }
    9. });
    复制代码


    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    3

    回帖

    17

    积分

    助理工程师

    积分
    17

    新人报道

    发表于 2021-11-26 13:43:54 | 显示全部楼层
    cxxjackie 发表于 2021-11-20 19:46
    这个写法不太好,因为cookie有这种赋值方法:

    这样只会改变某个值,而访问document.cookie时得到的是所有 ...

    哥哥nb!!!!!!!!!!!!!!!!
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表