讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Python爬虫中模拟App的Header签名算法_使用PyCryptodome库重现加密逻辑

浅静君_3207

浅静君_3207

发布时间:2026-05-28 17:26:07

|

757人浏览过

|

来源于php中文网

原创

App端Header签名失效是因为其为基于时间戳、随机数、请求体、密钥等动态参数实时计算的HMAC-SHA256或AES-CBC结果,并非固定字符串;硬编码抓包值必然失败,需通过Frida Hook还原真实key/data/iv输入并用PyCryptodome精准复现拼接与加解密逻辑。

如何在python爬虫中模拟app的header签名算法_使用pycryptodome库重现加密逻辑

为什么直接复制App的Header签名会失效

App端签名通常不是固定字符串,而是基于时间戳、随机数、请求体、密钥等动态参数实时计算的HMAC-SHA256或AES-CBC结果。抓包看到的X-Sign或Signature字段每次都不一样,硬编码必然失败。

关键点在于:签名逻辑往往藏在so库或混淆后的Java/Kotlin代码里,但多数情况下,核心加密流程仍依赖标准算法——PyCryptodome能覆盖绝大多数场景,前提是还原出正确的输入拼接方式和密钥处理逻辑。

  • 常见错误现象:Signature verification failed 或 401 Unauthorized,即使时间戳、nonce、body都对得上
  • 根本原因:密钥被二次处理(如base64解码后再取前16字节)、原始数据未按约定排序/拼接/编码(比如要求UTF-8 bytes但用了str)、缺少预置IV或padding方式不匹配
  • 调试建议:用Frida Hook住签名函数,打印出实际传入的key、data、iv三元组,这是最可靠的输入依据

用PyCryptodome实现HMAC-SHA256签名(最常见类型)

多数App用HMAC-SHA256生成签名,密钥通常是硬编码在APK里的字符串,但可能经过base64.b64decode()或bytes.fromhex()转换。

注意:HMAC不要求IV,但必须严格对齐密钥长度(SHA256推荐32字节密钥)。若原始密钥不足32字节,有些App会用PKCS#7 padding补足,更多情况是直接截断或重复填充——需逆向确认。

立即学习“Python免费学习笔记(深入)”;

Claw Code Suite (Python-Only Edition)
Claw Code Suite (Python-Only Edition)

仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...

下载
from hashlib import sha256
from hmac import HMAC
<h1>假设逆向得到原始密钥为 base64 字符串,且需解码</h1><p>raw_key = "dGhpcyBpcyBhIHNlY3JldA=="
key = base64.b64decode(raw_key)</p><h1>拼接规则示例:method + \n + path + \n + timestamp + \n + nonce + \n + body_md5</h1><p>message = f"POST\n/api/v1/user\n1717023456\nabc123\n{md5(body.encode()).hexdigest()}".encode()</p><p>signature = HMAC(key, message, sha256).hexdigest()
headers["X-Sign"] = signature
  • 务必检查App是否对body做了MD5(或SHA1)哈希后再参与拼接;有些只取body非空时的原始bytes
  • 时间戳单位要一致(秒 or 毫秒),且服务端常有5分钟容错窗口,本地时间偏差过大会直接拒签
  • Python 3.9+ 的HMAC默认接受bytes,传str会报TypeError: key: expected bytes or bytearray, but got 'str'

AES-CBC签名(带IV的加密型签名)

少数App把拼接后的字符串用AES-CBC加密再hex,作为签名。此时必须还原出IV——它可能是固定值(如b"0102030405060708"),也可能是从请求头或响应中动态提取的字段(如X-Nonce前8字节)。

PyCryptodome要求明文长度是16字节整数倍,PKCS#7是最常用padding方式。别用pad(data, 16)这种模糊写法,必须显式调用PKCS7模块或手写补位逻辑。

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
<p>key = b"your-32-byte-key-here-123456789012"
iv = b"0102030405060708"  # 必须16字节
data = "timestamp=1717023456&nonce=abc123&body={}".format(body).encode()</p><p>cipher = AES.new(key, AES.MODE_CBC, iv)
encrypted = cipher.encrypt(pad(data, AES.block_size))
signature = encrypted.hex()
headers["X-Sign"] = signature
  • 如果服务端返回Invalid IV或解密乱码,优先怀疑IV来源不对;可用Wireshark对比真实App请求中的X-IV或类似字段
  • 某些App会把AES输出再做一次base64或反转字节序(encrypted[::-1]),这类变形必须靠Hook日志确认
  • PyCryptodome安装命令是pip install pycryptodome,不是pycrypto(已废弃且不兼容)

签名验证失败时的快速定位路径

当签名始终不通过,不要反复改密钥长度或算法——先确认输入是否完全一致。真实App签名函数的输入,永远比你从代码里猜出来的更“脏”。

  • 用Frida Hook javax.crypto.Mac.getInstance("HmacSHA256") 或 javax.crypto.Cipher.getInstance("AES/CBC/PKCS7Padding"),打印doFinal()前的input和key
  • 对比Python与App端的message十六进制dump(message.hex()),一个换行符、一个空格、一个URL编码差异都会导致签名不同
  • 服务端有时会校验User-Agent或X-App-Version,这些虽不参与签名,但缺失会导致整个请求被拦截,误判为签名错误

逆向签名逻辑最难的从来不是算法本身,而是搞清那几行不起眼的字符串拼接和编码转换——它们藏在层层嵌套的工具类里,且没有日志输出。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1751

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4544

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1729

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

26757

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3247

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3247

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1183

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

20

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn