-
-
[原创]unidbg还原pangle(TikTok 旗下)算法
-
发表于:
2025-10-9 16:39
4375
-
[原创]unidbg还原pangle(TikTok 旗下)算法
静态分析
动态调试: debug不用多说
trace read: 跟踪内存的读取
trace write: 跟踪内存写入
trace code: trace 执行的汇编日志
方便分析trace后的汇编, 根据汇编还原具体的算法
RandomFileIO
UnixSyscallHandler
这个案例我们改用正推更简单, 从参数入手
按y 修改为JNIenv*
按n重命名下
看下n1011的值, 这种直接通过trace code, w2 = 0x3f2
0x3f2的10进制就是1010,
那么走的sub_C8D0
看下3550函数, 无法f5, 按p
byte_array和len被传入sub_3550
打印下入参看对不对
也可以断点后通过mx0查看

trace read一下看下谁读取了, 因为ida查看有混淆无法知道进入哪个函数了
ida 查看下 0x333c, 在函数sub_330C中,这个函数就是内存copy, 交叉引用下sub_36C8
看下sub_36C8, 断点查看入参mx1
参数1:0x10 长度
参数2:0x12359000 我们的参数
参数3:0x12359000 返回值
tracewrite 0x12359000 看看他是怎么被写入的
0x385C 开始写入

ida查看代码
看下v42 的值是多少

v42 = 01010101a3e1eaf4 因为长度是unsigned int 4字节
根据ida的伪代码和trace code 还原第一个算法
参数:
030105373d8e5640 8个字节
返回值:
debug断点查看入参:
参数1: s 就是随机数 01010101010101010101010101010101
x1 = 是第一个算法的结果: 030105373d8e5640
x2 是返回值
x3 是一个v11 判断是否等于0走不同的逻辑
python还原
rand hex = 01010101010101010101010101010101
param hex = 030105373d8e5640
flag= 0x20
返回result
我们现在知道每次result的地址都是:
0x12359000
在循环中断点这样子就可以知道我们的输入每轮的变化
第一轮
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2025-10-15 18:41
被tuosen编辑
,原因: