Python/爬虫学习记录-Day06

1. 汽车之家登录(基础MD5加密)

目标网址:https://account.autohome.com.cn/login

1.1 抓包定位加密参数:

  • 打开开发者工具 → Network → 勾选Preserve log

  • 输入账号密码验证后点击登录,找到login请求数据包ValidIndexsm → 查看Form Data中的pwd参数(32位加密字符串)

1.2 定位加密函数:

  • 在Sources面板按Ctrl+Shift+F全局搜索pwd

    • 在common.js中发现关键代码:

pwd: hex_md5(PassWord.value) // 定位到MD5加密函数

1.3 控制台验证加密逻辑

// 在Console直接调用函数验证
hex_md5("123456") 
// 输出: "d41d8cd98f00b204e9800998ecf8427e" 与抓包值一致

通过这个部分可以找到整段实现加密的函数,将其复制到js文件中,读取并编译js代码,再通过call(js里面调用函数名字,传递的参数)调用加密函数实现加密逻辑,但是在Python中提供更为简便的方法即Python复现。

1.4 Python复现

import hashlib
import requests

def encrypt_pwd(password):
    return hashlib.md5(password.encode('utf-8')).hexdigest()

# 构造登录请求
login_url = "https://account.autohome.com.cn/api/login"
payload = {
    "user": "your_username",
    "pwd": encrypt_pwd("your_password"),  # 关键加密步骤
    "format": "json"
}
response = requests.post(login_url, data=payload)
print(response.json())  # 查看登录结果

避坑提示:若遇到__RequestVerificationToken参数,需先访问登录页用正则提取:

token = re.search(r'name="__RequestVerificationToken".*?value="(.*?)"', response.text).group(1)

 2 某公共资源交易中心(动态Cookie生成)

目标网址:http://ggzy.hunan.gov.cn(以湖南省为例)

2.1 首次请求异常处理:

  • 直接访问返回412状态码 + 混淆JS文件(文件名如5c3a8d.js)

  • 响应头包含Set-Cookie: __jsluid_s=xxx(需携带后续请求)

2.2 解密混淆JS:

// 典型混淆代码结构
var _0x5c3a = ['\x41\x45\x53', '\x65\x6e\x63\x72\x79\x70\x74'];
function _0x31d2(_0x5c3a8d, _0x31d2f8) {
    return _0x5c3a[_0x31d2f8];
}
// 关键函数:生成cookie的fp参数
function generateFP() {
    return AES_encrypt(Date.now(), _0x31d2(0, 1)); 
}

2.3 定位核心参数:

在混淆JS中搜索document.cookie,发现生成逻辑:

document.cookie = `fp=${btoa(generateFP())}; path=/`

2.4 Python复现AES加密

from Crypto.Cipher import AES
import base64
import time

def generate_fp():
    timestamp = str(int(time.time() * 1000))
    key = b"secretkey1234567"  # 通过调试确认的固定密钥
    cipher = AES.new(key, AES.MODE_ECB)
    # 填充16位对齐
    data = timestamp + (16 - len(timestamp) % 16) * '\0'
    encrypted = cipher.encrypt(data.encode())
    return base64.b64encode(encrypted).decode()

# 使用示例
cookies = {
    "__jsluid_s": "从首次响应获取",
    "fp": generate_fp()  # 动态生成
}
response = requests.get("http://ggzy.hunan.gov.cn/trade", cookies=cookies)

调试技巧:在混淆JS中下断点后,在Console执行generateFP()可直接获取输出值用于验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值