当前位置: 首页 > news >正文

请求签名算法破解:从Chrome DevTools到Python还原的完整流程

前言

在网络爬虫、接口逆向、自动化接口调用场景中,绝大多数网站都会对请求参数、请求体、Header进行加密签名校验,直接明文发包会直接返回签名错误、权限不足、拒绝访问等结果。想要稳定调用目标接口,核心就是逆向破解接口签名算法

本文从零起步,完整讲解从浏览器抓包定位签名字段、调试 JS 加密逻辑、梳理签名生成规则,最终用 Python1:1 还原签名算法、实现无加密正常发包的全流程,全程实战无废话,适合逆向新手快速上手。

一、前期准备工作

1. 必备工具

  1. Chrome 浏览器(自带开发者工具,逆向首选)
  2. 抓包辅助:Fiddler/Charles(可选,多层协议抓包)
  3. JS 调试工具:Chrome Sources 断点调试
  4. 运行环境:Python3.x、requests 库、pycryptodome 加密库

2. 核心认知

常见接口签名字段:signsignaturetokenappkeytimestampnoncesig签名加密方式:MD5、SHA1、SHA256、HMAC、AES、RSA、拼接加盐、时间戳混排等签名组成要素:固定密钥、时间戳、随机数、请求参数、请求地址、请求方式、用户令牌

二、Chrome DevTools 抓包定位签名位置

1. 开启网络抓包

  1. 打开目标网页,按下F12调出开发者工具,切换至 **Network(网络)** 面板
  2. 勾选Preserve log(保留日志),防止页面刷新清空请求记录
  3. 勾选Disable cache禁用缓存,确保抓取真实实时请求
  4. 手动触发网页接口请求(点击按钮、下拉刷新、提交表单)

2. 筛选目标接口

  1. 在请求列表筛选XHR/Fetch类型接口,网页异步请求几乎都在此类
  2. 找到业务核心请求,依次查看:
    • Headers:请求头内是否携带signsignature加密字段
    • Payload/FormData:请求体、URL 参数内是否存在签名字段
    • Response:确认返回加密规则提示、密钥、盐值线索

3. 确定动态生成的签名字段

重点区分固定值字段动态签名字段

  • 刷新页面多次请求,数值不变 = 固定参数
  • 每次请求数值都变化 = 动态生成签名,即为本次逆向核心目标

三、定位签名生成 JS 源码

1. 调用栈快速溯源

  1. 选中目标请求 → 右键Copy -> Copy as fetch,拿到浏览器原生请求代码
  2. 在 Network 面板点击请求右侧Initiator(调用堆栈)
  3. 堆栈从上至下追溯,找到发起请求前处理参数、拼接加密的 JS 文件与行号

