Streaming didáctico: Trucando juegos (cheats)

nerkaid

#180 Dice API de CS:GO, no del teclado...

vincen

#180 Pero lo que me interesa es que hace SteelSeries, lee la memoria? Usa una API que pagan a los juegos? El juego permite que X proceso lea la memoria sin que salte el anticheat? Quiero saber eso xD

1 respuesta
AikonCWD

#174 Me alegra leer eso!
#175 Con cheat engine seguramente no, deberás instalar un programa tipo "cheat engine" para android, y ejecutarlo en tu smartphone/bluestacks. De todas formas, si el juego es multiplayer y esas variables están en el servidor, no podrás hacer "cheats" modificando o inyectando memoria; deberás usar otros métodos como el packet-sniffing, MITM y DNS-poison. De esas cosas no se hablarán en el stream.

#176 -> #136

#179 Por poder, puedes... todo dependerá de lo agresivo que sea el anticheat de turno... Un anticheat no deja de ser un programa, y como cualquier programa, éste podrá hacer unas cosas u otras... Me explico; es posible que un anticheat te banee sencillamente por encontrar el proceso de cheatengine.exe ejecutando en tu PC (aunque ni lo uses!), también podría banearte si el anticheat se pone a listar tus programas instalados y detecta que tienes el cheatengine instalado (aunque no esté ni en ejecución!).

Con estos ejemplos quiero decir que, un anticheat podrá banearte cuando el propio anticheat así lo crea oportuno. En juegos de Valve, a día de hoy, no hay ningún problema si leemos "su memoria" desde una aplicación externa. Es decir, no hay riesgo alguno si invocamos la API ReadProcessMemory() que es la que utiliza CheatEngine para leer los bytes de un programa/juego ajeno. En cambio, si modifico la memoria o inyecto código (API WriteProcessMemory()) es más que probable que el anticheat me meta el ban.

Como bien dices, hay teclados que leen la memoria del CS y te muestran el arma o las balas en la pantalla LCD o cambian de color en función de la vida. En el momento que veas eso sabrás que ese juego no tiene ningún inconveniente "en ser leído". Pero la mayoría de esos juegos online sí tendrán inconveniente si intentas modificarlos desde fuera.

1 respuesta
bnvl

Interesantísimo el stream de ayer, con ganas del siguiente!

bLaKnI

#183 Bua, genial nen!
Acabo de temrinar el 1.1
No tengo mas tiempo y en casa me espera la family. Muy muy muy bien nano. A ver si mañana por la mañana con calma me como el 1.2.
No habiendolo visto y por lo tanto no sabiendo si se resuelve, se me vienen a la cabeza 2 cosas/dudas:

1) Momento en el que para contemplar un patron AoB previo, sumas "+3" al aobscanmodule INJECT. Sigue sin quedar claro el porque sumando, accedes al previo. Y no restando, como te han preguntado. La idea de ir a buscar mas patrón negativo, la veo clara, pero que lo hagas sumando, no. De hecho, en la descripción de los BYTES, yo hubiera escrito hardcoded los bytes previos y posteriores a la cadena para hacerla única, es decir, en la propia definición como argumento de función. No sumando +3 a la referencia de memoria... ¿Puedes darle una vuelta de tuerca mas a eso please?

2) Los registros en ASM son limitados en numero. Normalmente y por convención unos se usan para X y otros para Y. Me resulta extraño que el EBX se haya usado exclusivamente para las estructuras de PLAYER como tal. Normalmente los saltos operandos en un registro (p.e: [EBX+50]), sirven para esclarecer ya no solo un posicionamiento consecutivo en una supuesta STRUCT, como en este juego, sino que partiendo de una posición dinámica no conocida (EBX como tal), te posicionas en el rango del registro en el que debe estar una información determinada... Es decir, en EBX, podria haber habido una estructura de PLAYER y además, otras muchas mas estructuras dentro de este mismo EBX, no? Lo digo porque ha dado la casualidad de que la struct player arrancaba en EBX pelado, y el +50 era la VIDA. Pero si dentro hubiera habido una struct ESPADA también, ademas de la de PLAYER, por ejemplo, podría haber arrancado en +400, y en +430 tener el stat basico de ATTACK = 10, como base... ¿no?

Cuesta preguntar a la par que cuesta explicarse... jajajaja!

1 respuesta
AikonCWD

#182 Muchas compañías dejan que programas ajenos lean e incluso escriban en su memoria. Por ejemplo habrás visto como FRAPS es capaz de "pintar" los fps en la pantalla del juego, no? Pues eso se hace inyectando código... hubo hace tiempo, un juego cuyo anticheat era tan robusto que metió un ban massivo a todos los usuarios que usaron FRAPS para ver los fps, ya que lo detectó como cheat xD.

En la vida real, normalmente las compañías de anticheats dejan o permiten que ciertos procesos lean/escriban, como FRAPS o el overlay del propio Discord. Otras compañías de anticheats generan un certificado digital que otorgan a terceros para validarlos como procesos de confianza y no banearlos cuando usen esas APIS tan peligrosas. Métodos hay muchos, y para ello necesitas conocer muy a fondo a tu víctima para saber hasta que punto puedes meter mano sin hacer saltar el anticheat.

