爬虫随笔(二) hook
各类常用hook
根据特定情况修改使用
hook eval
替换js中的所有eval
(function(){
var _eval = eval
eval = function(src ){
console.log('eval 截断开始')
debugger
_eval.apply(this,src)
console.log('eval 截断结束')
}
})()
hook parse
替换parse,parse常用于加密
(function(){
var parse = JSON.parse
JSON.parse = function (obj) {
console.log('parse 截断开始')
debugger
return parse(obj)
}
})()
hook stringify
(function(){
var stringify = JSON.stringify
JSON.stringify = function (obj) {
console.log('stringify 截断开始')
debugger
return stringify(obj)
}
})()
hook header
对标头添加时截断
(function (){
let set_headers = window.XMLHttpRequest.prototype.setRequestHeader
window.XMLHttpRequest.prototype.setRequestHeader = function (header, value) {
debugger
return set_headers.apply(this, arguments)
}
})()
hook cookie
对于cookie的修改,查询时拦截
(function () {
'use strict';
var _cookie = '';
Object.defineProperty(document, 'cookie', {
get: function () {
return _cookie;
},
set: function (value) {
_cookie = value;
console.log('cookie set:', value);
return value;
}
});
})();
无限debugger
要绕过无限debugger,首先要了解各种debugger怎么实现的
第一种,直接运行的,只运行一次的
debugger
eval('debugger')
第二种,通过定时器,递归无限debugger的
setInterval(function () {
debugger
console.log('debugger')
},1000)
setTimeout(function debug(){
debugger
console.log('debugger')
setTimeout(debug,1000)
})
第三种,通过原型链的
没有代码了
对于第二种的无限debugger可以使用hook定时器或者定时器运行函数来绕开无限debugger,或者直接右键使其不执行(一般会出错);当然还可以文件替换,把对应的无限debugger给清空(最简单的方法之一),不管哪种方法,绕过debugger能获得数据就是好方法。
本文来自博客园,作者:Liyukio,转载请注明原文链接:https://www.cnblogs.com/Liyukio/p/18707592

浙公网安备 33010602011771号