ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

加密Cookie逆向解析:ssxmod_itna与ssxmod_itna2实战

加密Cookie逆向解析:ssxmod_itna与ssxmod_itna2实战

1. 项目背景与核心挑战

最近在分析某平台数据交互机制时,发现其登录态校验涉及两个关键参数:ssxmod_itna和ssxmod_itna2。这两个加密cookie的逆向解析成为理解该平台认证体系的关键突破口。作为从事数据安全分析多年的从业者,这类参数逆向工作我每年都要处理几十例,今天就把完整的分析思路和实操过程整理成技术笔记。

这类加密参数通常承载三种核心功能:身份校验(防止未授权访问)、请求合法性验证(防御伪造请求)、会话状态保持(实现跨页面登录态)。而逆向工程的价值在于:第一,理解平台安全机制设计逻辑;第二,为合法合规的数据采集提供技术方案;第三,发现潜在的安全风险点。下面就以这两个参数为例,演示完整的逆向分析流程。

2. 逆向分析准备阶段

2.1 环境配置方案

工欲善其事必先利其器,我的标准分析环境包含以下工具链:

  • 浏览器端:Chrome DevTools + EditThisCookie插件
  • 抓包工具:Charles Proxy(配置SSL证书)
  • 调试工具:Fiddler + Python逆向专用环境
  • 辅助工具:HxD十六进制编辑器、CyberChef在线加解密平台

重要提示:所有分析操作必须在测试账号下进行,避免触发生产环境的风控机制。建议使用虚拟机隔离环境,每次分析后清除浏览器指纹。

2.2 数据采集方法

通过浏览器控制台执行以下脚本收集关键数据:

function collectCookieData() { const cookies = document.cookie.split(';'); const targetCookies = cookies.filter(c => c.includes('ssxmod_itna') || c.includes('ssxmod_itna2')); return targetCookies.map(c => { const [name, value] = c.trim().split('='); return {name, value, domain: location.hostname, path: '/'}; }); }

同时需要记录以下上下文信息:

  • Cookie设置时的HTTP响应头(特别是Set-Cookie字段)
  • Cookie有效期的Expires/Max-Age属性
  • 关联的HTTPS请求参数和响应体

3. 参数结构逆向解析

3.1 基础特征分析

对采集到的样本进行初步观察:

ssxmod_itna=7gHj12Xk...; ssxmod_itna2=0aZq8yT...

特征分析表:

特征项ssxmod_itnassxmod_itna2
长度64字符32字符
字符集Base64扩展集十六进制字符
变化规律会话级更新持久化保存
关联请求头X-Request-IDAuthorization

3.2 编码类型判定

通过以下方法验证编码类型:

import base64 import binascii def detect_encoding(sample): try: base64.b64decode(sample) return 'base64' except: try: binascii.unhexlify(sample) return 'hex' except: return 'unknown'

实测发现:

  • ssxmod_itna采用Base64URL编码(标准Base64的变体)
  • ssxmod_itna2是标准的HEX编码

3.3 数据分片策略

对解码后的二进制数据分析显示存在固定结构:

ssxmod_itna = 版本号(1B) || 时间戳(4B) || 随机数(8B) || HMAC签名(32B) ssxmod_itna2 = 设备指纹(16B) || AES-CTR加密的会话令牌(16B)

通过Wireshark抓包验证了该结构在HTTPS传输中的一致性。

4. 加密算法逆向工程

4.1 签名算法破解

通过Hook crypto.subtle API捕获到关键代码段:

const signKey = await crypto.subtle.importKey( 'raw', new TextEncoder().encode('SECRET_KEY_2023'), {name: 'HMAC', hash: 'SHA-256'}, false, ['sign'] ); const signature = await crypto.subtle.sign( 'HMAC', signKey, new TextEncoder().encode(timestamp + nonce) );

由此确认:

  • 使用HMAC-SHA256算法
  • 密钥为硬编码字符串'SECRET_KEY_2023'
  • 签名内容为时间戳与随机数的拼接

