精选博客反爬过程中 x-ca-noncex-ca-signature 参数的解密过程

Posted 梦想橡皮擦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精选博客反爬过程中 x-ca-noncex-ca-signature 参数的解密过程相关的知识,希望对你有一定的参考价值。

本篇博客在 请求头 x-ca-key、x-ca-nonce、x-ca-signature 加密分析第一篇 的基础上继续编写,大家学习时可以从上一篇入手。

文章目录


在上一篇博客我们已经捕获了参数的JS代码,这篇博客重点要将其在 Python 中进行复现,即使用 Python 重新编写参数逻辑。

x-ca-nonce 代码实现

在请求参数分析的时候,我们得到的代码块如下所示,其中重点的是 p 函数。

e.headers["X-Ca-Nonce"] = p()

查看 p() 函数,可以看到其实际内容是 uuid 生成,在 Python 中对其进行复现。

p = function(e) 
        var t = e || null;
        return null == t && (t = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function(e) 
            var t = 16 * Math.random() | 0;
            return ("x" === e ? t : 3 & t | 8).toString(16)
        ))),

python 实现 uuid

在 Python 中可以使用 uuid 模块生成 UUID。

下面是一个生成 UUID 的代码示例:

def get_x_ca_nonce():
    random_uuid = uuid.uuid4()
    return random_uuid

这段代码比较简单,直接用内置的 uuid 模块即可。

x-ca-signature代码实现

该参数在跟进代码逻辑时,发现重点代码如下所示。

其中用到了 HmacSHA256 加密和 Base64 加密,传递进去的参数如上图所示。

接下来就可以在 Python 中重现这段逻辑了,其中 secret key 是一个固定值, message 先使用上述图片中的值即可。

import hmac
import hashlib

def hmac_sha256(message, secret):
    return hmac.new(secret.encode(), message.encode(), hashlib.sha256).hexdigest()

message = "GET\\napplication/json, text/plain, */*\\n\\n\\n\\nx-ca-key:203899271\\nx-ca-nonce:bacf321a-36cb-47e6-8094-c32029747953\\n/community-cloud/v1/new/home/recent?pageNum=6&type=4"
secret = "bK9jk5dBEtjauy6gXL7vZCPJ1fOy076H"

print(hmac_sha256(message, secret))

在这个代码中, messagesecret 分别代表要加密的信息和密钥。算法使用 hmac.new() 函数,通过编码后的 secretmessage 以及 hashlib.sha256 来生成 HMAC 值。最后使用 hexdigest() 方法将 HMAC 值转换为十六进制字符串。

在原文JS中最后转换的是 Base64 格式数据,所以进行最后一步转换。

import uuid
import hmac
import hashlib
import base64

def hmac_sha256(message, secret):
    hmac_sha256 = hmac.new(secret.encode(), message.encode(), hashlib.sha256)
    return base64.b64encode(hmac_sha256.digest()).decode()

if __name__ == '__main__':
    # ger_html()
    message = "GET\\napplication/json, text/plain, */*\\n\\n\\n\\nx-ca-key:203899271\\nx-ca-nonce:bacf321a-36cb-47e6-8094-c32029747953\\n/community-cloud/v1/new/home/recent?pageNum=6&type=4"
    secret = "bK9jk5dBEtjauy6gXL7vZCPJ1fOy076H"

    print(hmac_sha256(message, secret))

运行程序,得到Python 的计算结果。

在回到网页端查看原JS的计算结果。

二者一致,表示该加密参数已经被我们翻译掉

在把参数的拼接实现一下。

def get_params(pageNum, type,nonce):
    message = f"GET\\napplication/json, text/plain, */*\\n\\n\\n\\nx-ca-key:203899271\\nx-ca-nonce:nonce\\n/community-cloud/v1/new/home/recent?pageNum=pageNum&type=type"
    return message

完成所有配置之后,再次请求得到 200 状态码,完成任务。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 852 篇原创博客

全网 6000+人正在学习的 爬虫专栏 👇👇👇👇

以上是关于精选博客反爬过程中 x-ca-noncex-ca-signature 参数的解密过程的主要内容,如果未能解决你的问题,请参考以下文章

签名验证反爬,反反爬第二篇博客,Python爬虫120例

14. UserAgent 反爬是如何实现的,来看看这篇博客 &

14. UserAgent 反爬是如何实现的,来看看这篇博客 &

Python反爬,JS反爬串讲,从MAOX眼X开始,本文优先解决反爬参数 signKey

爬虫过程和反爬

JS逆向字体反爬,某供应商平台反爬实践