> 文章列表 > 爬虫JS逆向思路-hook钩子

爬虫JS逆向思路-hook钩子

爬虫JS逆向思路-hook钩子

 网络上几千块都学不到的JS逆向思路这里全都有👏🏻👏🏻👏🏻

本系列持续更新中,三连关注不迷路👌🏻  

干货满满不看后悔👍👍👍

🕧注意本文爬虫逆向仅供学习交流使用

📝个人主页→数据挖掘博主ZTLJQ的主页

个人推荐python学习系列:

☄️爬虫JS逆向系列专栏 - 爬虫逆向教学

☄️python系列专栏 - 从零开始学python


hook技术介绍

Python爬虫中的hook技术是指在爬取网页时通过钩子函数对请求进行修改或者拦截,从而达到定制化需求的目的。这种技术在爬虫开发中非常重要,它可以让我们更加灵活地控制爬取过程。

Python爬虫中的hook技术主要包括以下几种:

1.requests的hook

requesthook是在发送请求前对请求进行修改的操作。它通常用于添加请求头、设置代理等操作。例如,我们可以使用requesthook实现对每个请求都添加一个User-Agent头部:

import requestsdef add_user_agent(request):headers = request.headersheaders['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'return requestrequests.get('http://www.baidu.com', hooks={'pre_request': add_user_agent})

2.response的hook

responsehook是在接收到响应后对响应进行处理的操作。它通常用于解析网页数据、保存数据等操作。例如,我们可以使用responsehook实现对每个响应都打印出网页内容:

import requestsdef print_response(response):print(response.text)requests.get('http://www.baidu.com', hooks={'response': print_response})

3.exception的hook

exceptionhook是在爬虫发生异常时对异常进行处理的操作。它通常用于重试操作、记录日志等操作。例如,我们可以使用exceptionhook实现对每个异常都进行重试:

import requestsdef retry(exception):if isinstance(exception, (requests.ConnectionError, requests.Timeout)):return Truereturn Falserequests.get('http://www.baidu.com', hooks={'response': retry})

hook技术可以很好的帮助大家在爬虫中找到一些参数和数据


hook常用钩子写法--改一点参数可以直接使用

1、当我们遇到 JSON.parse这种加密数据可以直接使用下面的钩子

(function(){var parse = JSON.parse;JSON.parse = function(params) {console.log("Hook -->",params);debugger;return parse(params);
}
})();

2、当我们遇到 JSON.stringify() 这种方法就可以用到下面这个钩子

(function(){var stringify = JSON.stringify;JSON.stringify = function(params) {console.log("Hook -->",params);debugger;return stringify(params);
}
})();

3、当我们需要找header的时候,就可以用下面这个代码

var code = function(){
var org = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){if(key=='Authorization'){debugger;}return org.apply(this,arguments);
}
}

4、当我们需要找url的参数的时候就用下面这个钩子

var code = function(){
var open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function(method,url,async){if(url.indexOf("/改参数api")>-1){debugger;}return open.apply(this,arguments);
};
}

5、当我们找cookie参数的时候,可以这样注入钩子

(function (){'use strict';var cookieTemp = '';Object.defineProperty(document,'cookie',{set: function(val){if(val,indexOf('要找的参数') != -1){debugger;}console.log('Hook抓取到的cookie->',val);cookieTemp = val;return val;
},get: function(){return cookieTemp;
},
});
})();

最后希望以上内容能够帮助到大家谢谢!!!