¿Cómo se crean los hacks del lado del cliente? [cerrado]

0

Muchos juegos de hoy se lanzan en un estado alfa / beta y se ven abrumados al instante por los "piratas informáticos" que descargan los programas que manipulan el juego para que sea superado.

Supongo que hacen inyecciones en ciertas direcciones de memoria en tiempo de ejecución, pero no tengo ni idea de cómo crear un programa como ese. Además, ¿cómo evitarlo?

Cualquier sugerencia de cómo lo hacen es muy apreciada.

¡Cuantos más detalles, mejor!

    
pregunta OHMR 15.02.2014 - 00:06
fuente

2 respuestas

8

Tu pregunta es muy amplia. Puedo contarte cómo yo hice en un caso, por diversión, en un pequeño juego de arcade hace varios años. Esto debería hacer que adquieras cierta perspectiva educativa, pero no te ayudará mucho, de lo contrario, me temo.

Simplemente tuve otro programa ejecutándose en segundo plano, explorando la memoria del juego de arcade.

Empecé a jugar, y luego perdí una vida. Presione ambas teclas de mayúsculas y se guardó una instantánea de la memoria en el disco sin que lo supiera la arcada en ejecución. Luego otro. BAM otra instantánea. Un tercero, y un cuarto. Y luego el juego terminó y salí del juego de arcade.

Luego comparé las instantáneas, buscando una ubicación de memoria que cambiara de una instantánea a la siguiente, ya sea aumentando o disminuyendo exactamente una. Recuerdo haber encontrado unos veinte de ellos. Podría haberlos comprobado todos, pero descubrí inmediatamente que uno de ellos, y solo uno, tenía un valor de "cinco" al comienzo del juego y se convirtió en "cuatro" en mi primera muerte. Y yo había comenzado con cinco barcos. Ahora eso es interesante ...

Así que escribí un pequeño programa que buscaría esa dirección de memoria, reconociéndolo por su distancia de otras piezas de código y cadenas que no cambió, verificando su valor cada pocos segundos, y solo retrocediendo "5" en él tan pronto como se convirtió en algo menos:

: install
    look for string 'COPYRIGHT ACME GAMES'
    add 1138
    is it a five?
    no, abort, something went wrong
    yes. lie in wait.
: wait
    is it still a five?
    no. Set it to five.
    sleep for a couple of seconds
    goto wait

Efectivamente, en el próximo juego, morí, y un instante después, mis cuatro naves espaciales restantes se convirtieron en cinco de nuevo. Por el gusto de hacerlo, descubrí que podía obtener hasta siete 'vidas' con este método (ocho bloquearon el juego).

Al utilizar un "depurador", también habría sido posible detener el programa tan pronto como se modificó la ubicación, para ver qué instrucción había realizado la escritura. Entonces simplemente borrarías esa instrucción del código del ensamblador. O puede seguir el flujo del programa a la inversa y descubrir dónde, por ejemplo, se realizó el control de colisión entre el sprite de su jugador y los misiles enemigos. Deshazte de ese control, y los misiles enemigos ya no te afectarán (posiblemente, el tuyo ya no los afectará; es un asunto delicado).

Espero que las técnicas hayan madurado y progresado mucho en estos años, pero confío en que, básicamente, la idea sigue siendo la misma: detecte el cambio que no le gusta, luego defang el código que lo está causando, o parche el código para deshacer el daño tan pronto como ocurra.

Para hacer las cosas más difíciles, se podrían idear estrategias para hacer que los cambios se destaquen menos o que parezcan aleatorios. Agregue variables "chaff" o "dummy" que cambian como si fueran útiles. Utilícelos como indicadores: si todas las variables no coinciden, significa que alguien está intentando piratear.

Al final, sin embargo, no puedes vencer a un hacker determinado y experimentado. Todo lo que puedes hacer es intentar que el hecho no valga la pena. Hay ofuscadores de código, protectores de código, encriptadores de código, detectores de depuración, técnicas de anti-virtualización ...

    
respondido por el LSerni 15.02.2014 - 00:42
fuente
3

Hay varios vectores de ataque para un juego en línea.

Automation

Algunos juegos, especialmente del espectro MMORPG más orientado a la rutina, tienen métodos de avance que son extremadamente simples. Todo lo que el jugador debe hacer es presionar la misma secuencia de botones o hacer los mismos clics del mouse una y otra vez. Este tipo de mecánica de juego es una invitación a una automatización utilizando un programa macro simple que emula la entrada del teclado y el mouse.

Pero en la mayoría de los juegos, el jugador debe prestar al menos un poco de atención. Eso significa que el programa makro necesita saber qué está sucediendo realmente en el juego. Esto puede hacerse examinando la memoria de la aplicación cliente (Iserni ya ha cubierto este aspecto en su respuesta) o examinando el código de red.

Ingeniería inversa del código de red

El cliente y el servidor de juegos se comunican entre sí enviando y recibiendo mensajes de red. Hay programas como Wireshark que se pueden usar para monitorear esta actividad de la red. Cuando puede supervisar esa actividad, esto le proporciona una entrada legible electrónicamente para su macro.

Pero también podría darte información que el jugador ni siquiera debería tener. Los servidores de la mayoría de los tiradores en primera persona, por ejemplo, le informan al cliente acerca de las posiciones de los demás jugadores y luego confían en el cliente para que solo muestre aquellos que son realmente visibles para el jugador. Cuando el hacker encuentra una manera de visualizar esta información al jugador, esto puede darles una gran ventaja.

Las

herramientas que pueden leer el tráfico de la red a menudo también permiten inyectar mensajes en el flujo de datos de la red. Esto también se puede utilizar como una forma avanzada de automatización.

Hackeando al cliente

Hasta ahora solo usábamos medios externos y no tocábamos al cliente. Pero puede ser mucho más cómodo para el jugador colocar la divulgación de información y automatización directamente en el software del cliente para que se integre mejor en el juego. Hackear ejecutables es un campo muy amplio y complejo. La gente ha escrito libros completos sobre el tema.

Pero básicamente se reduce a encontrar puntos en el programa donde el flujo de ejecución salta de una sección de código a otra. El hacker modificará esta instrucción de salto para que no salte a donde se supone que deben saltar, sino que ingrese al código del programa de hackers. Una vez que se ejecutó el código de los piratas informáticos, el flujo del programa regresa al código original del juego y continúa como si nada hubiera pasado.

Escribiendo tu propio cliente

Modificar un ejecutable compilado sin acceso al código fuente original es una manera muy complicada e incómoda de desarrollar software. Cuando desee desarrollar funciones más complejas, podría ser más fácil comenzar desde cero y simplemente desarrollar su propio cliente de juego.

Así que el hacker escribiría un nuevo programa que implementa el protocolo de red del juego. Cuando ese programa se comunica con el servidor de la misma manera que lo hace el cliente original, no hay forma de que el servidor lo detecte. El cliente pirata informático, por supuesto, no se centraría tanto en una experiencia de juego inmersiva, sino solo en maximizar el éxito del jugador al visualizar toda la información disponible y automatizar todo lo que requiere habilidad (o es simplemente aburrido).

    
respondido por el Philipp 17.02.2014 - 15:27
fuente

Lea otras preguntas en las etiquetas