js逆向-MD5
再进行数据爬取的过程中,有些时候浏览器访问服务端会带上一些加密的参数,爬虫模拟客户端操作,也需要携带加
密参数才可以正常获取数据,那这时候就需要我们去观察浏览器是怎么对这个数据加密的,根据不同的加密方式去编
写相关的代码。
浏览器获取加密参数基本都是执行了js代码,所以我们先需要分析加密的位置和加密的方式。
实现
找到目标url
image.png
post请求需要携带参数,并且不是携带表单数据,而是请求载荷,表单数据和请求载荷的区别在于请求的
- 表单数据:表单数据通常是通过HTML表单提交的用户输入数据。当用户在网页上填写表单并点击提交按钮时,
浏览器会将表单数据封装为一个HTTP POST请求,并将数据作为请求体(Request Body)的一部分发送到服务
器。表单数据通常使用键值对(Key-Value)的形式来表示,其中键表示表单字段的名称,值表示用户输入的内容。
image.png
-
请求载荷(Payload):请求载荷是指在HTTP请求中传递的任意数据。与表单数据不同,请求载荷可以是各种
形式的数据,如JSON、XML、二进制数据等。
image.png
image.png
并且通过抓取数据包可以发现第一页和第二页的请求中,u-sign的值不一样,也就意味着,如果使用python代码模拟
请求,就没有办法使用同一个u-sign值去请求到结果
image.png
找u-sign加密数据的赋值位置
image.png
image.png
此时都是匹配的位置,这么多我们可以通过给每个打断点的方式去判断这其中是否生效(断点的作用是在程序执行过
程中暂停代码的执行,以便你可以检查程序的状态和调试代码。当程序执行到设置了断点的行时,调试器会中断程序
的执行,并进入调试模式,此时你可以逐行执行、观察变量的值、检查程序的执行路径等)
其中发现第三个是会执行的
image.png
image.png
image.png
image.png
image.png
与测试工具中的值是一致,所以确定这个u-sign的值就是通过md5加密出来的。通过以上分析,加密调用n函数,传
入的是请求载荷中的字符串+&+9sasji5owng41irkisvtjhlxhmrysrp1固定的值 所以,可以使用python模拟过程
python代码实现
image.png
完整代码
image.png
image.png