JuangaCovas.info

La página personal de Juan Gabriel Covas

Herramientas de usuario

Herramientas del sitio


Action disabled: media
laprision:autoprision

Sobre el AutoPrisión

En este artículo, el autor del AutoPrisión -un programa para automatizar tareas en el juego La Prisión-, nos contaba la historia del programa y cómo lo hizo, con motivo del 10º aniversario del juego. También nos explica cómo intentó hacer trampas en el juego.

Escrito por Jagoba Los Arcos Gonzalez (Perikera) en 2009


PRIMER CONTACTO CON UN JUEGO ONLINE

10 años!!!! Flipo xD.

Pues sí, 10 añitos desde que fui al antiguo centro mail de Bilbao a comprarme el PCFÚTBOL y no quedaban copias. Eso sí, mirando las estanterías me llamó la atención un juego de la misma casa, La Prisión:

  Juer, un juego de fugarse de la cárcel, esto tiene que molar. Hey tronko, como sea como la peli “la fuga de alcatraz” tiene que molar un puñao.

Encima con el precio que tenía me fui de la tienda todo contento con él. De camino a casa me pongo a leer las instrucciones y… ¡anda! Si requiere conexión a Internet. Hasta entonces Internet para mí solo había servido para buscar 4 páginas, mucho chat en el IRC, correo electrónico y poco más…

Cuál es mi sorpresa al arrancar el juego y verme en un una cárcel en la que los prisioneros… son otros jugadores!!! Esto que os parecerá una bobada, para alguien que tiene su primer contacto con un juego online es algo muy fuerte.

"QUE MI HERMANITO PEQUEÑO JUEGUE POR MÍ"

Después de unos días jugando, dando vueltas por aquella pequeña cárcel con sólo un módulo de celdas, y peleando en un sistema de lucha que era a base de cuadraditos, me asaltó mi primera inquietud:

  ¿Por qué estos tíos con los que estoy jugando son nivel 18 y yo solo 3? ¿Es que no estudian, no trabajan? ¿Están todo el día dándole al cuadro?

Por supuesto yo no podía permitir que me superasen así que… ¿Cómo me lo monto para poder jugar más tiempo? Por entonces yo estudiaba (poco la verdad), pero ya hacía mis pinitos con el Visual Basic así que me pregunte: ¿Por qué no hago un programa que haga clicks de continuo? Así no tengo que estar pendiente del PC y mientras hago otras cosas voy subiendo niveles.

Manos a la obra. Cogí mi Visual Basic y lo primero era cómo hacer para emular un click…. Ni idea de cómo hacerlo así que tirando de AltaVista (era el buscador de moda del momento) encontré información de cómo hacerlo. (Para los curiosos, buscar sendinput). Así que con esto, nació el primer autoclick. No hacía mucho más que click click click, pero me permitía ver la tele mientras jugaba.

La gente me decía, “eso es ilegal, buguero”, pero eran tiempos en los que el conocido por todos speedhack estaba a la orden del día. Mi intención desde el principio siempre fue simular las acciones del usuario, no acelerarlas ni buscar trucos raros. Como bien escribí en el readme.txt del primer AutoPrisión que compartí con los demás jugadores, “el AutoPrisión no es ilegal, es igual que tener a tu hermano pequeño jugando por ti”.


Así seguimos hasta que apareció el nuevo sistema de peleas, adiós a los cuadraditos. Entre tanto me aburría horrores tener que cocinar, coser, etc… así que si había hecho un click,click,click no había nada que me impidiese hacer esos clicks en un orden y en una posición predeterminada.

Así que manos a la obra de nuevo.

Y más problemas claro. Tuve que encontrar como quedarme con la posición del ratón en la pantalla, y teniendo en cuenta que el juego se ejecutaba a pantalla completa pues tuve que investigar bastante hasta que di con cómo hacer un hook (Para los curiosos, buscar SetWindowsHookEx). Una vez resulto ese problema se me presentó otro. Tenía que poder manejar mi programa desde dentro del juego sin salir a Windows. Así que tras mucho buscar y viendo que en otro programas se podían hacer cosas como CTRL+C para copiar, acabe aprendiendo cómo hacer hotkeys. (Para los curiosos, buscar RegisterHotKey). Y con esto y cuatro funciones más salió a la luz el primer AutoPrisión al público.

Con este AutoPrisión se podía grabar una secuencia de clicks y pulsaciones de tecla y reproducirlas. No tardo mucho en empezar a ser utilizado por gran parte de los prisioneros y me decidí a mejorarlo incluyendo la posibilidad de poder añadirle más de una secuencia de grabación. Y surgió otro problema, era demasiadas teclas a recordar para poder manejar el AutoPrisión desde dentro del juego. Necesitaba otro sistema… ¿Qué tal un menú que se pueda ver dentro del juego?

Manos a la obra. Buscando de nuevo encontré la forma de pintar en Windows encima de cualquier aplicación (para los estudiosos, buscar GDI). Lo que pasaba era que… según yo pintaba algo misteriosamente desaparecía O_o. ¿Por qué? Pues porque La Prisión es un juego que está hecho usando DirectX y repinta la pantalla X veces por segundo, invalidando mi menú. La solución que encontré en aquél momento fue que si La Prisión escribe X veces por segundo, pues yo escribo más rápido. Por eso si recordáis el menú de dentro del juego de la prisión parpadeaba, porque me estaba “peleando” con el juego a ver quién pintaba más rápido. También cambié la forma en que yo hacía los clicks (los empecé a hacer usando DirectInput, el mismo sistema que usa el juego), ya que en algunas versiones de Windows no funcionaba el AutoPrisión. Así salió el AutoPrisión 2.0 DX.

