原因

原因是我最近一直在教爬行者,需要爬网网站以进行学习,但是该网站具有反爬行者机制,并且在代理标题中添加了一个auth领域以进行验证,因此我需要获取首先,该验证字段的值。因为这并不困难,所以没有使用断点调试步骤,并且通过简单地猜测 +尝试来反转。

分析1。请求

md5js解密_md5.js加密参考_md5.js

尝试使用Apifox直接发送请求并查看返回的结果。您可以看到返回“无验证”,这表明请求标头中缺少请求参数或auth字段。在检查了网站发送的请求后,我发现auth字段不包含请求主体,因此我猜想auth字段可能位于请求标题中。

2。请求标题

md5js解密_md5.js加密参考_md5.js

首先,打开开发人员工具,检查请求,并发现请求标题中的字段是AUTH,其值为

3648521FD0E772D0434B0DBBB86329A63,猜猜该编码可能是加密的MD5值。因此,试图直接解密MD5没有结果。

3。解密Auth

md5js解密_md5.js_md5.js加密参考

在这种情况下,尝试直接找到Auth字段的来源。发现在接口的每个刷新后,AUTH值更改了。猜测该验证值可能来自某个接口的响应。因此,我试图在开发人员工具中找到响应,发现相关接口没有响应。然后,相关的加密规则应存储在前端JS文件中。

4。前端JS

md5js解密_md5.js加密参考_md5.js

打开开发人员工具,单击应用程序,查找JS文件组,然后查看许多字母,例如I,E,T和O,您会知道JS文件已被混淆。

md5js解密_md5.js_md5.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,全站资源免费下载点击查看会员权益

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注