首页
社区
课程
招聘
[原创]2021 KCTF秋季赛 题目提交 by lelfei
2021-11-12 12:16 16480

[原创]2021 KCTF秋季赛 题目提交 by lelfei

2021-11-12 12:16
16480

SN:B4D682C8BF2DE13AD9B6AEF24A80CB22


设计说明:

本题是个数字替换的小游戏。

预设一个【0-255】的乱序表,隐藏前8字节。用户输入32位16进制字符串,转换成16字节数值,前8字节填入乱序表。验证过程分三步:

1.统计表格,每一位分别按*p++和**p查表,查8次后,统计所有能到达的格子,形成256*256的方阵,分别统计第0、14、40、79列,验证col0==169 && col14==172 && col40==167 && col79>200。

2.变形表格,每一位按**p循环替换,要求256步之内能回到当前值。

3.验证表格,取表格前8位,分别按用户输入的后8位的二进制值进行查表,为0时取**p,为1时取*p++,查表8次后,验证结果是否为“GoodJob~”。成功则输出“GoodJob~”。否则输出“TryAgain”。

本题使用VC6+WTL制作。


破解建议:

1.程序没有任何ANTI,可以直接在IDA中查看源码,找到上述三步验证。

2.根据验证第2步分析可知,256个数在256个位置全部都能循环替换回来,对每一个数都必然存在*p=i这一步,也就是说0-255这256个数都要存在,统计给出的258位,找出缺失的8位为:[30, 40, 75, 109, 140, 163, 210, 251]。

3.把8位进行排列,分别用第1步的算法进行验证,一共有40320种组合,数量级很小,很快就能穷举出结果,得到唯一解:[0x4B, 0x6D, 0x28, 0x8C, 0xFB, 0xD2, 0x1E, 0xA3]。

4.把8位值放入256数表格,运行第2步进行表格变换。

5.取变换后的表格的前8位[193, 155, 127,  88, 100, 213, 119,  33],按第1步的算法列举出每一位能到达的值,然后查表找出“GoodJob~”每一位的运行步骤为[0x9D, 0x6B, 0xEA, 0x2F, 0xA4, 0x08, 0xBC, 0x22],都是唯一解。

6.把前8位的解与后面的运行步骤组合并按输入逆序排列,得到答案:B4D682C8BF2DE13AD9B6AEF24A80CB22



[培训]《安卓高级研修班(网课)》月薪三万计划

最后于 2021-11-18 13:11 被kanxue编辑 ,原因:
上传的附件:
收藏
点赞4
打赏
分享
最新回复 (2)
雪    币: 26435
活跃值: (18467)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2021-11-14 19:34
2
0
第二题 迷失丛林
游客
登录 | 注册 方可回帖
返回