UOJ Logo r_64的博客

博客

最近交互题发生的一些事情

2017-11-20 18:05:00 By r_64

呃。。最近从这个submission开始,陆续有不少人通过交互题中交互库的漏洞来骗取AC。

UOJ 328交互库出漏洞之后,其他的一些交互题的库也陆续爆出漏洞:这里这里

(后一个提交记录是我小号。。我抱着试试看的心态玩了玩没想到APIO2016这样的正规比赛交互库也会出漏洞(或者是uoj管理员配置得不好?

怎么说呢。。一方面大家做题的时候不能总是抱着戏耍交互库的心态做题,另一方面出题人们也要尽量保证交互库不被cha掉。。(出交互题真难啊)

关于怎么加强安全性,我目前还没有很明确的想法。。欢迎大家提建议。。也希望uoj上的交互题能越出越好>_>


想法1:在输出文件的开头输出一个保密的字符串(比如说交互库内部的一个很长的随机串),选手不知道该字符串就无法伪装交互库的输出。这个想法有两个弱点:一是不能防止这种骗输入的情况;二是这个串要非常长(uoj的输出可以看到前100b来着?)或者交互题就不能查看输出。

想法2:加密输入。最好真实数据的输入格式跟题面描述中的不同。这样应该可以防止骗输入,但是又带来了不能hack的问题。如果要允许hack,那可能还需要出题人写一个将hack数据加密的程序,不知道uoj能否实现这样的功能?

想法3:对于牵扯到随机性的题,随机种子最好自己写而不是使用系统库的(其实这是个教训,见这里

评论

WrongAnswer
“一方面大家做题的时候不能总是抱着戏耍交互库的心态做题” 其实可以鼓励大家hack交互库,这样能更好地帮助管理员完善交互库。
worse
(暂时)都已经被@WuHongxun 茶包了啊qwq
WuHongxun
uoj交互本来就是用想法1的。。然后被hack飞了。。 主要出题人可能都不太懂hack啊。。。
Thinkwice
参考 [这个](http://riteme.blog.uoj.ac/blog/2255) ?
Rating_Getter
可以类似codeforces那种风格,直接用读入和输出与交互库交互,不仅能支持更多语言而不用全都分别提供grader,也能防止提前得到东西或者模拟交互库等。
riteme
如果可以修改UOJ的话,我的想法跟博主类似,希望cheater面对的是一个黑箱,而不是输入输出格式都已知的小白鼠。鉴于目前和hack手段都是通过输入输出搞事,因此我觉得: 1、应禁止查看stdout,这样stdout可以输出随机字符串之类的实现给分,毕竟UOJ有一栏是result来显示结果,通常会和stdout内容差不多 2、添加一个数据转换器,用于实现样例交互库格式和实际输入格式直接的转换,避免cheater可以看到真实输入,同时不妨碍hack

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。