Programeros al desnudo II

Ver el tema anterior Ver el tema siguiente Ir abajo

Programeros al desnudo II

Mensaje por saurau el Sáb Feb 02, 2013 3:10 pm

Ya expliqué cómo los programeros (malditos sean por toda la eternidad) hacen trampa cualquiera sea el ritmo de juego (lento, blitz o bala), usando programas especiales que no pueden ser detectados de ningún modo. Hoy les explicaré cómo hacen muchos para hacer trampa sin necesidad de trucos tan sofisticados...

Supongo que ya saben que el cliente atrapa fácilmente a los que salen varias veces de la ventana de juego, no hace falta decir con qué infame propósito.

Veamos:

Cuando un jugador le da a Alt + Tab para conmutar entre P8 y, digamos, Fritz, está activando y desactivando ventanas, algo que en informática se conoce como alteración del ZOrder. Cuando una ventana está en el tope del ZOrder, "tiene el foco": es la que recibe los mensaje de teclado y ratón enviados por el sistema operativo. Cuando la ventana que está al tope del ZOrder cambia su puesto por otra, desactivándose, pierde el foco (o, mejor dicho: lo cede).

Cuando una ventana se activa o desactiva, recibe mensajes especiales por parte del sistema. Ustedes no se dan cuenta, pero, secretamente, hay miles de mensajes circulando en la trastienda del sistema, constantemente. Los programas reciben cientos o miles de mensajes del sistema en cada momento, y también los envían. Este flujo masivo de mensajes es interno, por así decir; se realiza "entre bambalinas".

Todas nuestras acciones, como por ejemplo pulsaciones de teclas, movimientos del ratón, clicks y atajos, disparan múltiples mensajes, producen diálogos entre el programa que estamos usando y el sistema operativo. Estos diálogos, como dije, operan en secreto.

Todos los programas implementan un mecanismo llamado "bucle de mensajes". Este bucle (event loop) es como el armazón del programa. Mediante este bucle, que se inicia cuando arranca el programa y del que se sale cuando el programa termina, se conoce en cada instante qué mensajes le envía el sistema al programa, para que éste sepa cómo responder en cada caso. El bucle de mensajes (o de eventos, como le llaman otros) pregunta en cada ciclo si se recibió un mensaje de tecla, de ratón, de comando, etc. Por cada tipo de mensaje, hay una rutina asociada. Ufff: Hay un montón de tipos de mensajes. Cada vez que se termina de preguntar qué tipo de mensaje se recibió, recomienza otro ciclo de preguntas, y así una y otra vez hasta que el programa es cerrado.

Cuando el programa pierde o gana el foco, es decir: cuando su ventana principal se desactiva o reactiva, el bucle de mensajes detecta estas acciones, ya que el sistema le envía los mensajes correspondientes. Así, todo programa sabe cuándo se pone al tope del ZOrder y cuándo dejar de estar al frente del mismo.

No es difícil imaginar cómo hace el cliente de P8 para detectar a los que salen de la ventana de juego: simplemente cuenta las veces que el sistema le envía el mensaje de desactivación de ventana.

Bien, el sistema de detección de programeros funciona así, bastante rústicamente, sin ánimo de ofender. Pese a su sencillez, este método es empleado por varios servers de juegos, y debemos agradecerle el haber atrapado a unos cuántos tramposos... (Hace poco, en un torneo dominguero a 30 min, un conocido jugador fue atrapado de ese modo).

Pero, como dice el dicho, "hecha la ley hecha la trampa".

