-
-
[原创] 看雪·2025 KCTF 第七题 危局初现 by 心学
-
发表于: 2025-8-28 22:51 3592
-

此题存在多解(暴力破解,有470个解)。正确输出 ok,错误输出 no。
guess 需要在 给定的虚拟机下运行,其无法在 Ubuntu或Centos操作系统下运行,一时半会找不到动态调试的方法【放弃】,直接采用静态调试方法分析代码。
其核心是:序列号为 14 个字符,其中前10个字符为小写16进制字符,即[0-9a-f],最后4个字符为"asas"。而前10个字符需满足设定的条件,可以通过求解方程来获取,可以用线性方程组【详见第四部分 线性方程组求解】(降低暴力破解时间开销)来获取解答,也可以通过编程暴力破解。
10个未知数,6个方程组,虽然有取值范围限制,但是若没有设定好边界条件或等式关系,极有可能造成多解。
程序的代码主要逻辑还是比较清晰,只是存在几点常量代换、运算代换,以及调用虚拟机内部的关键处增加干扰等。

程序采用 string_to_code(const str) 将循环变量进行了替换,初看代码比较费劲,可考虑直接拷贝代码后,进行整体替换处理。
替换前:
可以将直接将 string_to_code 函数拷贝到 VS 里,然后输出对应的结果,之后替换源码。
替换后:可以更为清晰看清楚代码结构。
这里应用到了两处干扰项,(v39 & 0x80),此时的v39尚未赋值,其运算的结果为0;v25=5,~4(反码的内存表现形式)实际就是 -5(补码的内存表现形式)。实际上就是 4+5+7+8+S9 = 8*S0-34
数值的反码和补码表现形式


结果就是 S0至S9的通解公式,我们知道各自取值为[0,15],那就可以以 S6(k4)、S7(k3)、S8(k2) 作为循环变量[0,15],并确保所计算的其他数值结果为 [0,15],可以加快寻求所有有效解的速度。
部分解
当前解 1:
84bfd4ffa6asas
当前解 2:
84bfe5fe96asas
当前解 3:
84bff6fd86asas