Un buen día entro en el juego y me encuentro un keko que está todo el rato yendo de un lado para otro. Le hablo y no responde. Al cabo de media hora el jugador me dice, “perdona, es que estaba en auto bajándome bots”.

Leshe!!! O sea que la peña está usando el AutoPrisión no solo para cocinar, sino que hay personas que se han currado secuencias súper complejas que permiten… ¿pelear solo? De nuevo no podía permitir, que esta vez con mi propia creación, los “ludos” subiesen niveles como locos y yo no me aprovechase, así que con todo lo aprendido… ¿Qué me impedia poder hacer un AutoPelea?

Manos a la obra. Grabar una secuencia de “Saco ruleta, selección arma, hago click en las coordenadas donde sale el bot”, no tenía complicación a estas alturas pero cómo no, nuevo problema. ¿Cómo sé cuando me toca atacar? Aquí sí que las pasé canutas y mi investigación dio con varias formas de atacar el problema y distintos resultados:

Lo primero que se me ocurrió fue que entre la comunicación del servidor con el cliente del juego, el servidor de alguna manera tiene que estar pasándole esos datos al cliente. Así que tras localizar el puerto que usa el cliente para comunicarse con el servidor use un sniffer para poder ver los paquetes que se manda y se envían a ver si había algo entendible. La primera en la frente. La información que capturé estaba encriptada y era más fácil leer el chino que entender lo que pasaba por allí. Idea desechada.

Lo segundo que se me ocurrió fue intentar leer lo que pasaba en la pantalla. Para ello y sabiendo algo más de DirectX intenté leer lo que el juego estaba haciendo para pintar las cosas en la pantalla. Esto fue un callejón sin salida ya que el juego tomaba de forma exclusiva la pantalla y en cuanto intentaba meterme en medio el juego se cerraba. Otra idea a la basura.

¿O no? ¿Y si hago una captura de pantalla y busco un pixel en concreto, por ejemplo las letras amarillas de “Tiempo turno”?

Así que buscando si un punto de la pantalla en concreto era amarillo conseguí saber si me tocaba atacar o no. Con lo cual salió a la luz el AutoPrisión que conocéis hoy en día.


INTENTANDO HACER TRAMPAS

Bien, pues después de haber estado ocupado en otros asuntos (al final cómo no, he acabado trabajando de programador y administrador de sistemas), hace poco que he vuelto a jugar a La Prisión.

Y con todo lo aprendido con el juego y mi trabajo actual, mucha gente me dice: “tú fijo que puedes pufear el juego a tu gusto y conseguir lo que quieras”. Pues claro tío, pues claro… yo también he tenido mi lado oscuro y por suerte para todos, el equipo de La Prisión es bastante mejor de lo que os pensáis muchos. El juego salvo algún bug que aparece de vez en cuando, está protegido contra jugadores malintencionados. Como muestra un botón.

Lo que os voy a enseñar ahora es uno de los ataques que intenté hacer para sacar ventaja de mis conocimientos como programador y poder ser el tío mas duro de la prisi y así poder dar por el fly a más de uno…..

Ejem ejem… calma que me sube la tensión. Como no, yo también he tenido mis momentos de “vamos a joder a estos tíos que fijo que se están forrando a nuestra costa”. Pero sinceramente, no creo que los GameMasters se hayan comprado un Ferrari a nuestra costa, así que os voy a enseñar un ataque que intente sobre el cliente del juego y cómo me salió el tiro por la culata. Al lío.

Uno de mis problemas con el AutoPrisión fue como detectar si era si estaba en pelea o fuera de pelea. Así que me hice un programita que es capaz de leer las direcciones de memoria del juego en busca de algo en concreto. ¿Qué busco lo primero? Algo fácil, por ejemplo la vida del jugador:

Una vez que tengo la dirección de memoria donde se almacena dicho dato, mi lado maligno me dice: “joas, ponte 5000 de vida”. Dicho y hecho.

Aquí podéis ver una captura en la que aparezco con una barra de vida de 5000 abajo a la derecha a la que se la ha ido la pinza XD.

¿Qué bonito verdad? Lo malo es que hacer esto así o hacerlo con el paint da el mismo resultado ya que una vez metidos en pelea, es el servidor el que mantiene la vida del jugador y a la primera yoya que nos dan, la vida vuelve a ser la real.

Otro ejemplo es el siguiente en el que estoy con 500 PA:

Vaya golpe a traición me iba a salir eeeeeh… Lástima que el golpe también se calcule en el servidor y esos 500 PA solo sean visuales.

He probado esto cambiando valores como por ejemplo la destreza o el numero de balas. Por ejemplo si hacemos lo mismo con el número de bombas, o sea, realmente tengo 1 y lo cambio en memoria a 500, si tiro 1 funciona!!! El contador pone 499, pero la siguiente que tiro el cliente de juego se queda colgado. ¿Por qué? Porque el servidor no es tonto y sabe que sólo tengo 1 bomba, con lo cual ante la duda, el cliente nunca tiene la razón.

Resumiendo, que el juego está bastante bien protegido y sigue lo que para mí debe ser una de las máximas en un programa de este tipo: “nunca te fíes de lo que diga el cliente”.

Aprovecho estas líneas para felicitar al equipo de La Prisión por ese fantástico juego que espero poder disfrutar por lo menos otros 10 años más. SALUD y nos vemos entre rejas.

Un saludo a todos de Jagoba Los Arcos Gonzalez, Perikera pa los malotes xD

laprision/autoprision.txt · Última modificación: 12/07/2020 04:43 por Juanga Covas