2. 全局搜索签名关键字

  1. 切换至Sources源码面板
  2. 使用全局搜索快捷键Ctrl+Shift+F
  3. 搜索关键字:sign=signaturemd5(sha256getSigncreateSig
  4. 精准定位签名生成函数,过滤混淆 JS、压缩 JS 代码

3. 格式化混淆 JS 代码

网页前端 JS 大多经过压缩混淆,单行无换行无法阅读:

  1. 选中混淆 JS 代码,右键Format code自动格式化
  2. 去除无用变量、混淆死代码,梳理清晰函数执行逻辑

四、断点调试,还原签名生成逻辑

1. 精准下断点

  1. 找到签名生成函数内部核心代码行,点击行号添加蓝色断点
  2. 重新触发接口请求,程序自动卡在断点位置
  3. 进入单步调试:F10逐行执行、F11进入子函数

2. 逐行拆解签名规则

调试过程重点记录 5 大核心要素:

  1. 参与加密的参数:哪些 URL 参数、请求体参数参与拼接
  2. 参数排序规则:升序 / 降序、是否剔除空值、是否剔除固定字段
  3. 拼接格式:参数名 = 值 & 拼接、直接拼接、指定分隔符拼接
  4. 加盐规则:前缀加盐、后缀加盐、中间插入密钥、时间戳加盐
  5. 加密算法:MD5、SHA 系列、HMAC、大小写转换、URL 编码

3. 提取固定密钥与盐值

调试中直接打印全局变量、常量值,提取:

  • 固定秘钥 key
  • 固定盐值 salt
  • 固定 appid、appsecret
  • 时间戳单位(秒 / 毫秒)
  • 随机数生成规则

4. 控制台实时校验

调试过程可在 Console 控制台手动调用签名函数:

js

// 直接执行前端原生签名函数,传入参数验证结果 getSign(参数1,参数2,时间戳)

快速核对签名结果,确认逻辑无偏差。

五、剔除前端环境差异,规避逆向坑点

  1. 时间戳偏差:前端用毫秒级时间戳,Python 默认秒级,统一时间单位
  2. 字符编码差异:前端 UTF-8、URL 编码、特殊字符转义严格对齐
  3. 参数空值处理:前端自动过滤空参数,Python 拼接时同步过滤
  4. 大小写统一:加密后大写 / 小写结果必须完全一致
  5. 随机数规则:前端自定义随机数范围、长度,Python 复刻同款随机规则
  6. JS 内置函数差异:JS 的 toString、parseInt、字符串截取逻辑,Python 严格等价实现

六、Python 复刻签名算法完整实战

1. 安装依赖库

bash

运行

pip install requests pycryptodome

2. 通用签名复刻模板(MD5 加盐经典案例)

前端 JS 简化签名逻辑

js

// 前端签名规则 function getSign(params){ let key = "123456abcdef"; //固定盐值 let timestamp = Date.now();//毫秒时间戳 //参数按键名升序排序 let sortArr = Object.keys(params).sort(); let str = ''; for(let k of sortArr){ str += k + params[k]; } //拼接盐值+时间戳 let signStr = str + key + timestamp; //MD5加密转小写 return md5(signStr).toLowerCase(); }

Python1:1 完整还原代码

python

运行

import time import hashlib import requests # 固定盐值 SALT_KEY = "123456abcdef" def get_request_sign(params: dict) -> tuple[str, int]: # 1. 生成毫秒级时间戳 timestamp = int(time.time() * 1000) # 2. 参数按键名升序排序 sorted_items = sorted(params.items(), key=lambda x: x[0]) # 3. 拼接参数字符串 sign_str = "".join([f"{k}{v}" for k, v in sorted_items]) # 4. 拼接盐值+时间戳 sign_str += SALT_KEY + str(timestamp) # 5. MD5加密转小写 md5_obj = hashlib.md5(sign_str.encode("utf-8")) sign = md5_obj.hexdigest().lower() return sign, timestamp # 测试调用 if __name__ == "__main__": # 请求业务参数 req_params = { "page": 1, "size": 10, "uid": "10086" } # 生成签名与时间戳 sign, ts = get_request_sign(req_params) # 拼接完整请求参数 req_params["sign"] = sign req_params["timestamp"] = ts # 发起带签名正式请求 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } url = "目标接口地址" res = requests.get(url, params=req_params, headers=headers) print("接口返回数据:", res.json())

3. 其他常见加密快速适配

  1. SHA256 签名:将hashlib.md5改为hashlib.sha256即可
  2. HMAC 加密签名:使用hmac库复刻前端 HMAC-SHA256
  3. AES 对称加密:使用pycryptodome对齐前端 ECB/CBC 模式、偏移量、填充规则
  4. RSA 非对称签名:提取前端公钥,Python 实现 RSA 加密签名

七、逆向调试排错核心技巧

  1. 签名不一致优先核对拼接顺序:90% 签名错误都是参数排序错乱
  2. 逐字符比对加密原文:打印前端加密原文与 Python 加密原文,一字对比
  3. 关闭前端随机值干扰:调试阶段固定时间戳、随机数,排除动态变量影响
  4. 区分 GET/POST 签名差异:GET 取 URL 参数签名,POST 取 Body 表单参数签名
  5. Header 全局签名:部分网站对整个请求头统一加密,需整体复刻

八、进阶防护与长期稳定方案

  1. 密钥隐藏逆向:JS 密钥被拆分、多层嵌套,逐层解密提取真实密钥
  2. 动态密钥逆向:密钥随接口返回更新,提前抓取密钥接口自动更新
  3. JS 混淆加固突破:对付 AST 混淆、虚拟机 JS,采用替换原生函数、剥离混淆逻辑
  4. 无痕请求模拟:复刻完整 UA、Cookie、设备信息,避免风控拦截
  5. 定时同步时间戳:本地时间偏差过大导致签名失效,同步网络标准时间

九、总结

接口签名逆向破解整体流程可浓缩为:浏览器 F12 抓包定位签名字段 → 调用栈溯源 JS 加密函数 → 断点调试拆解拼接 + 加盐 + 加密规则 → 提取密钥与规则 → Python 等价逻辑复刻 → 校验签名一致完成接口调用

掌握这套流程,市面上绝大多数中小型网站、APP 网页端接口签名都可快速破解还原,实现稳定自动化接口请求、数据采集、业务自动化开发。

温馨提示:本文技术仅用于合法学习、个人技术研究与企业内部合规业务开发,请勿用于恶意爬虫、非法数据抓取、违规入侵等违法行为,遵守网络安全相关法律法规。

http://www.jsqmd.com/news/842899/

相关文章:

  • STM32H7网络延迟问题分析与解决方案
  • 【亲测免费】 ShellNew Settings 右键菜单管理工具
  • 频谱估计与无限采样框架的技术突破与应用
  • 【免费下载】【mysql】Connector/J 8.0.31 - Java数据库连接驱动
  • STM32---蓝牙模块ECB02(主机模式_多从机连接与切换策略)
  • 给科服的Linux课程
  • 一天一个昇腾 Agent-Skills 小技巧:让昇腾专家经验变成 Agent 能力,Agent-Skills 仓来了
  • 网站建设公司推荐:业内公认高水准网站制作公司一览
  • 告别传统MPLS!手把手教你用SRv6 TE Policy搭建EVPN L3VPN(附华为设备配置详解)
  • 2026年05月烘干房服务优选指南:国内口碑企业大盘点,猪舍喷雾消毒/物资烘干房/生猪调运消毒,烘干房服务公司推荐 - 品牌推荐师
  • 2026年比较好的三相电机/台州交流电机/台州高效节能电机/永磁电机厂家对比推荐 - 品牌宣传支持者
  • 2026年4月膜企业推荐,热熔胶膜/复合材料薄膜/膜/薄膜/箱包膜/桌面透明膜/手机膜/医用材料膜,膜生产厂家哪家靠谱 - 品牌推荐师
  • 2026年5款论文降AI工具实测:如何用降AI率工具科学降低AI指标(附对比表) - 降AI实验室
  • 3DMAX建模效率革命:QuickBoolean插件核心功能深度解析与实战指南
  • 5个实用Workflow示例:从订单处理到内容审核的完整指南
  • VisionPro脚本中集成Halcon深度学习模型的实战配置与图像格式转换
  • Windows安卓驱动终极解决方案:一键安装最新ADB和Fastboot工具
  • 2026年知名的海康大华安防设备回收/双鸭山大华安防设备回收/双鸭山安防设备回收/安防设备回收可靠服务公司 - 品牌宣传支持者
  • 【免费下载】 掌握MagicDraw,从这份中文培训教程开始!
  • Watchify核心原理深度解析:理解文件监视与增量构建机制
  • 如何阅读《超喜欢的趣味数学书 有趣的数学园地》,这本书适合多大的小朋友看
  • 2026年质量好的用于冰箱内胆成型石英加热器/江苏石英加热器涂布设备/用于真空环境石英加热器/石英加热器加热软化碳纤维设备稳定供货厂家推荐 - 品牌宣传支持者
  • 【免费下载】 探索GD32F303的无线升级之旅:基于YMODEM协议的固件升级解决方案
  • 2026年4月市场可信赖的二手钢结构厂房拆除施工性价比高的,规范施工拆除厂房钢结构无损回收材料 - 品牌推荐师
  • 2026年比较好的台州非标打磨机/打磨毛刺机厂家精选合集 - 行业平台推荐
  • LinuxDo Scripts多浏览器兼容指南:Chrome、Firefox、Edge全搞定
  • Linux实战:部署MinIO对象存储服务与Systemd开机自启配置详解
  • 2026年知名的台州全自动打磨机/打磨毛刺机/抛光打磨一体机精选推荐公司 - 品牌宣传支持者
  • 2026年比较好的安防设备回收/大华安防设备回收年度精选公司 - 行业平台推荐
  • 2026年4月沃伦勒夫 Warrenslove手环推荐,沃伦勒夫 Warrenslove生物信息芯片手环口碑怎么样 - 品牌推荐师