19 JavaScript的hook
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
本文来自博客园,作者:生而自由爱而无畏,转载请注明原文链接:https://www.cnblogs.com/zczhaod/p/17662730.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~