HSCTF-2017-众所周知系列

不起眼幼蛇培育法

题目

众所周知,大蛇丸是忍界首席科学家,然而一直没有女朋友。
有一天,他在斜坡看到一条幼蛇,一见钟情了。
不过他不知道这条幼蛇长大之后会不会变成母猪,有点方。
你可以帮帮他吗?

附件

不起眼幼蛇培育法.exe

答案

HSCTF{Megumi-or-Sow?}

做法

法1:玩通关,蛇长大即可(注意蛇要反向控制)
法2:用IDA打开程序,可以找到flag的ASCII码异或后组成的数组,异或回去即可
(后来发现我忘记注释掉未经异或的flag(第23行),其实直接用文本编辑器打开exe搜“HSCTF”就搜得出来)

源码


左右横移

题目

众所周知,坂本dalao左右横移的速度非常快,你跟得上吗?

附件

左右横移.gif

答案

HSCTF{girigiri.love}

做法

用StegSolve或者PS这些工具在第30帧即可看见一个二维码
虽然二维码受到了严重损伤,但是微信靠近扫几遍就可以了


与佛论禅

题目

众所周知,凯撒大帝在FGO里变成了一个死肥宅。
对此,人们一直都很好奇。
现在,前方记者得到了采访机会:“是不是打DNF的人都是死肥宅?”
凯撒大帝答曰:“佛曰:礙夷怯提侄藐諳依。漫醯怯故那耨奢想冥都罰一罰謹諸呐離豆曰俱曰俱道吉俱豆冥道罰不罰醯若罰隸遠密究羯藝即奢礙缽帝知皤數切奢吉奢苦缽無呐吉彌俱逝罰智集沙”

答案

HSCTF{Et tu, Brute?}

做法

百度“ctf 与佛论禅”点开第一个,复制进去即可解得DOYPB{Ap pq, Xnqpa?}
之后是一个凯撒密码,由于DOYPB肯定对应于HSCTF,可知是ROT22


拯救大兵艾伦

题目

众所周知,艾伦(eren)身怀坐标之力(flag)可以变身成为巨人(kyojin)
于是,他又双叒叕被抓走啦233
三爷当然是选择原谅,啊呸,救回他
不过救回来的是巨人状态的艾伦,我们需要把他复原回去

附件

地下室.html

答案

HSCTF{zuD~b!qo~zH;~li}

做法

发现f函数是求模p乘法逆元
跟异或一样,把“整容后”再整一次容就可以变回“整容前”
然后问题是连p也未知
不过p一定是素数,候选项不会太多,果断爆破
最后发现p就是193
(有选手的做法是根据结果应该以”HSCTF{“开头而爆破出193,这样的话可以不用看懂f函数)
(早知道flag就不包括”HSCTF{}”,让他们额外补充算了)

源码


我的妹妹不可能这么直男

题目

众所周知,埃罗曼阿老师不敢走出房间,在跟和泉老师“说话”时,采取的是地板语,脚尖碰地的声音较亮为1,脚跟碰地的声音较沉为0。同时为了避免产生误会,埃罗曼阿老师采用了卷积码这种纠错码。有一天,和泉老师向埃罗曼阿老师表白了,正当和泉老师收到回复时,德国骨科老师把和泉老师的型号为“1/2,3”的解码器打断了。隔壁家的山田老师偷偷把声音录了下来,不过她不是直男,只能向你求助:“我很好奇,把埃罗曼阿老师的回复(译码之后)填进HSCTF{}里发给我吧!”

提示

埃罗曼阿老师当然不是心算卷积码的直男,她不知道卷积码适合串行传输,误以为是分组式的纠错码,于是她采取了一个字母编码一次的方式。

附件

地板语.mp3

答案

HSCTF{H4nt@!}

做法

首先把声音转换成01串(空格为短间隔,换行为长间隔)
00 11 10 11 11 10 11 00 00 00
00 00 11 01 01 00 10 11 00 00
00 11 01 01 00 01 10 01 11 00
00 11 01 10 01 00 10 11 00 00
00 11 10 11 00 00 00 00 00 00
00 00 11 10 11 00 00 11 10 11
谷歌搜索“convolutional code online”第一个就是在线编码器
在页面下方选择参数“R=1/2, K=3”(根据题目暗示)并选择解码器
进入在线解码器,仿照已有的格式,加入”-“间隔符,一行一行地放进去解码,每一行都得到了10位的01串
0100100000
0011010000
0110111000
0111010000
0100000000
0010000100
发现最后两位都是0,根据卷积码的编码原理,很可能是多余的(编码时把寄存器内的数字挤出去)
而且根据提示猜测是ASCII码,只取前8位
01001000
00110100
01101110
01110100
01000000
00100001
解得H4nt@!


众所周知

题目

众所周知,众所周知开头的题目都是我出的,真的是这样吗?

附件

reverse-me.exe

答案

HSCTF{tHe}{c}{pRogRam{MiNN}{LANgua233}

做法

先运行,发现直接输出No,用IDA打开后直接查找“No”字符串,再找到这个字符串出现的位置
但此时发现无法F5显示C代码,证明代码中有异常,导致IDA未能正常解析
浏览一下当前函数的汇编码后就可以发现存在花指令
用IDA的patch功能patch掉花指令,保存后重新加载文件就可以用F5查看C代码了
可以看到C代码之后,认真看代码,可知:
该程序首先对输入的字符串进行映射,得到的结果是个数字数组
然后把这些数字作为系数,对多项式进行离散傅里叶变换,得到的结果是个复数数组
然后强行对该复数数组的内存空间进行base64,得到的结果是个字符串,即key
所以,简单地逐步逆向回去就可以得到flag:
VlRCYVQxSkdXa1pYYW1SclVsZG9jMXBzYURCaGJWcFpaRWhrVm1KVWJIVldWekZIWkVkVmQwMVlRbFZoZWxVMVdsUkNORkZzVW5SYVJFWmFWa1ZzTmxSVVRYZFFVVDA5
但这不是真正的flag,还需要base64解码5次(增加长度,防止强行爆破flag)

源码