首页
社区
课程
招聘
[原创]某安全SDK x-sign 签名算法还原
发表于: 2小时前 168

[原创]某安全SDK x-sign 签名算法还原

2小时前
168

通过对某安全SDK的ARM64执行日志(Trace)进行深度分析,完整还原签名算法流程。本文重点介绍从汇编指令中扣取算法的分析方法。

从汇编日志提取的VM结构:

JNI传入的签名输入字符串格式:

示例:

MD5 (初始化常量已确认)

SHA1 (轮常量已确认)

XOR混淆

自定义Base64编码

Base64解码后的76字节结构:

在trace日志中搜索重复出现的指令模式,定位VM主循环:

分析要点:

通过handler内部的指令特征识别功能:

示例1:识别XOR Handler (Opcode 0x274)

示例2:识别NOT Handler (Opcode 0x272)

MD5识别 - 搜索初始化常量:

SHA1识别 - 搜索轮常量:

从输入到输出追踪数据变换:

从trace中提取SHA1单轮计算的关键指令:

通过在trace中批量搜索,提取算法使用的所有常量:

在trace末尾追踪最终输出的组装过程:

x23 = 0x752a4ff870  -> Handler地址表 (约600个handler)
x25 = 0x78b7586080  -> VM虚拟寄存器数组 (3264位寄存器)
x21 = 字节码程序计数器
x27 = VM上下文指针
x23 = 0x752a4ff870  -> Handler地址表 (约600个handler)
x25 = 0x78b7586080  -> VM虚拟寄存器数组 (3264位寄存器)
x21 = 字节码程序计数器
x27 = VM上下文指针
ldrh w5, [x21, #0x10]!     // 读取2字节opcode
ldr x4, [x23, x5, lsl #3]  // 查表获取handler地址
br x4                       // 跳转执行handler
ldrh w5, [x21, #0x10]!     // 读取2字节opcode
ldr x4, [x23, x5, lsl #3]  // 查表获取handler地址
br x4                       // 跳转执行handler
Opcode Handler地址 功能
0x000 0x752a2a9070 ADD指令
0x006 0x752a3b6bfc ADD+K (SHA1轮计算)
0x202 0x752a3bc1e0 MOV/ORR指令
0x272 0x752a3b7c30 XOR+NOT变换
0x274 0x752a38fa28 XOR变换
{token}&{appKey}&&{uid}&{md5_data}&{timestamp}&{api}&{apiVersion}&{sid}&{deviceId}&&&&{openappkey}&{extParams}&&&&&&&
{token}&{appKey}&&{uid}&{md5_data}&{timestamp}&{api}&{apiVersion}&{sid}&{deviceId}&&&&{openappkey}&{extParams}&&&&&&&
{YOUR_TOKEN}&{APP_KEY}&&{USER_ID}&{MD5_HASH}&1704067200&api.example.method&1.0&{SESSION_ID}&{DEVICE_ID}&&&&openappkey=DEFAULT_AUTH&27&&&&&&&
{YOUR_TOKEN}&{APP_KEY}&&{USER_ID}&{MD5_HASH}&1704067200&api.example.method&1.0&{SESSION_ID}&{DEVICE_ID}&&&&openappkey=DEFAULT_AUTH&27&&&&&&&
[输入字符串]
     
     ↓  L102135-L102150: XOR + NOT 变换
     ↓  观察: 每8字节与 0x2626... XOR,再取反
     
[XOR变换后数据]
     
     ↓  L12468961-L12469182: MD5压缩
     ↓  特征: 64轮运算,432位状态变量
     
[MD5哈希 16字节]
     
     ↓  L16501050-L16501180: SHA1-HMAC
     ↓  特征: 80轮运算,532位状态变量
     
[HMAC签名 20字节 × 3]
     
     ↓  组装76字节结构
     
[Base64编码输出]
[输入字符串]
     
     ↓  L102135-L102150: XOR + NOT 变换
     ↓  观察: 每8字节与 0x2626... XOR,再取反
     
[XOR变换后数据]
     
     ↓  L12468961-L12469182: MD5压缩
     ↓  特征: 64轮运算,432位状态变量
     
[MD5哈希 16字节]
     
     ↓  L16501050-L16501180: SHA1-HMAC
     ↓  特征: 80轮运算,532位状态变量

传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2小时前 被wx_插曲编辑 ,原因:
收藏
免费 13
支持
分享
最新回复 (5)
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2小时前
0
雪    币: 0
活跃值: (2512)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2小时前
0
雪    币: 18
活跃值: (361)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持
1小时前
0
雪    币: 5705
活跃值: (9727)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
火钳刘明
1小时前
0
雪    币: 2386
活跃值: (3001)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
666
25分钟前
0
游客
登录 | 注册 方可回帖
返回