某系统sign值js逆向实战
字数 982 2025-10-01 14:05:44

某系统sign值JS逆向实战教学文档

一、背景分析

某系统接口存在sign签名验证机制,JS代码经过混淆处理,无法直接通过关键字搜索定位加密逻辑。

二、逆向分析流程

1. 触发接口与断点定位

  • 通过浏览器开发者工具的Initiator标签追踪接口调用栈
  • 在接口调用处设置断点进行调试分析
  • 发现接口参数和路径被赋值到变量t中

2. 参数处理过程分析

u(B, e)函数 // 疑似请求方法、接口路径和参数体的组合处理函数
forEach: u, merge // 对参数进行循环遍历和合并操作

3. Cookie参数提取

  • 从cookie中提取特定参数
  • 使用正则表达式进行模式匹配
  • 统计和遍历uid长度等操作

4. 加密算法识别

S函数 // 用于MD5加密
// 加密对象为cookie中提取的键值对

5. 加密算法细节

  • 字符串转换为32位整数数组的循环转换过程
  • 参数B的数据合并到当前对象中
  • 处理字节到32位整数的转换
  • 通过for循环进行多次加密编码

6. 数据格式转换

stringify方法 // 将包含二进制数据(words数组)的对象转换为十六进制字符串

7. Body参数处理

  • 循环处理body中的参数
  • 与前面处理的参数进行拼接
  • workname参数转换为类似MD5的加密字符串

8. Sign生成原理

经过调试分析得出:

sign = md5(str(param) + md5(base))

其中:

  • param: 接口参数经过特定处理后的字符串
  • base: 从cookie中提取的基准值

三、Python实现代码

1. MD5加密函数

import hashlib
import json

def md5_encrypt(text):
    return hashlib.md5(text.encode()).hexdigest()

2. JSON解析与参数处理

def parse_json_params(json_str):
    try:
        params = json.loads(json_str)
        # 增强代码健壮性处理
        return params
    except Exception as e:
        print(f"JSON解析错误: {e}")
        return {}

3. 参数字符串排序

def sort_params(params):
    return ''.join([f'{k}{v}' for k, v in sorted(params.items())])

4. 完整Sign生成代码

def generate_sign(params, base_cookie):
    """
    生成sign签名
    :param params: 接口参数字典
    :param base_cookie: 从cookie中提取的基准值
    :return: sign签名值
    """
    # 参数排序拼接
    sorted_param_str = sort_params(params)
    
    # base值的MD5加密
    base_md5 = md5_encrypt(base_cookie)
    
    # 最终sign生成
    sign = md5_encrypt(sorted_param_str + base_md5)
    
    return sign

5. 代码使用示例

# 示例参数
api_params = {"key1": "value1", "key2": "value2"}
cookie_base = "extracted_cookie_value"

# 生成sign
signature = generate_sign(api_params, cookie_base)
print(f"生成的sign: {signature}")

四、验证与绕过

1. 认证测试

  • 修改userid参数测试认证失败情况
  • 运行Python脚本计算正确的sign值
  • 将计算的sign值写入请求参数

2. 成功绕过

  • 使用生成的sign值成功绕过系统验证
  • 确认逆向分析的正确性

五、关键要点总结

  1. 调试技巧:使用Initiator追踪接口调用栈是关键突破口
  2. 参数处理:注意cookie参数和body参数的不同处理流程
  3. 加密逻辑:识别出MD5加密的多层嵌套使用方式
  4. 算法还原:准确分析出sign = md5(str(param) + md5(base))的生成逻辑
  5. 代码实现:严格按照分析流程实现Python代码,确保一致性

六、注意事项

  1. 不同系统的sign生成逻辑可能不同,需要具体分析
  2. Cookie中的base值可能需要动态获取
  3. 参数排序规则可能影响最终sign值
  4. 注意编码格式的一致性(UTF-8)
  5. 混淆JS代码需要耐心分析核心逻辑

通过以上完整的逆向分析和代码实现,可以成功破解该系统的sign验证机制,为后续的安全测试和漏洞挖掘提供基础。

某系统sign值JS逆向实战教学文档 一、背景分析 某系统接口存在sign签名验证机制,JS代码经过混淆处理,无法直接通过关键字搜索定位加密逻辑。 二、逆向分析流程 1. 触发接口与断点定位 通过浏览器开发者工具的Initiator标签追踪接口调用栈 在接口调用处设置断点进行调试分析 发现接口参数和路径被赋值到变量t中 2. 参数处理过程分析 3. Cookie参数提取 从cookie中提取特定参数 使用正则表达式进行模式匹配 统计和遍历uid长度等操作 4. 加密算法识别 5. 加密算法细节 字符串转换为32位整数数组的循环转换过程 参数B的数据合并到当前对象中 处理字节到32位整数的转换 通过for循环进行多次加密编码 6. 数据格式转换 7. Body参数处理 循环处理body中的参数 与前面处理的参数进行拼接 workname参数转换为类似MD5的加密字符串 8. Sign生成原理 经过调试分析得出: 其中: param: 接口参数经过特定处理后的字符串 base: 从cookie中提取的基准值 三、Python实现代码 1. MD5加密函数 2. JSON解析与参数处理 3. 参数字符串排序 4. 完整Sign生成代码 5. 代码使用示例 四、验证与绕过 1. 认证测试 修改userid参数测试认证失败情况 运行Python脚本计算正确的sign值 将计算的sign值写入请求参数 2. 成功绕过 使用生成的sign值成功绕过系统验证 确认逆向分析的正确性 五、关键要点总结 调试技巧 :使用Initiator追踪接口调用栈是关键突破口 参数处理 :注意cookie参数和body参数的不同处理流程 加密逻辑 :识别出MD5加密的多层嵌套使用方式 算法还原 :准确分析出sign = md5(str(param) + md5(base))的生成逻辑 代码实现 :严格按照分析流程实现Python代码,确保一致性 六、注意事项 不同系统的sign生成逻辑可能不同,需要具体分析 Cookie中的base值可能需要动态获取 参数排序规则可能影响最终sign值 注意编码格式的一致性(UTF-8) 混淆JS代码需要耐心分析核心逻辑 通过以上完整的逆向分析和代码实现,可以成功破解该系统的sign验证机制,为后续的安全测试和漏洞挖掘提供基础。