Este artículo explora una técnica poco convencional para detectar si un programa se está ejecutando dentro del emulador DOSBox. DOSBox es un emulador de MS-DOS que permite ejecutar software antiguo de DOS en sistemas modernos. Aunque intenta emular MS-DOS de manera precisa, presenta peculiaridades que pueden ser aprovechadas para identificar su presencia. La forma más simple de detectar DOSBox sería analizar la cadena de versión de la BIOS (ubicada en una dirección de memoria específica, FE00:0061), pero esta técnica es fácilmente manipulable, ya que se puede modificar la BIOS para que muestre una cadena falsa o alterar DOSBox para que no la muestre. Por lo tanto, el artículo busca una solución más robusta.
La clave de la detección reside en el análisis de comandos COM ejecutados dentro de DOSBox, como MOUNT.COM. Al desensamblar este comando, se revela código inusual: una instrucción FE que no es reconocida por los procesadores x86 estándar. DOSBox, sin embargo, define su propia interpretación para esta instrucción, convirtiéndola en una llamada a una función de callback personalizada. Esta función de callback es una característica exclusiva de DOSBox y no está presente en un sistema MS-DOS real. Por lo tanto, la presencia de esta instrucción FE y su correspondiente función de callback se convierte en una firma distintiva de DOSBox.
Esta técnica implica un conocimiento profundo de la arquitectura x86, incluyendo la codificación de instrucciones y el manejo de opcodes. El artículo explica, aunque brevemente, cómo se estructuran las instrucciones x86, incluyendo el opcode, el byte ModR/M y el byte inmediato, para comprender cómo DOSBox introduce su instrucción personalizada. El análisis revela que la instrucción FE en realidad es una llamada a una función de callback específica, y la presencia de esta función es la clave para la detección.
En resumen, la detección de DOSBox desde dentro del emulador se logra identificando una instrucción personalizada que DOSBox interpreta, pero que sería inválida en un procesador x86 real. Esta técnica es más resistente a la manipulación que los métodos más superficiales, como la inspección de la cadena de versión de la BIOS. Sin embargo, requiere un conocimiento técnico considerable para comprender y aplicar.
