氪金兽爬虫(上架账号监控),nonce、sign参数逆向

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

氪金兽 爬虫(新上架账号监控)


前言

本次介绍一下氪金兽平台的sign加密逆向思路,以此完成对上架账号的查询,实现新账号的监控
本次爬虫文章仅供学习和参考目的,不得用于任何商业活动或非法行为。爬取网站数据可能涉及到法律和道德问题,请在合法和合理的范围内使用。在使用爬虫程序时,请务必遵守相关法律法规,尊重网站的使用规则和隐私政策。

文章中的数据、信息和观点仅代表作者个人观点,不代表本平台的立场。作者对文章中的内容的准确性和完整性不承担任何责任。读者在使用文章中提供的任何信息时应自行判断和承担相应风险。

对于由于个人使用文章中提供的信息和工具所带来的任何直接或间接损失,包括但不限于因软件故障、网络中断、数据损失等,本平台和作者概不负责。

如您对本文或文章中的信息有任何疑问或异议,请及时与我联系,我将根据实际情况进行调整或删除。


逆向地址:aHR0cHM6Ly93d3cua2VqaW5zaG91LmNvbS9tL21haW4vaG9tZS80Ny80

一、逆向步骤

这是商品的查询页面,这里很明显这个lists的接口就是商品的查询接口了
在这里插入图片描述

先看一下请求的参数
在这里插入图片描述
大概看一下可以分析出来,有可能的加密逻辑为:根据timestamp和随机字符串生成nonce,再对整个参数体进行摘要,得到sign,这个sign的长度很明显可以看出不是通用的md5算法,接下来就是需要定位一下加密位置

在这里插入图片描述
首先出场的肯定是搜索大法了,
大部分情况下使用sign进行搜索都是不明智的行为,因为这个词的出现频率太高了,一般来说都是会得到一大堆的结果,结合上文猜测的加密逻辑,这里直接对nonce进行搜索,很幸运,只有两个结果,而且这两处都带有sign,所以十分的可疑,这里直接对这两处都下个断点试试

在这里插入图片描述下了断点之后下拉一下商品以触发新请求的加载,这里一下就断住了,大概看一下逻辑。很明显nonce的结果就是由这个 wu(u) 生成,而后再由 bu(c, s || “”, o, Cn) 生成sign,先看一下wu的逻辑

在这里插入图片描述很简单的一个逻辑,依次跟一下 fs、fe、nf几个算法就可以完成nonce的生成。
然后继续看一下sign,由上可知sign的加密需要c, s || “”, o, Cn四个参数的参与,这里在控制台打印一下看一下各个参数的结果
在这里插入图片描述

可以看的出来,c是请求体,其中带有nonce,o和Cn代表不同的平台和版本号,那么接下来看一下bu的逻辑
在这里插入图片描述整体的代码量并不多,大致抓一下重点,返回值由a取不同的位置加上变量c和u拼接而成,a由s,n,r拼接加密取md5,c,u由a参加计算而成,这里的逻辑比较简单,所以直接用python写一下算法就行了,就不nodejs来执行js了。,这样打包出来的程序就不用依赖与node了。

到这里就所有的逆向就完成了,接下来就是请求接口而后根据实际的需求对上架的账号进行监控了

欢迎 私信技术交流 v: remake2456

