论坛首页 逆向工程技术区 阅读主题

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

284 浏览 2 回复
#1 楼主 2026-06-01 21:08:55
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加密三次。


登录后可查看完整内容

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-288159.htm
#2 2026-06-01 21:08:55
加密完直接输出FAILED,这边解题完后也不知道为什么。程序通过syscall直接调用ZwSetInformationThread设置反调试后通过ZwQueryInformationProcess检查标志位是否设置正确,如果标志位的值不对,则检测到调试。即出现无法输入serial的情况。

最后于 2025-8-22 21:32
被zZhouQing编辑

,原因:
#3 2026-06-01 21:08:55
zZhouQing


加密完直接输出FAILED,这边解题完后也不知道为什么。程序通过syscall直接调用ZwSetInformationThread设置反调试后通过ZwQueryInformationProcess检查 ...

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

最后于 2025-8-22 20:57
被Liv_T编辑

,原因:

请登录后参与讨论

立即登录 注册账号