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

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

2022-5-23 15:14
3794

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,找个多核机器直接硬爆一天也能出来)


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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