爬虫随笔(二) 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)
    }
})()

  对于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能获得数据就是好方法。

posted @ 2025-02-10 12:28  Liyukio  阅读(27)  评论(0)    收藏  举报