Los programeros usan una herramienta llamada "virtualizador", que les permite correr dos sistemas operativos a la vez, en la misma PC. Supongamos: en Windows hacen correr el programa VirtualBox, y dentro de esta "máquina virtual", hacen correr un segundo Windows. Ambos sistemas tienen su propio ZOrder, es decir: su propia jerarquía de programas funcionando. En uno de los sistemas, hacen correr el cliente de P8, y lo ponen al tope del ZOrder de ese sistema. De ahí en más, el cliente de P8 queda activo, con todo el foco para él. Luego, en el otro sistema, hacen correr a Rybka, o el motor que prefieran para aplastarnos. Ese motor, a su vez, permanecerá todo el juego al tope del ZOrder del segundo sistema operativo. Cuando el tramposo conmuta entre P8 y Rybka, ninguno de los dos sistemas operativos sufre cambios en su ZOrder. Es como si estos sistemas fueran indiferentes entre sí. Nada saben uno del otro...

Cuando el programero se vale de un virtualizador, puede conmutar entre p8 y su programa de ajedrez favorito sin que el bucle de mensajes del cliente reciba un mensaje de activación o desactivación de ventana. Por lo tanto, el sistema de detección de programeros explicado al comienzo se ve burlado impunemente, ya que el ZOrder, repito, no sufre ninguna alteración durante esta operación.

Está claro que este mismo truco es el que usan muchos para jugar contra sí mismos sin tener que recurrir a dos PCs. Mi temor (fundado) es que si usan virtualizadores para poder jugar contra sí mismos (mediante nicks fantasma y con el claro objetivo de aumentarse el ELO fraudulentamente), muy bien podrían estar usándolos, también, para jugar con motor contra los demás usuarios... Con lo cual, un posible método policial para capturar programeros, sería seguirles el rastro a los que juegan contra sí mismos mediante nicks fantasma. Pero ésa es otra historia...

Ahora bien, hace un año, o más, yo le escribí a Pablo, el programador de P8, contándole todo esto, con el ruego de que implementara un detector de virtualizadores en el mismo cliente. Esto es sumamente fácil de hacer, ya que el virtualizador corre como un proceso ordinario en el sistema operativo. Bastaría revisar cada segundo la lista de procesos (mediante un snapshot) e inspeccionar los ejecutables de los mismos, para descubrir al instante si hay algún virtualizador corriendo. De darse el caso, el usuario sería descalificado en el acto...

A diferencia de la trampa basada en el módulo de OCR, este truco no permite jugar con motor a ritmos rápidos (¡por suerte!). Es un truco demasiado aparatoso...

Por si no queda claro, yo brindo toda esta información para que las víctimas sepan de qué y cómo defenderse. Desde que entré a P8 intento ayudar para que el sistema anti-programeros sea suficientemente efectivo. No creo haber servido de mucho, sin embargo, porque dicho sistema no ha sido mejorado en ningún sentido, ¿o me equivoco? Como sea, no cesaré de aportar pistas para atrapar a los tramposos.









Última edición por saurau el Sáb Feb 02, 2013 5:10 pm, editado 1 vez

saurau

Cantidad de envíos : 488
Edad : 50
Localización : Siempre en la Luna
Fecha de inscripción : 20/09/2012

Ver perfil de usuario

Volver arriba Ir abajo

Re: Programeros al desnudo II

Mensaje por saurau el Sáb Feb 02, 2013 3:54 pm

Ahora estoy buscando en internet información sobre formas de detección de máquinas virtuales... Es un tema complicado. Por suerte, poco a poco voy dando con páginas que aportan datos muy útiles:

http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
http://weblogs.asp.net/jgalloway/archive/2006/10/27/Can-Operating-Systems-tell-if-they_2700_re-running-in-a-Virtual-Machine_3F00_.aspx

Y en el foro de programadores que más frecuento, veo esto:

http://stackoverflow.com/questions/14427991/how-to-find-if-my-os-is-running-on-a-virtualized-or-non-virtualized-environment
http://stackoverflow.com/questions/154163/detect-virtualized-os-from-an-application

En este foro (¡ustedes no saben cómo lo adoro!), me acabo de enterar de que también se hace trampa en el póker online, ¡jugando con motores! Qué enfermos...

saurau

Cantidad de envíos : 488
Edad : 50
Localización : Siempre en la Luna
Fecha de inscripción : 20/09/2012

Ver perfil de usuario

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.