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 + ";";
}
},
});
})();
关于原型链 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);
}
函数 hook例子
function a(x,y){return x+y} // 要hook的函数
// 先赋值
old_func = a;
// 改写a方法
a = function(argument){
// todo
console.log(argument)
return old_func.apply(argument)
}
console.log(a(1,2)) // 调用
Hook http请求
http请求包括 ajax、src、href、表单等
// 代码来源:https://www.cnblogs.com/amiezhang/p/9984690.html
function hookAJAX() {
XMLHttpRequest.prototype.nativeOpen = XMLHttpRequest.prototype.open;
var customizeOpen = function (method, url, async, user, password) {
// do something
this.nativeOpen(method, url, async, user, password);
};
XMLHttpRequest.prototype.open = customizeOpen;
}
/**
*全局拦截Image的图片请求添加token
*
*/
function hookImg() {
const property = Object.getOwnPropertyDescriptor(Image.prototype, 'src');
const nativeSet = property.set;
function customiseSrcSet(url) {
// do something
nativeSet.call(this, url);
}
Object.defineProperty(Image.prototype, 'src', {
set: customiseSrcSet,
});
}
/**
* 拦截全局open的url添加token
*
*/
function hookOpen() {
const nativeOpen = window.open;
window.open = function (url) {
// do something
nativeOpen.call(this, url);
};
}
function hookFetch() {
var fet = Object.getOwnPropertyDescriptor(window, 'fetch')
Object.defineProperty(window, 'fetch', {
value: function (a, b, c) {
// do something
return fet.value.apply(this, args)
}
})
}
// 代码来源:https://www.cnblogs.com/amiezhang/p/9984690.html
cookie钩子:用于定位cookie中关键参数生成位置
当cookie中匹配到了 目标cookie字符串, 则插入断点。
(function () {
'use strict';
var cookieTemp = '';
Object.defineProperty(document, 'cookie', {
set: function (val) {
if (val.indexOf('目标cookie字符串') != -1) {
debugger;
}
console.log('Hook捕获到cookie设置->', val);
cookieTemp = val;
return val;
},
get: function () {
return cookieTemp;
},
});
})();
请求钩子
用于定位请求中关键参数生成位置。
(function () {
'use strict';
var cookieTemp = '';
Object.defineProperty(document, 'cookie', {
set: function (val) {
if (val.indexOf('关键参数') != -1) {
debugger;
}
console.log('Hook捕获到关键参数设置->', val);
cookieTemp = val;
return val;
},
get: function () {
return cookieTemp;
},
});
})();