Cientos de portátiles,
y ninguno pertenece al centro.
Cientos de portátiles,
y ninguno pertenece al centro.

Karel de Grote Hogeschool buscaba una forma de seguir los ordenadores de los estudiantes durante los exámenes. El profesorado no veía si alguien se conectaba a una red externa, ejecutaba una máquina virtual o abría aplicaciones que no debía.
Hasta entonces todo dependía de la vigilancia en el aula, y eso no escala en salas con cientos de equipos, la mayoría portátiles de los propios estudiantes. KDG necesitaba algo que revise cada equipo antes de empezar, registre lo que importa mientras dura la prueba y se entregue junto con el examen. El estudiante lo ve todo: entra con su usuario, la aplicación le dice qué cambiar y al final es él quien entrega el registro. La supervisión entra en el acuerdo sobre datos de estudio que firma al matricularse.
- 3
- sistemas operativos, una sola base de código
- 6
- señales vigiladas durante el examen
- 1
- registro cifrado, entregado con el examen
- 0
- personas que pueden leerlo sin la clave del docente
Una herramienta de escritorio que capte la actividad del sistema en Windows, macOS y Linux va más allá de lo que Dart hace por sí solo. Capturar paquetes de red, reconocer una máquina virtual y leer el hardware piden código nativo cada vez.
Con nuestro método de seis pasos construimos una aplicación Flutter en neerlandés e inglés que llama a bibliotecas de C y C++ mediante dart:ffi, cifra lo que registra en el propio equipo y da al profesorado una herramienta de línea de comandos para abrir esos registros después.
1. IDENTIFICAR Y VALIDAR
Con el equipo de IT de KDG definimos qué significa en la práctica la integridad de un examen. De ahí salieron seis dimensiones: conexiones de red, estado del Bluetooth, adaptadores conectados, aplicaciones en ejecución, presencia de máquinas virtuales y un latido que indica que la aplicación sigue viva. Cada una se contrastó con situaciones reales de examen.
1. IDENTIFICAR Y VALIDAR
Con el equipo de IT de KDG definimos qué significa en la práctica la integridad de un examen. De ahí salieron seis dimensiones: conexiones de red, estado del Bluetooth, adaptadores conectados, aplicaciones en ejecución, presencia de máquinas virtuales y un latido que indica que la aplicación sigue viva. Cada una se contrastó con situaciones reales de examen.
2. MAPA DE IMPACTO
Cada capacidad se ligó a un resultado para la integridad del examen. La supervisión de red detecta accesos a internet no permitidos. La detección de máquinas virtuales descarta entornos en un espacio aislado. El seguimiento de aplicaciones señala herramientas prohibidas. El orden lo marcó la frecuencia real de cada infracción.
3. AUDITORÍA TÉCNICA
Comprobamos si Flutter en escritorio aguantaba la supervisión del sistema en tiempo real. La auditoría mostró que la captura de paquetes y la detección de máquinas virtuales necesitan código nativo. Elegimos dart:ffi con enlaces generados en lugar de platform channels, porque FFI evita el coste de serialización que la supervisión a nivel de paquete no se puede permitir.
4. PROTOTIPO INTERACTIVO
Construimos paquetes envoltorio de FFI alrededor de las bibliotecas de C y C++, cada uno con su propia batería de pruebas, y los validamos por separado en Linux, macOS y Windows antes de integrarlos en la aplicación Flutter. Así aparecieron pronto los problemas de compilación propios de cada plataforma.
5. DESARROLLO Y LANZAMIENTO
La aplicación es un monorepo: la interfaz en Flutter, dos paquetes envoltorio de FFI y una herramienta de línea de comandos en Dart para descifrar. Todos los datos de supervisión se cifran con AES-GCM antes de escribirse en disco, y solo un docente con la clave correspondiente puede volver a leerlos. El estudiante entra con su código de examen, recorre la lista que la aplicación le pone delante y empieza cuando el equipo está en orden.
6. ITERAR Y OPTIMIZAR
Tras el primer despliegue añadimos detección de adaptadores por plataforma, afinamos el latido para que se vean los intentos de cerrar la aplicación y dejamos el formato de registro cifrado más rápido de recorrer para el profesorado.
El resultado funciona en cualquier equipo de examen, arranque lo que arranque y sea de quien sea. Lleva al estudiante por una comprobación previa, registra seis tipos de actividad del sistema mientras dura la prueba y deja un único registro cifrado que solo un docente puede abrir.
¿Un reto parecido?
Primero una comprobación, luego seis cosas que vigila
Antes de empezar, la herramienta enseña lo que todavía está mal y no deja arrancar hasta que se arregla. Durante el examen mira el sistema desde seis ángulos, con marca de tiempo en cada evento y cifrado donde ocurre.
Inspección en tiempo real con una biblioteca nativa: TCP, UDP e ICMP, con dirección de origen y destino, puertos e indicadores de protocolo. Se ejecuta en un isolate de Dart aparte para no bloquear la interfaz.
Reconoce VMware, VirtualBox, Hyper-V y otros hipervisores mediante una biblioteca de C++ tras un envoltorio de FFI, e indica el nivel de certeza y qué hipervisor ha encontrado.
Enumera los adaptadores de red físicos y virtuales con sus detalles de hardware, y detecta si durante el examen se conecta o se retira alguno. Cada plataforma se trata como esa plataforma permite.
Sigue los procesos en ejecución y señala las aplicaciones prohibidas. También ve qué se abre o se cierra durante la sesión de examen.
Indica si el Bluetooth está encendido antes de empezar y si vuelve a encenderse durante la prueba. Es lo que más se olvida, así que la lista de comprobación lo menciona por su nombre.
Una señal constante que dice que la aplicación sigue en marcha. Un hueco ahí dice tanto como el resto del registro: así se ve cerrar la herramienta a mitad del examen.
Flutter en escritorio con envoltorios de C y C++, almacenamiento cifrado y una herramienta de línea de comandos para descifrar
La aplicación está organizada como monorepo. La interfaz en Flutter coordina seis servicios de supervisión, todos sobre la misma clase base MonitoringService. Dos de ellos, la captura de paquetes y la detección de máquinas virtuales, pasan por paquetes envoltorio de FFI con enlaces generados. Cada evento atraviesa la capa de cifrado antes de llegar al disco.
Explicamos en detalle el trabajo de FFI que hay detrás. Leer el artículo →

Construida con Flutter para Windows, macOS y Linux desde una sola base de código, en neerlandés e inglés. El código en C y C++ se compila por plataforma con CMake y CocoaPods.
El estudiante entra con su nombre, su número de estudiante y el código del examen. la herramienta revisa el equipo y dice en lenguaje llano qué hay que cambiar: desactiva ese adaptador Wi-Fi, apaga el Bluetooth. Cuando todo está en orden, empieza el examen. Al terminar, la aplicación señala un único registro comprimido que el estudiante entrega junto con su trabajo. El profesorado los abre con una herramienta de línea de comandos en Dart, que convierte cada uno en una cronología por equipo.
¿Los mismos exámenes en tu propia institución?
Karel de Grote Hogeschool lo construyó para sus propias aulas de examen y está abierto a licenciarlo a otras instituciones. La misma aplicación, tu identidad visual, tus reglas sobre qué se comprueba, adaptada e integrada por el equipo que la construyó. Cuéntanos cómo organizas tus exámenes hoy.


