某系统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值成功绕过系统验证
- 确认逆向分析的正确性
五、关键要点总结
- 调试技巧:使用Initiator追踪接口调用栈是关键突破口
- 参数处理:注意cookie参数和body参数的不同处理流程
- 加密逻辑:识别出MD5加密的多层嵌套使用方式
- 算法还原:准确分析出sign = md5(str(param) + md5(base))的生成逻辑
- 代码实现:严格按照分析流程实现Python代码,确保一致性
六、注意事项
- 不同系统的sign生成逻辑可能不同,需要具体分析
- Cookie中的base值可能需要动态获取
- 参数排序规则可能影响最终sign值
- 注意编码格式的一致性(UTF-8)
- 混淆JS代码需要耐心分析核心逻辑
通过以上完整的逆向分析和代码实现,可以成功破解该系统的sign验证机制,为后续的安全测试和漏洞挖掘提供基础。