He sido dev de cheats y contesto a vuestras preguntas

Soltrac

#84 El problema es q las comunicaciones van encriptadas y la clave cambia cada vez que te conectas a un servidor. Ese es el problema, desencriptar las comunicaciones. Poder es posible porque deben ser comunicaciones encriptadas en ambos sentidos, pero vamos, too much para mi. Creo que más que wireshark. Fíjate lo que he encontrado con un rato de google

https://debuglog.wordpress.com/2015/01/13/netshark-attack-vectors/

Y eso es de 2015, casi seguro que source ha cambiado.

#85 No lo conocía, le echaré un vistazo xDDDDD

#86 Depende del anticheat. Si no lo humanizas es detectable. Pero en realidad es difícil de detectar. Piensa....cada vez q disparo bajo el ratón un poquito y lo desvío un poco random hacia la derecha o izquierda. Difícil de detectar la verdad.

1 respuesta
Traber

#89 No es vendehumos, te voy a intentar explicar de manera sencilla cómo funciona ese cheat.

Para jugar, tú te conectas a un servidor de juego, ergo, estás mandando información a ese servidor. En esa información van tus pulsaciones, tu movimiento, si has disparado, a dónde estás apuntando... etc. Lo que hace esa trampa es hacer de proxy entre tú y el servidor de juego, hacer "tampering" de los paquetes que está mandando al servidor, que no es otra cosa que interceptarlos y modificarlos. Con eso, tu estás mirando 10 píxeles por encima de la cabeza del enemigo, pero el cheat "corrige" esa información y en vez de decir que estás a 10 píxeles por encima de la cabeza del enemigo lo modifica para que al servidor le llegue que tu estás apuntando a la cabeza.

No lee la RAM, no lo necesita, simplemente modifica las comunicaciones entre tú y el servidor para hacerle creer al servidor que has acertado :D.

#91 CS:GO utiliza el motor Source 1, así que no creo que haya cambiado nada xd.

1 respuesta
AikonCWD

#92 No es tan sencillo como lo pintas. La información (los paquetes) van cifrados. No puedes hacer MITM ahí y leer los datos a lo loco. Es mucho más complejo.

1 respuesta
Hipnos

Yo tengo varias preguntas. A mí lo que me mola es el tema de los bots.

Sobre lo que comentas de bots de poker: Yo pensaba que un bot de Póker actuaba igual que un humano, en plan, haces reconocimiento de imagen de lo que estás viendo, y luego simulas clicks. Pero por lo que veo, tu accedes directamente a la memoria del cliente y ahí vas cambiando lo que quieres, ¿es correcto?

Me molaría mucho hacer bots capaces de utilizar tensorflow/deep learning, capaces de reconocer cosas y ejercitarlos en problemas sencillos de clasificación. Por ejemplo: un bot que aprenda de mis likes en Tinder, y que sea capaz de analizar mis preferencias y hacer like por mi con una tasa de acierto alta.

¿Qué tecnología usarías para eso? ¿Qué me recomendaría si quisiera empezar a hacer bots de propósito general, no para cheats? Estoy pensando en aplicaciones de trading, problemas de clasificación de andar por casa, etc.

Gracias por tus respuestas y buen hilo.

2 respuestas
PaCoX

xd yo esk me parto.

#89
1-Para hacer mitm de una conexión cifrada tienes que conocer la key de la encriptación, dudo mucho que sea posible conseguir esa key de un servidor oficial = vendehumo

alexhdez
  • Tus bots de poner han sido ganadores? En qué modalidad los has probado? Que stakes?

  • En que has basado la IA del bot de póker? En un juego óptimo y mecánico o en algún programa tracker tipo Holdem Manager?

1 respuesta
Nors3

#76 Últimamente me divierto haciendo casos de overwatch y la mayoría acaban baneados (se puede saber la cuenta del caso), no tardo ni 2 minutos y me resulta bastante fácil de detectar. Las skins con VAC son una delicia verlas xD

Como he puesto antes, la gente está continuamente llorando a Valve porque no desarrolla un VAC más fuerte o intrusivo pero si lo hace sería a costa de una compañía como Steam/Valve tuviera acceso interno (como lectura) a una burrada de dispositivos. Perderían cuota de mercado porque espantarían a la gente y les obligaría a reforzar su seguridad una bestialidad en caso de un ataque. Al final toman la decisión más fácil y es hacer oleadas de baneos cada cierto tiempo (muchas cuentas ahora mismo ya estarán marcadas para su baneo), aparte llevan trabajando un tiempo en una IA para el VAC (no solo para casos de vertigo boosting).

