首页
社区
课程
招聘
[原创]KCTF2025 第四题 血色试炼
发表于: 2025-8-20 17:13 4903

[原创]KCTF2025 第四题 血色试炼

2025-8-20 17:13
4903

TlsCallback_0初始化了两个Key,以及一个Base64表,并且有一个标准Sbox和一个标准InvSbox赋值。

这边从ntdll.dll中寻找所有Zw开头API,然后储存到自定义链式结构中。

这边加载了个加密字符串,自解密出来是ZwQueryInformationProcess,然后通过第二处红框去上面的结构里面找到对应API的syscall服务号。

赋值给全局服务号变量,然后调用syscall,判断返回值是否>=0,若>=0则触发异常,说明这边可能是一个反调试。

直接在这个call后面设置条件断点将返回值改成负数即可绕过。

main函数开头处有设置一个VEH,

VEH里面分成两部分代码执行。

动调发现输出完UserName:后会触发异常,然后进入第一个箭头call处,这里面是进行了一个输入流的启动,下面syscall后就是等待用户输入。

用户名输入完后会返回到这边,然后底下进行三次循环处理,循环内第一个call会触发第二种异常,进入VEH函数的第二部分代码。

红框处就是我们输入的用户名,下面对用户名进行加密,加密结果是一个Base64,和序列号的格式一样,循环三次会对UserName加密三次。


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

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 1508
活跃值: (2041)
能力值: ( LV12,RANK:229 )
在线值:
发帖
回帖
粉丝
2

加密完直接输出FAILED,这边解题完后也不知道为什么。

程序通过syscall直接调用ZwSetInformationThread设置反调试后通过ZwQueryInformationProcess检查标志位是否设置正确,如果标志位的值不对,则检测到调试。即出现无法输入serial的情况。

最后于 2025-8-22 21:32 被zZhouQing编辑 ,原因:
2025-8-22 20:47
1
雪    币: 148
活跃值: (1725)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
3
zZhouQing 加密完直接输出FAILED,这边解题完后也不知道为什么。程序通过syscall直接调用ZwSetInformationThread设置反调试后通过ZwQueryInformationProcess检查 ...

多谢指点!当时着急解题没有很详尽的分析,漏看了一处syscall。

最后于 2025-8-22 20:57 被Liv_T编辑 ,原因:
2025-8-22 20:57
0
游客
登录 | 注册 方可回帖
返回