Skip to content

๐Ÿ† Online programming examination system prototype, featuring anticheat mechanisms (keylogging, playback)

License

Notifications You must be signed in to change notification settings

aesophor/hacklympics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

HACKLYMPICS

OnlineJudge Keylogging ScreenRecording REST Java8 Python3 Django1.8 Material UI


What's This

  • This was my undergrad project while I was a cadet at National Defense University (Jun. 2015 ~ Jun. 2018)
  • I left the R.O.C. army in Jun. 2018 due to my disappointment in them.
  • I transferred to University of Taipei in Aug. 2018, and got admitted to NCTU in Nov. 2019
  • This is my complete rewrite of its predecessor which was written by six of my seniors
  • A programming exam platform with online judge and anticheat
  • Can prevent students from cheating (using StackOverflow, LINE, etc) with keylogging and continuous screen capture

Overview

  • Three-tier REST architecture

    • Hacklympics - Client (Java FX)
    • HacklympicsAPI - RESTful API (Java 8)
    • Nocturnal - Backend (Python 3.5 + Django 1.8.18)
  • Event-driven Architecture

    When there's a change in state at the server side, the server will notify all relevant clients by "dispatching events" to them. When a client receives an event from the server, it will take appropriate actions in order to reflect the changes to the user.

  • Design Patterns used

    • Singleton
    • Observer
  • Libraries used

    • okhttp - HTTP+HTTP/2 client for Android and Java applications.
    • gson - JSON Library. Used for passing data between Django and HacklympicsAPI
    • java-diff-utils - Diff Patch Library. Used for syncing keylogs.
    • thumbnailator - Thumbnail generation library. Used for down-scaling snapshots.
    • JFoenix - JavaFX Material Design Library
    • FontawesomeFX - Icon Library
    • RichTextFX - RichText Area for JavaFX. Used for code areas
    • TerminalFX - A Terminal Emulator written in JavaFX 8

Features

  • Users with Teacher's privileges can create/edit/remove Courses/Exams/Problems.
    • each Course contains Exam(s)
    • each Exam contains Problem(s)
  • Server-side Online Judge (implemented in judge.py)
    • Automatic score assiging (not implemented yet)
  • Server-side countdown timer for each Exam (implemented in session.py.
    • when the time's up, the exam will halt automatically.
  • Screen recording and keylogging targeting students while they are in exams
    • no more visiting StackOverflow! Everything is under surveillence!
    • taking snapshots
    • syncing keystrokes via diff-patches.
  • Each exam has its own chatroom
    • all messages are public
    • useful for students asking teachers questions
    • togglable toast notifications (not implemented yet)

Supported Programming Languages

  • Currently only Java is supported since this project mainly focuses on the proctoring mechanisms.

Usage

  1. Clone this repo
$ git clone https://github.com/aesophor/hacklympics
$ cd hacklympics
  1. Start the django server on 0.0.0.0:8000
$ cd Nocturnal && ./start_server.sh
  1. Open another terminal, cd to hacklympics directory, and run the desktop client.
$ cd Hacklympics/dist
$ java -jar Hacklympics.jar

Note: Please edit Hacklympics/dist/config.properties to change where the desktop client will connect to.


Gallery

Please visit imgur for more screenshots.

scrot1
Editing a Course

scrot2
Student screens in real time

scrot3
Syncing keylogs & playback

scrot4
Full-fledged code editor for students

scrot5
Passing an exam with Online Judge


License

Available under Mozilla Public License 2.0.