-
-
[原创]看雪.京东 2018CTF 第七题 密室逃脱 Writeup
-
发表于:
2018-6-30 12:00
4250
-
[原创]看雪.京东 2018CTF 第七题 密室逃脱 Writeup
题目描述如下:
这是一个数字迷宫 分为20层楼
16个人各选择一把初始钥匙 开始游戏
16个人进入第一层 按照一定的规则 每个人都会在另外2个人的帮助下开启一个房间 拿到1把第二层楼的钥匙
当16个人都拿到了各自的二层楼钥匙后 一起上楼
第二层重复相同的操作,16个人再一起上到第三层
...
直至16个人拿到了的20层天台的钥匙
天台上有一架直升机,需要16把正确的钥匙才能开走
试试看 你能否找出16把正确的初始钥匙
程序开门见山。程序中的算法也如上所述。
函数check伪代码如下:
程序流程是:
对数据及校验过程分析后,有这么几个发现:
想到循环,测试为先,计算前贴下常量值。
64字节的表为:
16次的取值的序号为:
开始计算,先试初始值为全0。因为完全分布均匀,那应该64轮后循环。
结果是:
竟然32轮就循环了,重点是确实循环了。
将数据换成校验值,这次循环轮数更大了,但是64的倍数:
打印循环前数据:
循环轮再往前数19,即429轮,应该就是输入转换的16字节数据了。
[17, 43, 33, 5, 63, 1, 37, 11, 57, 19, 51, 9, 63, 57, 53, 37]
验证如下:
输出结果为:
投机取巧的非预期解法。
int __cdecl main(int argc, const char **argv, const char **envp)
{
printf("Only 'a'-'z','A'-'Z','0'-'9' accepted.\n");
printf("Only 16 chars accepted.\n");
printf("Serial:");
scanf_s("%s", serial, 17);
check();
system("PAUSE");
return 0;
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-6-30 13:59
被poyoten编辑
,原因: 加转义