lunes, 3 de agosto de 2009

Protocolo del sXe injected.

Protocolo sXe Injected

Bueno despues de pensarlo bien decidimos hacer publico el protocolo de sXe Injected, podeis crear vuestros propios emuladores o para la gente que quiera hacer una implementacion para sistemas operativos oficialmente no soportados (linux,sistemas de 64 bits y todo aquel SO donde cs pueda ser ejecutado).

Protocolo base: Esta es la forma que el cliente se comunica con el servidor y se verifica que tengas el sXe injected y la version requerida en el servidor.

Lo primero es hookear el mensaje de usuario “sXe-I”, este mensaje de usuario consta de un char que es la version (actualmente seria 7.8 lo que nos enviaria el servidor) y una variale de tipo DWORD (time_t), yo personalmente tengo un struct para manejar todo esto, ya es cosa de cada cual adaptarlo a su manera. Esta ultima variable es lo que hace que el hash de validacion sea dinamico y no sea siempre el mismo.

Ahora que ya sabemos que es lo que se nos envia, tenemos que ver que hacemos con estos datos. Tenemos que montar una cadena exactamente de este estilo:

sprintf(tmp,"%s%s.%s.%s.%s.%d",rep.version,t2,t,t4,t3,rep.num);

siendo rep.version la version que nos envia el servidor, t2,t,t4 y t3 son las partes de la direccion ip del servidor ordenadas de esta forma:

si la ip fuese 10.11.12.13 nos quedaria de esta forma: 11.10.13.12.

y rep.num es la una variable del tipo DWORD (time_t) que como mencionamos antes es variable siempre (mirar la funcion time).

De este modo y con la ip ficticia nos quedaria la cadena de esta forma:

7.811.10.13.12.DATOS-VARIABLES

Solos nos queda sacar el hash md5 de la cadena y mandarle la respuesta al servidor de esta forma:

[sXe-I-Reply] %s CLEAN 32 , siendo %s el hash md5 anterior. De esta forma el servidor nos toma como un cliente que realmente esta usando sXe injected y con 32 bits.

En la nueva version se implemento un protocolo aparte, que es la validacion por Hwid. Un pequeño consejo….. no useis algoritmos publicos porque nada mas ver el desensamblado se pudo determinar “al vuelo” que usabais RC4, ese bucle incial…. Es muy cantarin.

Bueno al lio, el mensaje de usuario que nos interesa en esta ocasión es “sXe-I-H”, y solo nos llegaran otra vez datos del tipo DWORD (time_t) “aleatorios”. Esta vez la cadena a montar es esta:

sprintf(Buffer,"%dSTART%dTREK",Time,Time);

esta cadena es usada como clave para la encriptacion RC4 del HWID, para asi poder enviarsela al servidor de esta forma:

[sXe-I-H-Reply] 22EB32BD43BC70536B9828E0220E98E8B0647DC9CA2FC870C785276FD6A5D17320873D

Este HWID es falso, ya que siempre uso HWIDS falsos. ¿de donde sale esta cadena? Es el resultado de la encriptacion RC4 del HWID pasada a hexadecimal, supongo que por confundir o por comodidad a la hora de manejarla mediante comandos. Lo que mas llama la atencion despues de observar un par de veces la cadena que generaba el sXe injected es que siempre empezaba por 0x22…. Tiremos del hilo.

Un HWID sin encriptar:

1059-54A8-2B01-341D-76C8-845B-7435 = 34 caracteres

Un HWID encriptada:

22EB32BD43BC70536B9828E0220E98E8B0647DC9CA2FC870C785276FD6A5D17320873D = 70 caracteres.

Ummmmmmm que cosas, 70 de longitud y 24 la otra 70 / 2 = 35…. Joder que casualidad, 34 sin encriptar y encriptada me da 35… y hay un carácter fijo, descontemos ese 22 y tenemos exactamente esto: 70 /2 -1 = 34 demasiada casualidad es todo esto. pero mas aun si pasamos el 34 a hexadecimal…. Veamos 34 decimal 0x22 en hexadecimal. Esta mas que claro lo que es ese 22 inicial, no es mas que la longitud del HWID sin encriptar.

Una vez tenemos esto claro nos queda bien poco, en mi caso uso un fichero de texto para cargar HWIDS falsos, montar la clave de la forma que mostramos antes , encriptar el HWID y enviarlo al servidor cuando nos lo pida. Bueno pues ya llegadoa a este punto nos queda enviar este reply al servidor:

