论坛首页 密码学讨论区 阅读主题

[原创]unidbg读写跟踪还原X-Gorgon

305 浏览 6 回复
#1 楼主 2026-06-01 21:08:45
使用版本 33.2.5
mssdk提供给 libsscronet.so 网络库的接口地址是 0x88ee0
参数签名函数调用序列 0x88ee0 -> 0x87e48 -> 0x86d60 -> 0x6B14c
0x6B14c -> 0x6Db40 -> 0x73908-> 0x7d3f0 (X-Argus)
                              -> 0x73968 -> 0x7dd18(X-Ladons)
                                -> 0x73688 -> 0x811a8(X-Gorgon)
本文只分析X-Gorgon参数生成方式,关键加密函数位于0x7e5301、unidbg读写跟踪2、unidbg调用运行
运行后生成3个跟踪文件 tracecode.txt traceread.txt tracewrite.txt分别记录了函数0x7e530的执行指令,全局的内存读写记录。
输出X-Gorgon字符串:
8404e0a6000006292b2e51bf21d8e270474e655a4379e5d3f7f63、跟踪字符串生成过程
1)函数输入参数1:
0000: 12 B4 93 96 00 00 00 00 00 00 00 00 20 05 00 05    ............ ...
0010: 67 90 66 CC
分别是 md5(url_param) + md5(body) + sdk版本 + timestamp,共20字节2)函数输入参数2:
buffer地址 0x4041a6e03)每个字节写入过程
从tracewrite.txt中提取地址 0x4041a6e0到 0x4041a6f9写入记录
 第1个字节 0x84,指令地址 0x81138,直接写入无需计算第2字节 0x04,指令地址 0x805A4,直接写入无需计算第3字节 0xe0,指令地址 0x803d00xe0从地址 0xbfffdb77 读取
跟踪地址0xbfffdb77写入记录:地址 0xbfffdb77的值在 地址 0x7e648 处写入:第4字节 0xa6,指令地址 0x7fbd4第5和6字节 0x0000,指令地址0x13742c,初始化buffer为0后没有再写入后20字节 0x06292b2e51bf21d8e270474e655a4379e5d3f7f6,指令地址 0x804e8。都是同一个地址,应该是在做加密运算。0x804e8 是最终写入地址,实际上有每个字节有3次写入。上述逻辑是取出一个字节,然后做加密运算,再写回。
跟踪查看地址 0x4041a6e6 在哪里写入 0xb7:地址 0x80334 指令:这里取出了当前字节,和下一个字节做加密运算,然后写回
跟踪查看地址0x4041a6e6 在哪里写入 0xf2:地址 0x802ac 指令:这里取出 0x2f,经过运算得到 0xf2,再次写回
继续跟踪查看地址0x4041a6e6 在哪里写入 0x2f:地址 0x801cc 处指令:对原始的输入值,每一个字节加密处理
加密过程中,会从地址 0xbfffda60 保存的数组中取值参与运算
跟踪数组值写入地址:该地址指令:会循环初始化该数组的值为 0 – 0xff
进一步跟踪,查看地址 0xbfffda60 + 0x12 ,在哪里被写入 0x3d上述指令的作用是使用地址 0xbfffdb70 处的值,初始化前面的长256的表
地址 0xbfffdb70 是根据输入值,构造的一个 长8字节的key
继续跟踪查看 0xbfffdb70 - 0xbfffdb77 怎么生成算了不跟踪了,方法就这样。附上测试代码:String traceFile = "C:\\Users\\Administrator\\Desktop\\tracecode.txt";

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-285586.htm
#2 2026-06-01 21:08:45
牛啊
#3 2026-06-01 21:08:45
学习 学习
#4 2026-06-01 21:08:45
这个讨论对我很有帮助,谢谢!
#5 2026-06-01 21:08:45
火钳刘明
#6 2026-06-01 21:08:45
插眼
#7 2026-06-01 21:08:45
火钳刘明

请登录后参与讨论

立即登录 注册账号