原因
原因是我最近一直在教爬行者,需要爬网网站以进行学习,但是该网站具有反爬行者机制,并且在代理标题中添加了一个auth领域以进行验证,因此我需要获取首先,该验证字段的值。因为这并不困难,所以没有使用断点调试步骤,并且通过简单地猜测 +尝试来反转。
分析1。请求
尝试使用Apifox直接发送请求并查看返回的结果。您可以看到返回“无验证”,这表明请求标头中缺少请求参数或auth字段。在检查了网站发送的请求后,我发现auth字段不包含请求主体,因此我猜想auth字段可能位于请求标题中。
2。请求标题
首先,打开开发人员工具,检查请求,并发现请求标题中的字段是AUTH,其值为
3648521FD0E772D0434B0DBBB86329A63,猜猜该编码可能是加密的MD5值。因此,试图直接解密MD5没有结果。
3。解密Auth
在这种情况下,尝试直接找到Auth字段的来源。发现在接口的每个刷新后,AUTH值更改了。猜测该验证值可能来自某个接口的响应。因此,我试图在开发人员工具中找到响应,发现相关接口没有响应。然后,相关的加密规则应存储在前端JS文件中。
4。前端JS
打开开发人员工具,单击应用程序,查找JS文件组,然后查看许多字母,例如I,E,T和O,您会知道JS文件已被混淆。
尝试找到主JS文件,并发现主JS文件中有关网络请求部分的函数,尽管它被混淆了,但可以大致看到其函数。因此,我尝试找到调用该功能的地方,也许有关auth的内容可以在呼叫中找到。最后,找不到,它应该是在其他JS文件中执行的呼叫操作,因此此路径不起作用。
5.HEADERS
由于AUTH请求存储在请求标头中,因此请尝试在JS文件中查找标题字段,以查看是否有有关AUTH的加密规则。最后,在某个JS文件中找到了有关标题设置的代码,如下所示:
preSendHandler: e => {
const t = new Date().getTime()
, o = Le(t);
return {
...e,
headers: {
Timestamp: t,
Auth: o
}
}
}
您可以看到,在发送请求时,标题需要带两个字段,一个是auth字段,另一个是时间戳字段。 auth字段由LE(T)函数生成,因此您只需要找到LE(T)功能的实现并检查其加密规则即可。
6。加密规则
在JS文件中搜索LE功能,并发现其定义如下:
function Le(e) {
return md5.md5(md5.md5(String(e), 32))
}
发现加密规则是首先加密时间戳MD5,然后对加密结果MD5进行加密。因此,您只需要两次对时间戳进行加密即可获取Auth字段的值。
Python加密步骤
import hashlib
import time
def le(e):
# 第一次MD5,将输入转换为字符串并计算MD5
first_md5 = hashlib.md5(str(e).encode()).hexdigest()
# 拼接字符串并第二次计算MD5
combined = first_md5
second_md5 = hashlib.md5(combined.encode()).hexdigest()
return second_md5
# 获取当前时间的毫秒级时间戳(与JavaScript的new Date().getTime()等效)
t = int(time.time() * 1000)
# 计算最终结果
o = le(t)
print("Timestamp:", t)
print("Result:", o)
运行结果:
Timestamp: 1739170958166
Result: c5b3174625585bc949f8319d3e309c4a
尝试使用验证值和时间戳值来提出请求。如果请求成功,则意味着相反。
本文仅用于共享JS反向想法,不涉及任何特定的网站。请合理地爬行,不要攻击和破坏他人的网站服务器。
本网站每日更新互联网创业教程,一年会员只需98,全站资源免费下载点击查看会员权益