情人节,去约会了,还看啥文章!
能看到这里的,说明没有约会了,我们简单的聊一下hook技术和技巧
Hook是一种钩子技术,在系统没有调用函数之前,钩子程序就先得到控制权,这时候钩子函数既可以加工处理该函数的执行行为,也可以强制结束消息的传递,简单来说就是修改原有的js代码就是hook。
JS是一种弱类型语言,同一个变量可以多次定义、根据需要进行不同的赋值,而这种情况如果在其他强类型语言中则可能会报错,导致代码无法执行。js的这种特性,为我们Hook代码提供了便利。
Hook的实现方式
一种是直接替换函数;
一种是Object.defineProperty通过为对象的属性赋值的方式进行Hook
两种的区别:
函数hook不会失败,一般不会hook失败,除非proto模拟的不好被检测到;
属性hook,当网站所有的逻辑都采用Object.defineProperty绑定时,属性hook就会失效。同时,Object.defineProperty无法进行二次hook。
第一种方式简单、但是太粗暴,容易影响原有代码的正常执行,也容易被检测到
而第二种方式会更优雅一些,具体需要结合具体需求选择合适的Hook方式
常见的hook
cookiehook
2.请求头headerhook
3.无限dedbug解决
4.其他,可以使用通用模板(赋值,重写,原型链)
但是呢,很多情况下是无法hook到的,比如阿里系的acw_,是无法hook到的。下一期分享一下阿里的acw_cookie的逆向