首页
论坛
课程
招聘
[原创]KCTF2020秋季赛 第七题 鱼目混珠 WP
2020-12-2 11:36 1438

[原创]KCTF2020秋季赛 第七题 鱼目混珠 WP

2020-12-2 11:36
1438

定位关键代码段

NtReadFile函数Ret处下断, 输入序列号, 回车, 成功断下.

"1234567887654321"为我们输入的测试序列号.

查看调用栈:

继续跟踪到下面的位置:

依次读取输入数据的一个字节并存储到[esp+94]缓冲区.

跟踪到函数返回, 会发现代码有做混淆处理.


反混淆处理

代码中存在一定程度的代码混淆:

去混淆后, 如下图(可以先尝试手动恢复, 若发现工作量较大, 则需要编程处理):


按上述方式, 理解混淆模式并做对应处理.

//核心验证逻辑4B5D1C – 4B615B区间代码去混淆后二进制数据
90 90 90 90 90 83 C3 01 83 FB 09 0F 84 92 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 89 D9 D3 CE 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 FF 54 24 60 31 C6 90 90 90 90 90 0F B6 4C 24 2C D3 CF 90 90 90 90 90 90 90 90 90 90 90 FF 54 24 64 31 C7 90 90 90 90 90 90 90 E9 5D FF FF FF 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 33 35 4C 90 4B 00 3B 74 24 1C 74 3B 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 8B 44 24 20 89 04 24 E8 18 D2 F4 FF 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 8D 65 F4 31 C0 5B 5E 5F 5D C3 A1 48 90 4B 00 31 F8 3B 44 24 20 75 B8 90 90 90 90 90 90 90 90 90 90 90 8D 7C 24 70 31 C0 83 C9 FF F2 AE C7 04 24 80 50 4C 00 F7 D1 8D 41 FF 89 44 24 08 8D 44 24 70 89 44 24 04 E8 2E BD F4 FF 85 C0 78 81 90 90 90 90 90 90 90 90 90 90 90 90 A1 14 51 4C 00 90 90 90 90 90 90 90 90 90 C6 05 AC 50 4C 00 00 A3 A8 50 4C 00 BA 04 00 00 00 8D 42 FF 80 B8 A8 50 4C 00 00 0F 85 AC 02 00 00 85 C0 89 C2 75 EA A3 A4 50 4C 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 C7 44 24 08 A4 50 4C 00 C7 44 24 04 80 50 4C 00 C7 04 24 C8 50 4C 00 E8 B3 C6 F4 FF 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 C6 05 88 50 4C 00 00 C7 05 84 50 4C 00 0F 3D 05 0E BA 04 00 00 00 8D 42 FF 80 B8 84 50 4C 00 00 0F 85 33 02 00 00 85 C0 89 C2 75 EA A3 80 50 4C 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 C7 44 24 08 80 50 4C 00 C7 44 24 04 C8 50 4C 00 C7 04 24 C8 50 4C 00 E8 C4 C9 F4 FF 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 C7 44 24 08 10 51 4C 00 C7 44 24 04 C8 50 4C 00 C7 04 24 C8 50 4C 00 E8 91 C0 F4 FF 90 90 90 90 90 C7 44 24 08 34 51 4C 00 C7 44 24 04 C8 50 4C 00 C7 04 24 C8 50 4C 00 E8 70 C0 F4 FF 90 90 90 90 90 90 90 90 90 90 90 C7 44 24 08 34 51 4C 00 C7 44 24 04 10 51 4C 00 C7 04 24 EC 50 4C 00 E8 C9 C5 F4 FF 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 C7 44 24 08 EC 50 4C 00 C7 44 24 04 C8 50 4C 00 C7 04 24 A4 50 4C 00 E8 F3 C0 F4 FF 90 90 90 90 90 90 90 90 90 90 90 83 3D A4 50 4C 00 10 0F 8F D2 FD FF FF 90 90 90 90 90 90 90 90 90 90 90 90 C7 44 24 08 80 50 4C 00 C7 44 24 04 C8 50 4C 00 C7 04 24 C8 50 4C 00 E8 53 C5 F4 FF 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 C6 05 88 50 4C 00 00 C7 05 84 50 4C 00 25 00 00 00 BA 04 00 00 00 8D 42 FF 80 B8 84 50 4C 00 00 0F 85 DF 00 00 00 85 C0 89 C2 75 EA A3 80 50 4C 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 C7 44 24 08 80 50 4C 00 C7 44 24 04 C8 50 4C 00 C7 04 24 EC 50 4C 00 E8 DD C4 F4 FF 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 C7 44 24 08 EC 50 4C 00 C7 44 24 04 EC 50 4C 00 C7 04 24 EC 50 4C 00 E8 2F BF F4 FF 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 A1 A4 50 4C 00 3B 05 10 51 4C 00 0F 85 DF FC FF FF EB 13 0F B6 90 14 51 4C 00 38 90 A8 50 4C 00 0F 85 CA FC FF FF 83 E8 01 85 C0 79 E6 7C 03 EB 03 90 74 FB E8 01 00 00 00 90 83 C4 04 89 34 24 E8 E4 CE F4 FF 90 90 90 90 90 E9 D2 FC FF FF 89 D0 E9 CC FD FF FF 89 D0 E9 53 FD FF FF 89 D0 E9 20 FF FF FF 90

验证流程图:

验证流程

4B5D1C - 4B5E2D处代码做了XOR加密验证, 主要用于辅助实现部分反调试功能, 并不影响序列号分析, 略.

4B5E3A - 4B6156处代码做了一系列大数运算, 参考下述Python代码:

a = 0x10010401
b = 0x0e053d0f
c = 0xfea1bd9e6964129d8f5079e1
d = 0x10000000000000000000000000000000000000000000000000000000000000000
P = 0x3faffa2b01b6ba9744c4b4e010010401

#设x为序列号, 验证方程为:
#x * a // b + P + c - P * c = (x * a // b * b * 0x25 * 2) // d
#可解得:
#x = (d * (P * c - (P + c))) // (a  * d // b - 0x4A * a) 

x1 = d * (P * c - (P + c))
x2 = a * d // b - 0x4A * a
x = x1 // x2

m = x % 0x10
seri = ""
while(x != 0):
    seri = seri + "{:01X}".format(m)
    x //= 0x10
    m = x % 0x10
    
#可算得序列号为: 10C7F30833B9C4563BF035C32D8C7709E040FCA64E211F34CD3FE773
print(seri.upper())

验证结果:




安卓应用层抓包通杀脚本发布!《高研班》2021年3月班开始招生!

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回