2 respuestas
nerkaid

#186 Pero es decir, cuando usas FRAPS ¿el que parsea/renderiza el contador de fps es el engine del juego y no un overlay de FRAPS?

2 respuestas
bLaKnI

#187 Se usan funciones OPENGL basicas, invocandolas via API directamente o por injection, díria, ya que desde el FRAPS, puedes configurar el aspecto de este render. Y este común para todos los juegos.

1 respuesta
AikonCWD

#185 Voy a buscar ahora, que tengo tiempo, un ejemplo de AoB que no sea único y deba tunear con un "+3", así quedará clara esa parte de la explicación, ok? Es cierto que explicarlo ayer de voz sin un ejemplo conlleva a duda. En el proximo video te lo resuelvo, don't worry! A tu segunda pregunta... no te termino de pillar, puedes plantearme la segunda duda de nuevo con otro ejemplo?

#187 FRAPS coge el proceso del juego, busca el render 3D usado en el juego (DirectX u OpenGL), una vez lo tiene, mete un hook a la función de turno (glfwGetTime para opengl y GetFps para directX), cuenta los frames y luego usando un overlay, pinta el número de frames en una esquina. Bien, pues lo que comenté, hace tiempo, un anticheat se puso nervioso y baneó cualquier hook a su juego, baneando a miles de jugadores con fraps xd, fue gracioso y el ban fue revocado a las pocas horas.

1 respuesta
nerkaid

#188 ¿Y en los juegos DirectX ? No sé, me suena todo un poco raro, por eso yo entendía que era el FRAPS el que de alguna forma pintaba en un overlay propio los FPS y no el propio motor del juego.

#189 Qué fuerte, pues no tenía ni idea, siempre se aprende algo nuevo!

vincen

#186 Pensaba que esos programas que nombras dibujaban en una capa superior de dx3 a la del juego y no tocaban nada del juego.

Osea que si yo que no soy empresa ni nada quiero hacer una app inofensiva que me diga la vida que tengo representada en % en lugar de números (xD), primero tendría que saber si X juego permite leer toda la memoria?
O esto pueden dividirlo por partes? Puedes leer esto, pero aquello no que te meto ban.

Y para saber esto, tocaría preguntar a la desarrolladora y si esta no da la info, tocaría soltar billetes y probar a ver si se recibe un ban?

1 respuesta
AikonCWD

#191 Sí sí, FRAPS dibuja en una capa superior (overlay) y no en el propio juego. El tema es que tuvo que meter un hook a una función del juego y eso a los anticheats no les hace mucha gracia. A tu pregunta, si el juego es online y lleva anticheat (esa info la encontrarás en internet) deberás informarte si hay algún problema en "leer" (diría que el 99% de juegos no se quejan al ser "leídos"). Pero lo correcto es hablarlo con la desarrolladora.

1 1 respuesta
BeTiS

Acabo de ver el segundo video. Eres un crack macho :qq:

Me parece perfecto que dejes un día de descanso para aquellos que no pudimos acabar de ver las dos retransmisiones, o para aquellos que quieran experimentar un poco con el programilla.
Nos vemos el próximo día que retransmitas!!!

B

#1 he empezado a verlo y la verdad que está explicado para dummies 10/10

Pd: Quizás el chat de la derecha con el fondo transaparente sobre, el de la izquierda no molesta, pero el del fondo transparente no aporta nada teniendo ya el de la izq y a veces estorba.

2 respuestas
telemaco103

#194 A mitad del primer stream o así lo quitó

1
Diward

Te he puesto a 1.25x porque quiero verme los dos videos para poder verte en vivo mañana :DDD

1 respuesta
AikonCWD

#194 Exacto, el chat lo puse en un principio para la gente que estaba en el stream sin el PC (sin el chat lateral), pero finalmente decidí quitarlo. Si alguien pregunta algo interesante en el chat lo termino leyendo en voz alta y listos. Gracias por el apunte de todas formas
#196 Yo hago justamente eso cuando veo algún tuto en youtube, velocidad x1.5 o incluso x2.0

1 respuesta
Diward

#197 Tengo 3 dudas. Aún no me he acabado el segundo vídeo, pero me quiero ir a dormir y no me puedo ir sin preguntarlas xD

1.- Cuando haces

globalalloc

la memoria se reserva en el heap?

2.- En el mismo globalalloc, si la estructura ocupa más de 4 bytes, no es arriesgado reservar solo 4 y ir rellenando offsets de esta? No podrías estar reescrbiendo memoria en uso?

3.- Cuando haces

mov [sPlayer],ebx

estas haciendo:
ebx -> base de la estructura
sPlayer -> ebx // sPlayer -> base de estructura // sPlayer -> lo que haya en la base de la estructura?

1 respuesta
AikonCWD