1 respuesta
AikonCWD

#94 El tema de bots se va un poco por las ramas...

No conozco como funcionan los bots de poker, pero no se hacen con reconocimiento de imagen. Lo fácil es acceder a la memoria, buscar el offset donde se almacena tu baraja y "leer" las cartas que tienes. Luego se aplica una técnica llamada call ingame functions, que permite ejecutar funciones de un proceso externo que no exporta funciona. Es algo complejo de explicar, pero digamos que el cheater es capaz de ejecutar las funciones de un juego a su antojo.

Los bots más tipicos se consiguen hookeando el teclado y el ratón, para luego mandar pulsaciones de teclas; automatizando tareas o acciones. Imagina lo siguiente:

  • Cheat lee la memoria del juego
  • Detecta la variable en RAM donde se almacena tu vida
  • Se cmoprueba dicha variable, siempre ha de ser mayor que 100
  • Si baja de 100, se lanza un hook al teclado
  • Se manda la pulsación de la tecla T (que sirve para beber una poción de vida)
  • Bot terminado.

Con ese sencillo código, tienes un cheat/bot que bebe pociones cuando tengas la vida baja. Se hicieron MUY populares con el Lineage y el MUonline.

B

Un aimbot humanizado que envía movimientos de ratón no lo detecta nada.

2 respuestas
Soltrac

#94 Mi bot de poker era por detección de pixel y simulación de ratón y clicks. De todas formas, tu pregunta es más encaminada a la IA. Mi IA era muy básica, nada de machine learning ni historias. Del tipo, si el jugador es loose y tú tienes una mano fuerte juega esto....es una IA muy limitada y fácilmente explotable. Para aplicaciones de trading he hecho lo mismo, bot por decisiones y no funcionan, al menos no en mi caso, pierden dinero.

En tu caso, creo que tienes q aprender inteligencia artifical a tope. Luego, leas pixels o memoria ya te da igual. En el caso de los cheats, tienes q acceder a memoria porque acceder a píxeles es muy lento, pero en ciertos casos te da exactamente igual.

#96 No era ganador, por eso lo abandoné. En este caso jugaba en stakes bajos y con estrategias típicas de educapoker usando Holdem Manager para estadísticas. Encima lo usaba antes de que se limitara a jugar con jugadores españoles. Usaba iPoker porque Pokerstars es como el ESEA de las casas de poker, muy intrusivo, que incluso se pueden conectar a tu pc y tomar el control.

#97 Overwatch banea, para eso está hecho. Creo que es fácil detectar si alguien está haciendo trampas viendo sus demos. Pero hay que reconocer que hay casos complicados de detectar.

#99 Como tú dices, humanizar es clave. Pero aún así, cuando el jugador cheater llega a ciertos niveles tiende a deshumanizar más y cantas más. Cuanto más reportes tenga, más posibilidades tiene de que un humano revise sus demos y más posibilidades tiene de ser pillado.

3 respuestas
Hipnos

#100 ¿Recomendaciones de literatura/webs?

1 1 respuesta
AikonCWD

#99 Claro que lo detectas. Imagina un anticheat que monitorice el movimiento de tu ratón (o sus click) y salte el flag si detecta que el puntero se mueve y el ratón no... o que detecte si disparas y el botón del ratón no está down... DETECTADO

1 respuesta
Pezpala

#1 ¿Como ves el tema de usar cheats por jugadores profesionales? ¿Hasta que punto es facil desarrallorar cheats a ese nivel? ¿Hay mucha mierda dentro de la escena pro del gaming?

En el CSGO han saltado varios casos de jugadores porfesionales que les han pillado con las manos en la masa. Me da pena que esto ocurra a nivel usuario pero que un profesional de un juego pueda cargarse en una lan importante y ganar el campeonato es de coña. La gente hablaba en su día del workshop de steam o del software del ratón como herramientas para colarlos...

1 3 respuestas
nevad0

#103 básicamente a esto me refería yo. Me uno a la pregunta

AikonCWD
#103Pezpala:

Me da pena que esto ocurra a nivel usuario pero que un profesional de un juego pueda cargarse en una lan importante y ganar el campeonato es de coña.

Pero si en el mundo de los deportes, muchos profesionales se dopan y hacen trampas/cheats... que te hace pensar que en los e-sports no lo harán? lol

1 respuesta
Ozonoo4

#65 te lanzo a ti mi pregunta en #58

1 respuesta
Wasd

