hook代码的目的是为了更方便的调试代码,找出函数入口
遇到好的方法的随时跟新
1.对象中属性hook公式----cookie
- hook cookie
Object.defineProperty(document, 'cookie', {
set: function(val){
console.log('cookie',val)
debugger;
},
get:function(val){
console.log('cookie',val)
}
})
普通对象正常返回值--hook
(function() {
'use strict';
var v = 'value';
var new_value = qq[v]
Object.defineProperty(qq, v, {
get: function() {
// console.log('获取属性值',new_value);
// debugger;
return new_value;
},
set: function(value) {
console.log('设置属性值',value);
debugger;
new_value = qq[v]
return value;
},
});
})();
//全局对象的属性都可以照这个例子
- 严格模式 正常返回cookie的值
(function() {
'use strict';
var cookie_cache = document.cookie;
Object.defineProperty(document, 'cookie', {
get: function() {
// console.log(cookie_cache);
return cookie_cache;
},
set: function(val) {
if (val.indexOf('gdxidpyhxdE') != -1){
console.log('cookie',val)
debugger;
}
var cookie = val.split(";")[0];
var ncookie = cookie.split("=");
var flag = false;
var cache = cookie_cache.split(";");
cache = cache.map(function(a){
if (a.split("=")[0] === ncookie[0]){
flag = true;
return cookie;
}
return a;
})
cookie_cache = cache.join(";");
if (!flag){
cookie_cache += cookie + ";";
}
},
});
})();
2. 关于原型链 hook例子 ---- 字符串, 请求头
- String自带函数例子 Number Array Object 可用同方法
String.prototype.split_old = String.prototype.split;
String.prototype.split = function (val) {
str = this.toString()
console.log(str,val);
debugger;
return str.split_old
};
String.prototype.split.toString = function(){return'function split() { [native code] }'}
//最后一步防止检测
- 请求头hook
var header_old = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) {
if (key=='k'){
console.log(key, value)
debugger;
}
if (key=='token'){
console.log(key, value)
debugger;
}
debugger;
return header_old.apply(this, arguments);
}
3. 函数 hook例子
例子1
function a(x,y){return x+y} // 要hook的函数
// 先赋值
old_func = a;
// 改写a方法
a = function(){
// todo
console.log('result', arguments);
return old_func.apply(this,arguments)
}
console.log(a(1,2)) // 调用
例子2
(function() {
'use strict';
let old_func = sessionStorage.setItem;
sessionStorage.setItem = function () {
// todo
console.log('argument-----', arguments);
return old_func.apply(this, arguments)
};
sessionStorage.setItem.toString = function () {
return 'function split() { [native code] }'
};
})();









网友评论