首页
社区
课程
招聘
[原创] 看雪 2022 KCTF 春季赛 第七题 一触即发
发表于: 2022-5-23 15:14 4261

[原创] 看雪 2022 KCTF 春季赛 第七题 一触即发

2022-5-23 15:14
4261

golang程序,高版本IDA(7.7+)打开,体验极好(然后在main_main函数中迷失无法自拔)

 

程序要求输入7位数字

 

0x4ae194 的 fmt_Println_0 传了一个 "fail!!!" 字符串作为参数,但始终没有打印出来,反而是不停的循环要输入
(甚至已经把 main_main 里的最后一轮循环 F8 单步跟踪完了,仍然一头雾水找不到路)

 

好在 IDA 7.7 已经把绝大部分函数都标蓝了(FLIRT识别出的库函数),只有极个别的函数还是白的。挨个看,发现读取输入的 bufio__ptr_Reader_ReadString 函数在 0x4ad700 有检查输入字符是否位于 [0x30, 0x39] 的范围,非常可疑;继续往下看,发现输入的数字被填入了 fmt_Abc 全局变量。

 

在IDA里按y和*把这个变量定义为4*4的__int64数组,查找交叉引用,发现了初始化的位置在 fmt_Print 函数,而真正检查的位置在 fmt_Fprintln_0 函数。(阴险的出题思路,一直没有想过古怪出在输入输出函数里)

 

程序对 fmt_Abc 的检查相当简单,是一个4*4的数独,初始化时留了7个空位,输入的7位整数按顺序填入其中,保证4行、4列、4个2*2里的数字相加都是10,即1234的排列。

 

初始化的值:(0是待填空位)

1
2
3
4
0310
1003
2034
0420

按照规则填好的值:

1
2
3
4
4312
1243
2134
3421

所以程序正确的输入是:

1
4224131

(另:7位整数,只有10000000种输入,单线程几十分钟能爆破10000,找个多核机器直接硬爆一天也能出来)


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-5-23 15:17 被mb_mgodlfyn编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//