#1 Muy interesante el thread, gracias por ofrecerte.

A mi me surge una duda. Te iba a preguntar directamente pero he visto que #18 te ha hecho una pregunta relacionada. Te soy sincero, aún no me he leído el hilo entero asi que si ya lo has respondido antes mandame a tomar viento y ya llegaré :P

Por qué no se encripta la información en la memoria?

Si cada vez que te logueas el servidor te devuelve una clave pública que va cambiando y la instalación del juego contiene una clave privada, ¿el juego podría almacenar datos enriptados en la memoria del SO y desencriptarla con su algoritmo?

Por ejemplo, si la posicion XYZ es 20, 7202 y 500, se le podría aplicar una operación matemática en base a ese par de claves para que codificase esa información, no? En vez de esas cifras (20, 7202 y 500) podría ser algo como 73sg0X, 77wAR2 y K7vvAW. Inlcuso aunque estuviese limitado a integers, se podría hacer una enriptación que se ajustase a ese tipo de dato y su desencriptación desde el proceso del juego.

Imagino que si no se hace ya es porque no se puede, pero mi duda es qué es lo que impide hacerlo. Entiendo que quien escribe y quien interpreta la memoria del SO es el código del juego, con lo este tiene el control de interpretar lo que escribe. Entiendo también que ningún cheat tanto externo como intero sería capaz de desencriptar esa información, al menos no sin primero desofuscar el código del juego y extraer la clave privada (que podría cambiar en cada update/parche), y a parte de eso el cheat tendría que saber caputar la clave pública devuelta por el servidor en cada logueo y adaptar su algoritmo de desencriptación al par de claves.

Disculpa si no me explico muy bien xD

#65 te añado a la duda, si me respondéis ambos mejor :P

Edit: Imagino que con engines abiertos la cosa es complicada porque el engine tendrá su modo de escribir en la memoria, y para el engine 1 == 1 y Z == Z, pero un engine hecho a medida podría hacer esa conversión de datos antes de escribir la información en la memoria y despues de extreaerla, de forma que para mi engine, 1 == 1 pero tambien 1 == 3zX9o0w (resultado generado tras generar a su vez un algoritmo a partir de ambas claves). Puf menuda paja mental.

3 respuestas
B

Yo para botear usaba un programa que no diré que simulaba el movimiento del ratón, donde indicabas la coordenada estipulaba y enviabas el ratón allí, ejecutabas la función o funciones de click izq o click dch y ya según lo que quisieras hacer. Si no te lo currabas, lo enviabas a la misma coordenada siempre. Entonces hacías un mapa de coordenadas que era un rectángulo o un circulo y creabas un random entre esas coordenadas, para que nunca pulsases sobre el mismo sitio.

Luego para otro, un detector de colores. Marcabas los colores a buscar en la pantalla del juego y ya con ello captabas a donde mover el cursor para hacer las acciones. En especial tenía uno que era el Rojo fuerte. Si aparecía en la pantalla de chat, activaba la función "Huida".

He de decir que esto era incluso más divertido que jugar, ya que tenías que tener en cuenta una multitud de variables. Pero era para juegos pausados o con un ritmo de acción lento. No podría hacer un bot para jugar a un juego como el LoL o el wow.

1 respuesta
AikonCWD

#106 x22 no les conozco personalmente, pero son un grupo de devs. Igual que MrAntiFun y similares, de ahí la capacidad de abarcar casi a day0 la mayoría de juegos. Esos grupos solo buscan rentabilidad, yo estoy muy lejos de esa scene.

Traber

#93 Lo se, pero si existen esos vídeos con las pruebas de concepto es que se puede hacer. De hecho, posiblemente ese cheat sea intermediario, de manera que establece una conexión bidireccional en la que el cheat se conecta al servidor, y el jugador al servidor del cheat (o cheat mediante), de manera que el cheat sea el que tenga conexión directa con el servidor (de ahí que habiendo hecho los intercambios previos de clave tenga acceso al contenido de los paquetes :D).

Es lo que se me ocurre, pero a saber cómo lo tiene implementado... Como no tengo acceso ni al programa ni al código fuente, no sabría decir con certeza, pero imposible no es.

AikonCWD
#107Wasd:

Por qué no se encripta la información en la memoria?

Es muy fácil... Todo juego/programa, en algún momento tendrá que leer los datos en formato "claro". Da igual que el servidor te mande la posición del enemigo en una string fragmentada, con triple encriptacion de llave publica/privada, con un sistema de tokens, certificados u otra mierda que te puedas imaginas.... Cuando ese paquete "encriptado"" llegue a tu PC, el juego lo tendrá que desencriptar, para leer el valor "claro" y posicionar el modelo del jugador enemigo en la pantalla.

