js补环境 js逆向 系列
JS逆向:Hook 技术原理以及在 JS 逆向中的相关应用
Hook 技术原理
逆向找课私Hook 是一种钩子技术,在系统没有调用函数之前,钩子程序就先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,也可以强制结束消息的传递。
简单来说,修改原有的 JS 代码就是 Hook。
Hook 技术之所以能够实现有两个条件:
客户端拥有 JS 的最高解释权,可以决定在任何时候注入 JS,而服务器无法阻止或干预。服务端只能通过检测和混淆的手段,另 Hook 难度加大,但是无法直接阻止。
除了上面的必要条件之外,还有一个条件。就是 JS 是一种弱类型语言,同一个变量可以多次定义、根据需要进行不同的赋值,而这种情况如果在其他强类型语言中则可能会报错,导致代码无法执行。js 的这种特性,为我们 Hook 代码提供了便利。
JS 作用域问题 1:自执行函数的 Hook 问题
JS 变量是有作用域的,只有当被 hook 函数和 debugger 断点在同一个作用域的时候,才能 hook 成功。
对于下面的自执行函数,在执行完之后我们实际上是无法 hook test 函数的。因为 test 是在自执行函数的作用域,而不是在全局作用域。而此时,自执行函数已经执行完了,test 函数已经被内存清空无法 hook。