Estaba escribiendo algo muy profundo que no se si verá la luz, cuando de una forma u otra me acordé del 10 de Febrero del 2004 - http://almlys.org/archives/7 , porqué casualmente coincide con otra cosa.
Era joven y tonto, ese día mi fuente de ocio principal iba a desaparecer, era injusto, y estaba enfadado. Por entonces tenia aproximadamente más de 1 Gigabyte de tráfico capturado realizando todas las posibles acciones que podías hacer en el maldito jueguecito. Tenia mucho tiempo entre manos, y la carrera por así decirlo me aburría. Y yo ya estaba con el ethereal (ahora wireshark) programando con la libreria pcab en Linux (quien es el guapo que procesa toda esa información a pelo).
La distribuidora apagaba los servidores el 10 de Febrero de 2004 por allá a la madrugada sino recuerdo mal.
Ya dije que era tonto, no sabia en el embrollo legal en el que me estaba metiendo (No tienen dinero para mantener un par de servidores en funcionamiento, pero si que tienen para asustar a un estúpido y tonto niñato).
Obviamente se hizo mucha ingeniería inversa durante las semanas antes. Y creo que realmente tuvimos mucha suerte para el nivel de estupidez que había en el ambiente.
El tráfico capturado obviamente estaba cifrado, no iba a ser fácil.
Ahora la criptoanálisis que se utilizó, pues fue realmente interesante.
Todo el bicho este, como cualquier aplicación similar usaba udp para la transmisión de mensajes. Una vez estaba montado el servidor de datos, que conocíamos como "data server", poníamos un Lobby que era un simple trozo de código C de un servidor UDP que vomitaba por pantalla en hexadecimal lo que recibía. En todo momento utilizaba dos ordenadores, uno de sobremesa con un Windows XP y el juego de marras, y un viejo portátil (que en paz descanse) con una Mandrake Linux!!!
(que tiempos aquellos).
Como apunte importante, el juego usaba 3 cifrados diferentes, mientras de los otros todavía no tenia ni xota de como atacarlos, me centré principalmente al mas sencillo, al del protocolo.
Bien, como me puedo enrollar para horas, explico el criptoanalisis, y si ha alguien le interesa el tema que me diga algo o que use google para buscar toda la historia completa que más o menos esta por allí en cientos de posts en un par de foros de discusión.
El criptoanalisis fue la mar de sencillo, el Linux con el servidor escuchando y vomitando los datos y por el otro lado el cliente.
El cliente para iniciar la comunicación siempre enviaba un mensaje de negocación de conexión (este no nos sirve para el critptoanalisis, aunque hay que mirar que un posible vector de ataque era la marca de tiempo que contenian estos mensajes).
Bien el siguiente mensaje era el famoso NetMsgAuthenticateHello, donde estaba el login. Debido al cifrado utilizado (que yo no lo llamaría cifrado), la cosa fue tan sencilla y estúpida como poner un par de logins diferentes y apuntar la ristra hexadecimal que vomitaba el servidor y ir comparando, hasta detectar obviamente que parte de la ristra correspondía al login, hasta que se pudo mapear uno a uno cada carácter.
De forma que descubrí, que el cifrado era una simple rotación de bits, cada byte del mensaje era rotado n bits, donde n era el resultado del la posición en el buffer módulo 8. Toma ya.
A partir de aquí pude descifrar fácilmente 1GByte de información capturada, y es cuando empiezas a ver cosas muy, muy interesantes.
Esto no fue nada, con todo el resto de trabajo de ingeniería inversa que se tubo que realizar. Recordemos que UDP no esta orientado a conexión, y no es confiable, encima de UDP teníamos que montarnos nuestra propia capa, nuestro sistema que debía permitir enviar principalmente dos tipos de mensajes, los confiables y los no confiables. De forma que se implementaba una historia similar pero muy diferente a TCP sobre UDP para poder enviar mensajes confiables (que era seguro que iban a llegar).
Ahora, como averigüé que el trasto este usaba MD5-CHAP para la autenticación, es ya otra historia.
En tercero mientras cursaba redes, con los valiosos conocimientos que adquirí pude reimplementar el núcleo teniendo en cuenta dos conceptos muy importantes, el cabal y la congestión. Y aplicar y experimentar con algunos de los algoritmos de retransmisión. (Cuando alguien me pregunta porqué no quise hacer el TFC de Sistemas, aprovechando este trabajo, le doy la razón diciéndole que era porque era estúpido, joven y tonto, y que no queria complicarme)
En total fue una experiencia muy rica, algo legalmente arriesgada, aprendí mucho y aunque por aquella época yo estaba más o menos bien, me suicidé socialmente. De forma que no os lo recomiendo. Sobretodo porqué es muy difícil, por no decir "imposible" recuperarse de un suicido social como el mio. Y en estos momentos puedo decir que sigo siendo el mismo ser asocial y amargado de siempre.
Para que conste, el código
Apunte extra: Curiosamente la 2a encarnación a la cual no participé, cerró definitivamente el pasado 10 de Abril.
Your Thoughts