lunes, 18 de agosto de 2014

Preguntas frecuentes: "Error al crear proceso"

Ya les comenté en el post anterior que hay algunos errores que se les manifiestan a muchos usuarios de ZinjaI, y que entonces iba a comentarlos aquí, con sus causas y pseudo-soluciones para facilitar un poco las cosas. Decidí empezar por dos problemas particulares (de los cuales creo que ZinjaI no tiene culpa alguna), porque son de los que más me han consultado a mi correo personal. El que presento hoy tiene que ver con esos infames comerecursos que son los antivirus, y se manifiesta de esta forma: cada vez que desde ZinjaI se quiere compilar y ejecutar un programa, la compilación finaliza con éxito (suponiendo que el código era correcto), pero en la ventana de ejecución sale algo como "Error al crear proceso: C:\booga\dooga\algun_programa.exe".

La explicación simple y rápida es la siguiente: el antivirus está destruyendo cada cosa que el compilador hace porque le parece sospechoso. Es verdad que la actividad de un compilador parecería sospechosa y se podría asemejar a un virus medio trucho de esos que abundan hoy en día. Es decir, ¿qué es eso de andar creando ejecutables así por que sí? Parece un intento de virus escondiendo sus crías. Cuando el antivirus prueba el compilador en su sandbox este comportamiento enciende todas las alarmas de su heurística y decide que no debe permitirlo. La solución rápida es desactivar el antivirus o agregarle una excepción, pero antes de llegar a eso permítanme hacer un poco de catarsis.


No me parece tan terrible que el pobre antivirus se confunda y catalogue como malicioso al majestuoso y respetado señor compilador. Lo que si me parece infame, es que tome la determinación de borrar el ejecutable generado sin consultar a nadie, y mucho peor aún, sin avisar. Esta acción suele quedar registrada en algún log del antivirus, y seguramente el exe estará en cuarentena por ahí con otro nombre, no suele ser irreversible. Pero desde el punto de vista del usuario, me parece inadmisible que se tomen medidas tan drásticas sin consultar ni advertir (algunos antivirus advierten, o se pueden configurar, pero he visto varios que por defecto no lo hacen).

Les cuento algo que me pasó hace poco: tenía que copiar muchos datos y programas de una PC vieja a otra nueva. Pasé todo a un disco usb, y luego moví (es decir cortar y pegar) del usb a la PC nueva. Como descargo digo que lo hice desde Windows y no desde Linux solamente porque alguien más estaba usando la PC en Windows. En fin, sabido es que si en Windows una copia se interrumpe a la mitad por un error X, no es cosa fácil determinar hasta dónde copió y hasta dónde no. Por eso moví en lugar de copiar. El punto es que al antivirus (avast en este caso) le parecieron sospechosos practicamente todos los ejecutables que intenté copiar, y los fue borrando uno por uno a medida que se movían, nuevamente sin avisar. ¿Alguien escuchó algo sobre el principio de mínima sorpresa para el diseño de interfaces? Pues bien, bastante grande fue mi sorpresa cuando al rato quise usar lo que había copiado y no encontré nada. Al buscar en el log del antivirus, enseguida noté que había sido él y que todos los ejecutables estaban en cuarentena en el "vault". Entonces procedí a pedirle que los restaure (recuerden que los quise mover, ya no estaban en el disco externo). Pero este tal "vault" tiene un límite de capacidad, así que no todos mis ejecutables sobrevivieron a la restauración, y no encontré forma de saber cuales no sin tener que mirar uno por uno. Lo noté más tarde cuando desde Linux quise empaquetar ZinjaI para Windows y wine disparó errores de colores porque a MinGW le faltaban la mitad de las cosas.

En fin, volviendo al problema en ZinjaI, la causa es la misma. Cuando le pedimos a ZinjaI que ejecute, ZinjaI le pide a gcc que compile. Gcc compila generando un bonito exe, y le dice a ZinjaI que todo salió bien, que ya puede ejecutar. Es justo ahí cuando el antivirus destruye muy sigilosamente esa flamante creación, de forma que cuando ZinjaI va confiado a ejecutarla se produce el error. Lo he visto particularmente con el avast, pero no creo que sea el único que lo hace. He leído además que pasa también (como es de esperar) con otros IDEs basados en gcc.

La solución es agregar una excepción al antivirus, pero cual excepción y cómo agregarla se los dejo a ustedes, yo no se cómo hacerlo. Dado que ya no me considero usuario de Windows, y que la PC del trabajo con arranque dual vive desde hace dos años sin antivirus y no ha tenido problemas, no me interesa mucho tampoco averiguarlo. Si les pasa, desactiven el antivirus por completo y prueben si se soluciona. Si ese es el caso, busquen ustedes en google como son las reglas de excepciones para su antivirus en particular. Si tienen ganas, cuéntenlo en los comentarios para el próximo que llegue buscando el mismo problema.

 Tomado de http://listocomics.com/comic/390-infeccion/ (disaclamer: no hay animosidad
contra este antivirus  en particular, es solo que así encontré el comic)

Y es que así ha "evolucionado" la tecnología de los antivirus (ahora hasta hablan!). Sé que no la tienen fácil, no es justo caerles por todo, pero a veces es peor el remedio que la enfermedad. Me ha tocado ver a uno decir que un exe era un virus por contener la cadena "ping". Sí, así de ridículo, por agregar en el código: const char *s="ping";. Y lo mejor fue la solución: char s[]="pung"; s[1]='i';. Yo ni siquiera quería usar el comando ping, solo buscar y reemplazar "ping" por "pong" en un string. Y toda esa tecnología para detectar esos programitas que se hacen llamar virus hoy en día porque se ponen atributos de ocultos en la raíz de un pendrive y crean un autorun.inf. Atrás quedaron las épocas en que los virus eran verdaderas maravillas de programación a bajo nivel como el mágico 512, cuando se escondían dentro de ejecutables lícitos como un virus biológico transformando el adn de su anfitrión, cuando el stoned te saludaba una de cada ocho veces, y cuando la gente evitaba encender su ordenador cada 6 de marzo.

3 comentarios:

  1. Señor, quería comentar para agradecerle por la ayuda que me ha brindado. Hace horas que estaba tratando de descubrir porque no podía depurar el programa, y desactivando el virus se solucionó.
    Kudos para ti :)

    ResponderEliminar
  2. Gracias, en verdad fue de mucha ayuda, muy buen contenido

    ResponderEliminar
  3. 04/04/2024, estudiante de ing en computacion. Programando en zingal (C++). El Windows Defender, el mejor y gratis antivirus, de vez en cuando hace lo que fue dicho anteriormente; solo que ahora el antivirus lo detecta como: Trojan:Win32/Wacatac.H!ml
    Veré si funciona, lo mencionado.

    ResponderEliminar