Es en ese preciso momento que el cheat mete el hook (gancho) lee los datos "claros" d ela posición y los trabaja a su antojo (dibujando un pixel en la pantalla, por ejemplo).

edit: El cheat solo tiene que posicionarse en la salida de la función de desencriptar del juego. En plan gitano, capturar los datos y a volar.

1 respuesta
B

#107 Como programador te respondo, estarías metiendo demasiados pasos intermedios para ejecutar una acción.

Encriptar posición > recibir posición > desencriptar posición > calcular datos de posición actual y futura > Cálculos de daño, heridas, acciones, etc...> encriptar posición > enviar posición encriptada a cliente > cliente desencripta su información para su reconocimiento > realiza sus acciones > vuelta a encriptar para enviar los datos al servidor.

En un juego de ritmo pausado puedes hacerlo si no te baja mucho el rendimiento. En un FPS, RTS o juegos que se miran por milesimas de segundo. Cada ejecución que se realice es tiempo invertido, perdida de rendimiento y fallos en los cálculos o en interacción entre medios.

1 1 respuesta
Wasd

#111 Pero no puede leerlos en formato "sucio" y limpiarlos dentro de su propia lógica? Yo programo en lenguajes de alto nivel y nunca he tenido que escribir directamente en la memoria, asi que no descarto estar preguntando estupideces...

#112 Si, eso lo he pensado (tambien soy programador), pero imagino que la capacidad de procesar eso dependerá de la máquina que se utilice. No hablo de meterle una Proof of Work a cada cálculo, sino aplicar el cálculo a cada dato de entrada y salida de la memoria.

Por ejemplo en Unity entiendo que no se puede porque al final este engine te pide un Vector3 con integers. No queda otra, un cheat te lo sabrá leer si o si. Pero si hago mi propia implementación y me encargo de que la encriptación/desencriptación sea rápida, no veo tanto problema.

De nuevo, ni idea xD.

1 respuesta
AikonCWD

#113 Claro que puedes... pero para que te vas a molestar en leer el dato encriptado y crear una función de desencriptación? Si puedes sencillamente leer el dato en "claro"?

La gracia de hacer lo segundo (lo óptimo) es la habilidad que tenga el cheater en diseccionar el juego y lograr encontrar la "salida" de la función que desencripta esos datos y poder capturarlos. Luego montar el cheat es pan comido. Lo complicado es lo primero.

Si veo que hay interés, puedo abrir streaming y os enseño un caso practico, con algun juego singleplayer para no andar haciendo ilegalidades.

7 2 respuestas
Wasd

#114 A eso me refiero. Si al cheater le das datos sucios, que encima el algoritmo de encriptación va cambiando en cada logueo (clave publica) o parche/update (clave privada), directamente se lo estás poniendo imposible al cheater no? A lo mejor a base de fuerza bruta te consigue sacar el algoritmo de enriptación/descenriptación, pero poco despues el algoritmo será distinto y tendrás que empezar la fuerza bruta desde cero.

1 respuesta
AikonCWD

Mira, sin ir más lejos, hace tiempo hice un "juego" falso, con todas las variables encriptadas: http://forum.cheatengine.org/viewtopic.php?t=577886

Hasta creé un anticheat casero

La idea fue retar a los usuarios a ver si eran capaz de escribir un cheat para ese juego. Solo 2 lo consiguieron. Lo que indica que la encriptación de memoria no supone ninguna defensa real, solo añade una capa de dificultad, que con tiempo, se termina saltando.

#115 No necesitas leer datos encriptados. Simplemente leer los datos en el momento que se vayan a utilizar/desencriptar por el propio juego

7 1 respuesta
kNG17

#114 manitas a este señor

B

En algún momento vas a tener que hacer HP = 5 - 2; Y ahí es cuando va a entrar el cheater a trastocar el resultado.

1
Pezpala

#105 He dicho que me da pena y que me parece de coña que dentro de una Lan importante la gente pueda ponerse mierda tan fácilmente. En el tour la gente se dopa pero no va a correr la etapa en moto.

1 respuesta
AikonCWD

#119 Pues es lo mismo eh? La moto sería un aimbot/wh y eso no lo llevan en una LAN. Pero en cambio si se pueden dopar un poco, no? por ejemplo un esp de audio en los cascos, etc...

1 respuesta