<think>好的,我现在需要解决用户的问题:如何在Python爬虫中对请求参数进行加密。用户提到了之前的回答相关引用,我需要结合这些信息来给出详细的步骤方法。 首先,回顾用户之前的对话,用户已经了解了如何添加GETPOST请求的参数,现在关注的是参数加密。根据提供的引用内容,加密通常涉及到逆向分析JavaScript代码,然后用Python模拟加密逻辑。引用1提到使用hashlib来模拟MD5加密,引用23讨论了逆向JSPython重写加密函数,引用4提到了时间戳、参数排序Base64加密的例子。 用户的需求可能包括常见的加密方法,如哈希、Base64、AES等,以及如何处理动态参数如时间戳随机数。此外,用户可能还想了解如何逆向JS找到加密逻辑,这是实际爬虫中常遇到的难点。 接下来,我需要组织回答的结构。首先概述加密的必要性,然后分步骤介绍常见加密方法,包括哈希、Base64、对称加密(如AES)、非对称加密(如RSA)。然后详细说明如何逆向分析JavaScript,包括使用浏览器开发者工具定位加密函数,调试并理解逻辑,最后用Python实现。可能需要结合引用中的例子,如MD5模拟、Base64处理,以及动态参数生成。 还要注意用户可能遇到的困难,比如复杂的JS混淆,这时可能需要工具如PyExecJS来执行JS代码,或者使用自动化工具如Selenium。同时,提醒用户注意法律道德规范,避免侵犯隐私或触犯法律。 最后,生成相关问题,帮助用户进一步学习,比如处理JS混淆、解决动态密钥、提升逆向效率等。 需要确保回答清晰,步骤明确,代码示例正确,并正确引用之前的资料,比如引用1的MD5示例,引用4的Base64时间戳处理。同时,保持语言口语化,避免使用专业术语过多,但必要时解释清楚。</think>在Python爬虫中处理请求参数加密,需要通过逆向分析目标网站的加密逻辑,并采用Python代码模拟实现。以下是具体实现方法步骤: --- ### 一、常见加密类型及Python实现 #### 1. 哈希算法(如MD5/SHA) 用于参数签名验证,通过不可逆加密生成唯一标识 ```python import hashlib def md5_encrypt(text): md5 = hashlib.md5() md5.update(text.encode('utf-8')) return md5.hexdigest() # 示例:加密时间戳 timestamp = str(int(time.time()*1000)) sign = md5_encrypt(f"key={timestamp}&salt=abc123") ``` [^1] #### 2. Base64编码 常用于简单数据混淆处理 ```python import base64 # 参数编码 param = "page=2&size=20".encode('utf-8') encoded = base64.b64encode(param).decode() # 解码验证 decoded = base64.b64decode(encoded).decode() ``` [^4] #### 3. 对称加密(AES/DES) 需要获取密钥进行加解密 ```python from Crypto.Cipher import AES import binascii def aes_encrypt(data, key, iv): cipher = AES.new(key.encode(), AES.MODE_CBC, iv.encode()) padded = data + (16 - len(data) % 16) * chr(16 - len(data) % 16) encrypted = cipher.encrypt(padded.encode()) return binascii.b2a_hex(encrypted).decode() # 示例使用 encrypted = aes_encrypt('page=1', '1234567890123456', '1234567890123456') ``` #### 4. 非对称加密(RSA) 处理需要公钥加密的场景 ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 def rsa_encrypt(data, public_key): rsa_key = RSA.importKey(public_key) cipher = PKCS1_v1_5.new(rsa_key) return base64.b64encode(cipher.encrypt(data.encode())).decode() ``` --- ### 二、逆向分析JS加密流程 #### 步骤1:定位加密入口 1. 使用Chrome开发者工具(F12) 2. 在Network面板捕获加密请求 3. 通过XHR断点或搜索加密参数定位JS文件 #### 步骤2:调试加密逻辑 ```javascript // 典型加密函数结构 function encryptParams(params) { let timestamp = Date.now(); let sorted = Object.keys(params).sort().map(k => `${k}=${params[k]}`).join('&'); return md5(sorted + salt_key); } ``` #### 步骤3:Python复现逻辑 ```python import time def generate_params(page): params = { "page": page, "ts": int(time.time()*1000), "nonce": random.randint(1000,9999) } sorted_str = '&'.join([f"{k}={v}" for k,v in sorted(params.items())]) params['sign'] = hashlib.sha256(f"{sorted_str}appSecret").hexdigest() return params ``` [^4] --- ### 三、实战案例解析 以某电商网站搜索接口为例: 1. 原始请求参数: ```python {"keyword": "手机", "page": 1} ``` 2. 加密后参数: ```python { "payload": "eyJraWQiOiIxMjM0NSIsImVuY3J5cHRlZERhdGEiOiJNek...", "x-sign": "a1b2c3d4e5f6" } ``` 3. Python复现流程: ```python def encrypt_payload(params): # 步骤1:添加时间戳 params['timestamp'] = int(time.time()*1000) # 步骤2:参数排序并序列化 sorted_params = json.dumps(params, sort_keys=True) # 步骤3:AES加密 encrypted = aes_encrypt(sorted_params, AES_KEY, AES_IV) # 步骤4:生成签名 sign = md5_encrypt(encrypted + SIGN_SALT) return {"payload": encrypted, "x-sign": sign} ``` --- ### 四、特殊场景处理 1. **动态密钥**:通过首次请求获取加密密钥 2. **环境检测**:使用`execjs`库直接执行JS代码 ```python import execjs with open('encrypt.js') as f: js_code = f.read() ctx = execjs.compile(js_code) encrypted = ctx.call('encrypt', 'raw_data') ``` 3. **反调试绕过**:使用无头浏览器获取加密结果 ```python from selenium.webdriver import ChromeOptions options = ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome(options=options) driver.get(url) encrypted = driver.execute_script('return window.encrypt(param);') ``` --- ### 五、注意事项 1. 优先使用网站的公开API接口 2. 遵守robots.txt协议 3. 控制请求频率避免被封禁 4. 加密逻辑变更时需要及时更新代码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值