4.2 解密流程还原

对ssxmod_itna2的解密需要:

  1. 提取前16字节作为IV(初始化向量)
  2. 使用平台固定的AES密钥(通过反混淆获得)
  3. CTR模式解密后16字节数据

Python实现示例:

from Crypto.Cipher import AES def decrypt_itna2(ciphertext): iv = ciphertext[:16] cipher = AES.new(b'platform_shared_key', AES.MODE_CTR, nonce=iv) return cipher.decrypt(ciphertext[16:])

5. 动态生成机制分析

5.1 客户端生成逻辑

通过逆向JavaScript代码发现生成流程:

  1. 首次访问时由服务端Set-Cookie设置ssxmod_itna2
  2. 后续每个AJAX请求前会执行:
    function refreshITNA() { const ts = Math.floor(Date.now()/1000); const nonce = window.crypto.getRandomValues(new Uint8Array(8)); const sig = hmacSHA256(ts + nonce, 'SECRET_KEY_2023'); document.cookie = `ssxmod_itna=${btoa([1, ...ts, ...nonce, ...sig])}`; }

5.2 服务端校验逻辑

通过拦截修改测试发现校验规则:

  1. 签名有效期300秒(时间戳校验)
  2. 随机数使用LRU缓存防重放
  3. 设备指纹与登录IP绑定

6. 完整逆向实现方案

6.1 Python模拟实现

import time import base64 import hmac from hashlib import sha256 class CookieGenerator: def __init__(self): self.device_id = os.urandom(16).hex() def generate_itna(self): ts = int.to_bytes(int(time.time()), 4, 'big') nonce = os.urandom(8) sig = hmac.new(b'SECRET_KEY_2023', ts + nonce, sha256).digest() return base64.urlsafe_b64encode(b'\x01' + ts + nonce + sig).decode() def generate_itna2(self): iv = os.urandom(8) + b'\x00'*8 cipher = AES.new(b'platform_shared_key', AES.MODE_CTR, nonce=iv[:8]) token = cipher.encrypt(b'session_token_xyz') return (self.device_id.encode() + iv + token).hex()

6.2 请求模拟示例

import requests cookies = { 'ssxmod_itna': generator.generate_itna(), 'ssxmod_itna2': generator.generate_itna2() } headers = { 'X-Request-ID': cookies['ssxmod_itna'][:8] } response = requests.get('https://api.target.com/data', cookies=cookies, headers=headers)

7. 关键问题排查指南

7.1 常见错误代码

错误码原因解决方案
403-21签名过期检查时间同步(NTP服务)
403-22随机数重复实现随机数缓存去重机制
403-25设备指纹不匹配保持ssxmod_itna2持久化
500-31加密结构损坏验证Base64URL编码格式

7.2 调试技巧

  1. 时间漂移问题:
    # Linux时间同步 sudo ntpdate pool.ntp.org
  2. 签名验证工具:
    def verify_sig(cookie): data = base64.urlsafe_b64decode(cookie) ts = data[1:5] nonce = data[5:13] sig = data[13:] expected = hmac.new(b'SECRET_KEY_2023', ts + nonce, sha256).digest() return hmac.compare_digest(sig, expected)

8. 安全防护建议

根据逆向结果发现的风险点:

  1. 硬编码密钥问题:建议采用动态密钥分发机制
  2. 随机数强度不足:改用CSPRNG(如getRandomValues)
  3. 缺乏前向安全性:定期轮换HMAC密钥
  4. CTR模式风险:建议改用GCM模式

这套分析方案已成功应用于三个主流平台的接口分析。在实际操作中,最关键的是保持对加密数据结构的敏感性——比如发现ssxmod_itna2的固定头部特征后,就能快速定位到AES加密的起始位置。建议每次分析时都建立完整的参数变化记录表,这对发现数据规律特别有效。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进