[sXe-I-H-Reply] 22EB32BD43BC70536B9828E0220E98E8B0647DC9CA2FC870C785276FD6A5D17320873D

Con esto nos validamos como usuarios de sXe injected y encima enviamos datos falsos para que no puedan banearnos, ya tenemos nuestro propio cliente para sXe injected 100% funcional, valido para cualquier sistema y con la seguridad de no ser baneados localmente por el anticheat.

Fue divertido revertir completamente el anticheat, publico esto sin codigo fuente por evitar la oleada de chetos en todos los servidores, esto es todo con fines educativos y para que el que entienda pueda portar sXe injected a su sitema favorito.

Si alguien esta interesado en portar el anticheat y le quedan dudas puede ponerse en contacto conmigo atraves de sicheats y sin problemas hablamos sobre el tema.

Ahora unas lineas para mis queridos frikis, topos y insectos varios que pululan por la red. Los topos ya les he tomado cariño, y la verdad entiendo que gente que quiera jugar sin cheats hagan según que cosas para evitarlos….. esta gente no tengo mayor problemas con ellos y poco mas tengo que decir de ellas…. A excepcion de WEILAND este moderador psicopata que me banea todas las cuentas cuando me comporto correctamente en sus foros.

Los que realmente me dan asco son los que formaron parte del staff de sicheats para sacar tajada de ello, no voy a nombrarlos porque todos sabemos quien son. ¿solo queriais cheats? Jaja que pena dais, pues no teniais cheats no frikis. Ahora a alguno de vosotros piensa que soys necesarios para algo … de cara a los cheats ¿alguna vez me ayudasteis en algo? Porque todas las sesiones que me he pegado de ollydbg y herramientas varias nunca vi a ninguno de vosotros ¿aun pensais que soys necesarios para sacar cheats? Jajajaja. Con esto no me retiro de los cheats, pero si paso pagina, y cuando sXe injected cambie o actualice el protocolo volvere a revertirlo pero ya como diversion que es lo que siempre he buscado. ¿Qué mas deciros? Poco mas, disfrutar de los cheats publicos (esos que sacais vosotros ¿Cuándo?) que sicheats continua trabajando duro como siempre.

Saludos Cocodrilo, www.sicheats.com

miércoles, 1 de julio de 2009

Anti Anti Wallhack para sXe 7.8

Una de las novedades de este anticheat es el anti wallhack, de este modo aun pasando las protecciones del anticheat un wallhack no seria efectivo y no mostraria los jugadores detras de las paredes.

La verdad que el metodo no es nuevo, pero no vamos a quitarle merito y hay que reconocer que es efectivo ante wallhacks comunes. la proteccion esta en la parte cliente (en nuestro pc) y eso no es una cosa que me agrade mucho ya que se puede hacer lo mismo desde la parte servidor, pero eso ya son opiniones personales.

Desactivando esta proteccion:

hay que darle un vistazo a la funcion GetEntityByIndex del engine del juego:

01D0ECC0    8D4424 04       LEA EAX,DWORD PTR SS:[ESP+4]
01D0ECC4 50 PUSH EAX
01D0ECC5 FF15 CCD4EC01 CALL DWORD PTR DS:[1ECD4CC] ; hl.01D63580
01D0ECCB 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8]
.....
.......

de la direccion 01D0ECC5 nos interesa el puntero 1ECD4CC. de esta forma devolveremos un index invalido y el sXe no escondera ningun jugador.

Código:
miPtr=(DWORD*)0x1ECD4CC; //puntero hardcodeado en GetEntityByIndex
*miPtr=(DWORD)ActivaWH; //apuntamos a nuestra funcion
Código:
void __fastcall ActivaWH()
{
__asm {
mov dword ptr [eax],0 //retornamos un index invalido
retn
}
}
y con esto ya esta el anti wallhack anulado. espero que a alguien le ayude.

domingo, 7 de junio de 2009

Cheat sXe 7.8 Disponible

La ultima actualizacion de este anticheat fue el 04/06/2009 y del mismo modo el cheat fue actualizado en esas fechas.

Este cheat es de uso privado, toda la informacion de como comprarlo la puedes encontrar en http://www.sicheats.com.

Caracteristicas:

ESP.

WallHack.

Aimbot.

SpeedHack.

AntiBan (se salta el ban por hardware que pone el anticheat).

y mucho mas.

Iniciando

Bueno, despues de un tiempo publicando cheats y similares me a dado la locura de hacer un blog para ir poniendo manuales/codigos relacionados con el mundillo de los cheats y seguridad en software que es lo que mas llama mi atencion.

Un saludo.