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

某医保服务平台X-Tingyun、x-tif-signature、x-tif-nonce及encData、signData参数逆向实战

文章目录

    • 声明
    • 一、为什么这篇文章值得写
    • 二、目标与交付标准
    • 三、起手式:先看样本,再做第一轮分层
      • 1. 业务加密类型几乎是明牌
      • 2. `x-tif-signature` 看起来不是 SM2
      • 3. `X-Tingyun` 更像监控头,而不是业务头
    • 四、为什么这次先走静态,不先走动态
    • 五、资源定位:先找到该下哪几个文件
      • 1. 主入口脚本存在
      • 2. 页面级 chunk 单独存在
      • 3. 监控脚本单独下发
    • 六、第一轮搜索:不要一开始就搜算法,先搜接口名
      • 结果一:接口定义落到了统一请求实例
      • 结果二:请求、响应都经过统一拦截器
    • 七、加密模块定位:命中 Webpack 模块 `7d92`
    • 八、先拆外围链路:`x-tif-*` 比想象中更简单
    • 九、`X-Tingyun`:先别把它当业务签名
    • 十、`encData` 不是“直接拿 appSecret 当 SM4 key”
      • 真实 key 还有一层派生
      • 明文也不是普通 JSON 字符串
      • 最终 `encData` 的生成链
    • 十一、`signData`:真正的难点不在 SM2,而在签名前字符串
      • 这次的签名前序列化规则
      • 一个抽象化后的签名串示例
      • 为什么这一步一定要从源码读,而不是盲猜
    • 十二、响应解密:请求通了不算完,响应还得拿回来
    • 十三、响应 `signData` 验签
    • 十四、为什么最后能脱离浏览器
      • 1. 密钥材料就在 bundle 里
      • 2. 加密入口是纯 JS 逻辑
      • 3. 外围头没有强环境绑定
    • 十五、工程化落地:我最后做了三套版本
      • 1. Node.js 版
      • 2. 纯 Python 版
      • 3. `gmssl + requests` 版

声明

本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除!


一、为什么这篇文章值得写

很多人做 Web 逆向时,一上来就会掉进两个坑:

  1. 只盯着抓包结果,试图靠猜测把参数拼出来
  2. 一看到浏览器调试不顺,就以为这题做不下去了

这次目标站点给了我一个很典型、也很有代表性的案例:

  • 页面是公开查询页
  • 请求参数里有业务加密
  • 请求头里还有网关头和埋点头
  • 响应也做了加密封装
  • 前端是标准的 Webpack 打包站点,不是完全黑盒

这类站如果方法对,效率其实很高。
真正难的往往不是算法本身,而是你能不能在前 30 分钟内把问题拆对。

所以这篇文章想讲清楚的不是“最后代码是什么”,而是下面这几个更重要的问题:

  • 我是怎么判断应该先看什么、后看什么的
  • 哪些参数属于业务加密,哪些只是外围噪音
  • 如何从一堆 bundle 里快速缩小范围
  • 为什么最后能脱离浏览器复现
  • 哪些点已经闭环,哪些点仍然没有完全闭环

二、目标与交付标准

本次分析目标页面:

  • 主页
    aHR0c
http://www.jsqmd.com/news/692875/

相关文章:

  • 终极指南:3分钟掌握KH Coder开源文本挖掘工具
  • PX4与ROS2联调实战:用VSCode在Gazebo中跑通第一个无人机控制节点
  • 3分钟搭建专业缠论分析系统:基于TradingView本地SDK的终极量化可视化方案
  • 3种方法在Windows电脑上高效安装安卓应用:APK安装器全攻略
  • C++26 Contracts实战入门:从编译失败到生产就绪的7个关键检查清单
  • 为你的索尼相机重新定义可能性:OpenMemories-Tweak 功能定制指南
  • Python智能体建模终极指南:5步快速掌握Mesa框架
  • 告别手册恐惧症:手把手教你用STM32CubeMX驱动W25Q16 Flash(附完整代码)
  • 国际象棋AI开发:从走法生成到Alpha-Beta剪枝
  • 2026 港口码头监管低空平台推荐,冰柏科技助力集装箱码头智能管控 - 品牌2026
  • 从嵌入式到IC设计:用Verilog手把手教你实现一个可配置的UART收发器(含Testbench)
  • 从Heartbleed到2026年新爆Zero-Day:C语言内存安全演进时间轴(含17个关键节点技术决策树与迁移路线图)
  • VSCode日志可视化革命(Log Viewer Pro深度解析):支持结构化JSON、正则高亮与时间轴联动的行业新标准
  • React与Alan AI构建智能语音待办事项应用
  • 闲置沃尔玛电子卡别浪费!2026回收新思路实测,两大实用方法对决更省心 - 京回收小程序
  • 手把手教你用STM32F103实现UDS Bootloader:从内存分配到CAN刷写全流程(附避坑指南)
  • LeRobot:5步构建端到端机器人AI系统的完整实战指南
  • 涂层锅 vs 无涂层锅:PTFE、陶瓷、窒化、珐琅四种路线选型与防坑指南
  • 深入解析ICO文件结构:从掩码图到色彩打印的完整处理流程
  • WinSpy++终极指南:5个高效调试Windows窗口的专业技巧
  • 避坑指南:STM32外部中断控制LED时,你的按键消抖真的做对了吗?
  • 如何在Windows 11中恢复任务栏拖放功能:完整指南与最佳实践
  • 从无人机飞控到机械臂:手把手教你用C++实现RPY角与旋转矩阵互转(附Eigen库实战)
  • 2026压电驱动器行业发展现状与领军企业推荐 - 深度智识库
  • Spring AI MCP 实战:让大模型调用你的 Java 业务接口
  • 从鉴权需求出发:为什么我放弃了Tinyproxy 1.8.3,选择了1.11.1?版本选择与配置实战
  • DeepSeek-Coder-V2实战指南:打破闭源模型壁垒的5大应用场景
  • 从混乱数据到清晰洞察:手把手教你用pheatmap做单细胞转录组数据可视化(Seurat/R兼容)
  • 别再纠结用ComBat还是removeBatchEffect了!一篇讲透它们在单细胞和bulk RNA-seq中的选择策略
  • 一次性搞懂 OSPF 特殊区域:Stub/Totally Stub/NSSA/Totally NSSA