#198 Sin problemas.

  1. globalalloc no existe en ensamblador, es una función inventada por cheatengine. Lo que hace dicha función es reservar un pequeño trozo de tu memoria RAM y le asigna un alias para poder ser usado dentro de la tabla. No se almacena en el heap, CE se va a una zona sin usar de la RAM y reserva X bytes. Ningún otro proceso escribirá por error en esa zona reservada por el globalalloc de CheatEngine.

  2. Nos da igual cuanto ocupa la estructura, la zona reservada por globalalloc solo la necesitamos para almacenar la dirección de memoria donde se aloja la estructura del PLAYER (no usamos sPlayer para almacenar tooooda la estructura del PLAYER). sPlayer la definimos de 4 bytes porque en esos 4 bytes voy a guardar un número entre el 0x00000000 y el 0xFFFFFFFF. Si el juego es de 64 bits, las direcciones de memoria RAM aumentan (de 4 a 8). En ese caso haría globalalloc(sPlayer,8) para poder almacenar en su interior la dirección de memoria que me interesa (que al estar en 64bits, tendrá el formato 0x????????????????)

  3. Exacto, ese MOV copia el valor del registro EBX en el interior de sPlayer, mira mi ejemplo:

Al hacer globalalloc(sPlayer,4), CheatEngine ha reservado la zona de mi RAM 14270000 (verás en la zona inferior, que el resto de esa RAM está a 0, nadie la usa y por ello no hay riesgo de que nadie me la machaque). Tras hacer el mov [sPlayer],ebx lo que ocurre es que el interior de 14270000 se rellena con el valor de EBX (1AEF8A70 en mi caso).

Finalmente, desde CheatEngine puedo usar sPlayer como un puntero que está apuntando a 1AEF8A70 (el inicio de la estructura del player). Se entiende?

WoRMs

#192 volviendo al tema del FRAPS hace poco salio una noticia que el anticheat de blizzard empezo a banear a gente con el overlay del discord (entre otras apps) en el destiny 2. Al final no se como quedó la cosa pero supongo que es lo mismo que comentas con el FRAPS aunqeu se me hace raro que a dia de hoy esto una compañia tan tocha no lo tenga en cuenta.

PD: buen streaming el de ayer!

AikonCWD

Buenos días!!

Aviso a navegantes, hoy haré streaming a partir de las 19h! Espero que hayáis tenido tiempo de re-visionar los 2 primeros vídeos ayer para poder asistir al directo de hoy! Intentaré estar más pendiente del chat. Si alguien ha tenido dudas con algo de lo explicado, que me lo diga y aprovechamos los primeros minutos del directo para comentar las dudas y resolverlas en vivo!

Haré igualmente un recordatorio de globalalloc, memoria/punteros, AoB-Scan y el Teleport-Hack

5 1 respuesta
RobiiVk

#201 No se si te lo han preguntado ya pero esta permitido hacer stream de lo que haces en twitch?

edit. Solo pregunto, no te voy a denunciar ni nada hahahaha

1 respuesta
AikonCWD

#202 Sinceramente no lo se. Lo que sí estoy seguro es que no estoy haciendo trampas sobre juegos online, no estoy fastidiando a ningún jugador, no estoy pirateando software ni crackeando software comercial. Además, todo lo que enseño no se puede aplicar para juegos online, aunque un viewer quisiera aplicar de forma malvada lo aprendido en un CSGO, LOL, PUBG, verá que nada de lo explicado en el stream sirve para esos juegos.

Así que, creo que twitch no debería molestarse por ello. Pero sinceramente no estoy seguro, y me la pela si mi canal termina baneado xddd

2 1 respuesta
Oboro

#203 Si te tiran de twitch montate un adobe connect/webinar y a tomar por culo, que encima es infinitamente superior, luego lo subes a YT y pistaza

1 respuesta
AikonCWD

#204 Si, lo tengo pensado. O directamente hacer streaming en Youtube, desde el propio OBS puedo mandar el stream a YT con un click, y encima se me quedará el video subido a YT en el mismo segundo.

He usado twitch porque es la plataforma estrella de streaming, nada más.

1 1 respuesta
B

https://www.gdt.guardiacivil.es/webgdt/pinformar.php

BeTiS

#205 Creo que la opción de retransmitir por Youtube es la mejor para todos.

Si no ando equivocado, mediante las retransmisiones de Youtube te permite empezar a ver la retransmisión desde el principio aunque esta lleve media hora de retransmisión. Por lo que si alguien llega a las 8 directamente puede ver el vídeo y no tiene que esperar a que acabes la retransmisión y lo subas a Youtube.

De este modo no se nos acumulan los vídeos, y si dejas un día de descanso permite hacer algunos pinitos con el programa.

1
Korso

Pues yo lo veo bien en Twitch. Es lo más usado en cuanto a streaming, tiene su propia categoría para development y permite llegar a más gente que no tiene nada que ver con Mediavida al cruzarse con ello.

6
PatatAtomica

Me quedo por aquí para verlo mas tarde.

1 respuesta
AikonCWD

#209 Si no viste nada del primer día, todavía tienes tiempo de mirarte los 2 videos antes de las 19h xd

1 respuesta

Usuarios habituales

  • bLaKnI
  • AikonCWD
  • telemaco103
  • hda
  • Diward
  • HeXaN
  • Troyer