其他
2024西湖论剑 Qrohttre:一道windows调试实现同步题
一
第一段smc
二
利用调试技术实现进程同步通信
1 主进程 调试模式创建子进程
2 主进程等待子进程创建
3 主进程 等待 子进程运行至入口点
4.1 主进程 单步调试 子进程
4.2 主进程 单步调试-解密起始代码
4.3 主进程 单步调试-解密后续代码
QrohttreSub.exe
,方便分析子进程,ida里把CE dump出来的解密后代码patch到QrohttreSub.exe中。5.1 内存访问越权-解密代码操作数
5.2 内存访问越权-写入数据
三
读写数据的完整过程
v414008[0]
相当于是*(v414008+4*0)
,而不是*(414008+4*0)
)四
还原与解密
v414490[idx[i]]
依次替换掉sub_40B991中的*v41400C。if ( !memcmp(&dword_414490, arr414010, 0xC0u) )
f_print("Right, the flag is DASCTF{%48s}\n", (char)&d_input);
else
f_print("Wrong flag\n", v3);
arr414010 = [10055, 1165166, 4294965955, 28964355, 2005, 11801, 4294956681, 5157, 6788, 4294954770, 5381, 6008, 4294962473, 4294962309, 12710, 4294960983, 4294960907, 4294958038, 381186, 4294248290, 7421, 106, 5891, 3564, 338599, 11442, 4294960088, 4941, 1000466, 4294958069, 7857, 557652, 4294953719, 4294957570, 633437, 1639, 4294953318, 4294967085, 4294469914, 4294966863, 11488, 9153, 4294959608, 7942, 5848, 6812, 6688, 4294504346]
v414008 = [BitVec('v414008_{}'.format(i), 32) for i in range(48)]
v414490 = [0 for i in range(48)]
def sub_40B991():
v414490[5] = (v414008[0] + v414008[5] + v414008[3] - v414008[7]) ^ (v414008[2] * v414008[4] + v414008[6] + v414008[1])
v414490[7] = (v414008[7] * v414008[0]) ^ (v414008[4] + v414008[5] + v414008[2] - v414008[1]) ^ v414008[6] ^ v414008[3]
pass # 省略后续部分
sub_40B991()
s = Solver()
for i in range(48):
s.add(v414008[i] >= 30)
s.add(v414008[i] <= 127)
for i in range(48):
s.add(v414490[i] == arr414010[i])
if s.check() == sat:
m = s.model()
flag = ''
for i in range(48):
flag += chr(m[v414008[i]].as_long())
print('DASCTF{{{}}}'.format(flag))
else:
print('unsat')
# DASCTF{cTkBnLT6gA8H_sX7Q2VMBMAtl9PZvojBPnSTH7J7aNHeStxN}
看雪ID:wx_御史神风
https://bbs.kanxue.com/user-home-907036.htm
# 往期推荐
1、一次.net cpu爆高分析-windbg sos基本命令使用及分析思路
4、.NET 恶意软件 101:分析 .NET 可执行文件结构
5、CVE-2024-0015复现 (DubheCTF DayDream)
球分享
球点赞
球在看
点击阅读原文查看更多