Hook定义
Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权
这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递
简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。
在 js 中,系统程序可以指浏览器API,也可以指代码中实现的一些方法等
Hook 步骤
1、寻找 hook 点
2、编写 hook 逻辑
3、调试
函数 hook 公式:
old_func = func
func = function(argument){
my task;
return old_func .apply(argument)
}
func.prototype..... = .......
func :要hook的函数
对象中属性 hook 公式:
old_attr = obj.attr
Object.defineProperty(obj, ‘attr‘, {
get: function() {
console.log(cookie_cache);
return old_attr
},
set: function(val) {
return ......
}
hook cookie
Object.defineProperty(document, ‘cookie‘, {
get: function(){
debugger;
return;
},
set: function(val){
debugger;
return;
}
})
hook eval
eval_bk = eval
eval = function(val){
debugger;
return eval_bk(val)
}
eval.toString = function(){
return "function eval() { [native code] }"
}
js hook目的是找到函数入口以及一些参数变化,便于分析js逻辑
Hook 插件:油猴脚本
Tampermonkey
// ==UserScript==
// @name Hook global
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author 悦来客栈的老板+妄为写代码+萌木盖
// @include *
// @grant none
// @run-at document-start
// ==/UserScript==
(function() {
‘use strict‘;
//全局变量 监控
var t = window._t;
var window_flag = ‘_t‘;
var window_value = window[window_flag];
Object.defineProperty(window, window_flag, {
get: function() {
console.log(‘Getting window._t‘,window_value);
return t;
},
set: function(val) {
console.log(‘Setting window._t‘, val);
debugger;
t = val;
return t;
}
});
})();
hook的关键代码:@run-at document-start
意思为脚本将尽快注入。
还一个主要函数是defineProperty
他监控函数值,set该值和get该值都会调用这里面的两个方法。
此脚本是针对一号店的登录页面,其他网站需根据想监控的数据改对象名和变量值