微笑哥哥 发表于 2021-11-20 14:10:21

js hook

下面是一个示例:这个示例演示了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.道总以前发过我这是一些玩了几次的个人见解不足得道总给我纠正下

Ne-21 发表于 2021-11-20 17:28:50

ggnb!!!!            

执念e1 发表于 2021-11-20 17:56:18

ggnb呀{:4_110:}

cxxjackie 发表于 2021-11-20 19:46:39

这个写法不太好,因为cookie有这种赋值方法:
document.cookie = 'test=1;domain=test.com;path=/';
这样只会改变某个值,而访问document.cookie时得到的是所有值,还有个毛病是没有set之前去get,会得到空值,这个也不符合预期。建议改成这样,直接调用原型上的get、set方法:
const descriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie');
Object.defineProperty(document, 'cookie', {
configurable: true,
get: descriptor.get,
set: function(val) {
    console.log('Hook捕获到cookie设置->', val);
    descriptor.set.call(document, val);
}
});

微笑哥哥 发表于 2021-11-26 13:43:54

cxxjackie 发表于 2021-11-20 19:46
这个写法不太好,因为cookie有这种赋值方法:

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

哥哥nb!!!!!!!!!!!!!!!!
页: [1]
查看完整版本: js hook