Honderden laptops,
en geen enkele van de hogeschool.

Exam monitoring tool login screen with student number, name, and exam code fields

Karel de Grote Hogeschool zocht een manier om tijdens examens de computers van studenten op te volgen. Docenten zagen niet of er verbinding werd gemaakt met een extern netwerk, of er een virtuele machine draaide, of er applicaties werden opgestart die niet mochten.

Het ging tot dan met toezicht op de zaal, en dat schaalt niet in examenzalen met honderden machines, waarvan de meeste de eigen laptop van de student zijn. KDG had iets nodig dat elke machine nakijkt voor het examen start, registreert wat er tijdens het examen gebeurt en dat samen met het examen wordt ingediend. De student ziet alles: hij logt in, de app zegt wat er moet veranderen, en op het einde dient hij het logboek zelf in. De monitoring valt onder de overeenkomst over studiegegevens die hij bij zijn inschrijving tekent.

3
besturingssystemen, één codebase
6
signalen bewaakt tijdens het examen
1
versleutelde log, ingediend bij het werk
0
mensen die hem kunnen lezen zonder de sleutel van de docent

Een desktoptool die systeemactiviteit vastlegt op Windows, macOS en Linux gaat verder dan wat Dart alleen kan. Netwerkpakketten opvangen, virtuele machines herkennen en hardware uitlezen vraagt telkens native code.

Met ons zesstappenkader bouwden we een Flutter-desktopapp in het Nederlands en het Engels die C- en C++-bibliotheken aanspreekt via dart:ffi, versleutelt wat ze registreert op de machine zelf, en docenten een CLI-tool geeft om die logs achteraf te openen.

1. IDENTIFICEREN & VALIDEREN

1. IDENTIFICEREN & VALIDEREN

Samen met de IT-dienst van KDG hebben we bepaald wat examenintegriteit in de praktijk betekent. Daaruit kwamen zes dimensies: netwerkverbindingen, bluetoothstatus, aangesloten adapters, draaiende applicaties, virtuele machines en een hartslag die zegt dat de app nog leeft. Elke dimensie is afgetoetst aan echte examensituaties.

Het resultaat draait op elke examenmachine, wat er ook op staat en van wie ze ook is. Het loodst de student door een check vooraf, registreert zes soorten systeemactiviteit terwijl het examen loopt, en levert één versleuteld logboek op dat alleen een docent kan openen.

Herkenbaar?

Eerst een checklist, dan zes dingen die het opvolgt

Voor het examen begint, toont de tool wat er nog fout staat en laat het de student pas starten als dat opgelost is. Tijdens het examen kijkt het vanuit zes hoeken naar het systeem, met een tijdstempel op elke gebeurtenis en versleuteling waar ze plaatsvindt.

Pre-exam warnings showing connected WiFi and Bluetooth that need to be disabled
Exam monitoring tool login screen with student number, name, and exam code fields Pre-exam checklist showing system status checks and session information

Realtime inspectie van pakketten via een native bibliotheek: TCP, UDP en ICMP, met bron- en bestemmingsadres, poorten en protocolvlaggen. Draait in een aparte Dart-isolate zodat de interface niet blokkeert.

Herkent VMware, VirtualBox, Hyper-V en andere hypervisors via een C++-bibliotheek achter een FFI-wrapper, en geeft aan hoe zeker de detectie is en welke hypervisor het gevonden heeft.

Somt fysieke en virtuele netwerkadapters op met hun hardwaredetails, en merkt op wanneer er tijdens het examen een adapter bijkomt of wegvalt. Elk platform wordt aangepakt zoals dat platform het toelaat.

Volgt draaiende processen op en signaleert verboden applicaties. Ziet ook wanneer er tijdens de examensessie iets wordt opgestart of afgesloten.

Meldt of bluetooth aanstaat voor het examen begint, en of het er tijdens het examen weer bij komt. Dit is wat studenten het vaakst vergeten, dus de checklist noemt het met naam.

Een vast signaal dat zegt dat de app nog draait. Een gat erin is even interessant als wat er in het logboek staat, want zo ziet het eruit als iemand de tool halverwege afsluit.

Flutter desktop met C- en C++-wrappers, versleutelde opslag en een CLI om te ontsleutelen

De app zit als monorepo in elkaar. De Flutter-UI stuurt zes monitoringservices aan, elk gebouwd op dezelfde MonitoringService-basisklasse. Twee ervan, pakketopvang en VM-detectie, werken via FFI-wrapperpakketten met gegenereerde bindings. Elk logevent passeert de versleutelingslaag voor het op schijf komt.

We schreven het FFI-werk achter deze build uitgebreid uit. Lees het insight-artikel →

Architecture: Flutter desktop app with C and C++ FFI wrappers, an AES-GCM encryption layer, local encrypted logs and a Dart CLI decryption tool

Gebouwd met Flutter voor Windows, macOS en Linux vanuit één codebase, in het Nederlands en het Engels. De C- en C++-code wordt per platform gecompileerd met CMake en CocoaPods.

De student logt in met zijn naam, studentennummer en examencode. de tool kijkt de machine na en zegt in gewone taal wat er moet veranderen: zet die wifi-adapter uit, schakel bluetooth uit. Staat alles goed, dan start het examen. Op het einde wijst de app één gezipt logboek aan dat de student samen met zijn werk indient. Docenten openen die met een Dart-CLI, die er per machine een tijdlijn van maakt.

Exam monitoring tool log upload screen for submitting encrypted exam logs

Dezelfde examens op je eigen instelling draaien?

Karel de Grote Hogeschool bouwde dit voor de eigen examenzalen en staat open voor licenties aan andere instellingen. Dezelfde app, je eigen huisstijl, je eigen regels over wat er gecontroleerd wordt, aangepast en geïntegreerd door het team dat het gebouwd heeft. Vertel ons hoe jullie examens vandaag verlopen.

Gratis, vrijblijvend 30 minuten Met een senior consultant