放入ida, 主函数的第一部分为: 虽然buf被识别为了stat结构体有点怪异, 但仍可分析出这段拿出了输入的前10个字符, 从16进制字符转换为数值存入了v39_0x19_0x29的0x19到0x29之间;
其中的string_to_code函数为单纯返回字符串到数字的映射, 映射关系在函数中很直观, 接下来会以注释的方式注明其返回值;
下一段为: 循环赋值后v39_0x19_0x29中前25即0x19中数据为5*5的矩阵, 分析为: v38+0x110处看到后面5*3的循环判断为5*3的矩阵, 分析为: 之后循环中判定条件是每行的和需要等于34;
然后: 这段验证58+input[9] == 8*input[0]+128? 这个(v38[8] & 0x80)有点怪但是要么为0x80要么为0;
然后是最后一段: 用123分别或加或减45, 67, 8, 9需要得到100, 计算一下得知123+45-67+8-9为100, 则 key的10到13的字符应为asas;
至此所有条件都已给出, 感觉好像有点少?. 用z3求解试试 得到99fafef54easas, 打开虚拟机运行guess输入它得到了ok, 但是提交不对, 看来有多解.
感觉上应该是少了什么条件, 看到输出有很多相同值, 试试添加一个每位输入不能相同的条件: 之后得到89cefabd76asas再提交就对了. ...
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-288248.htm
[原创] KCTF 2025 第7题 危局初现wp
178 浏览
0 回复
暂无回复,快来抢沙发吧!