¿Cómo resolver un bloqueo del juego después de conectar una función con una estructura?
Desarrollando la estructura del gancho.
Un usuario hizo recientemente una pregunta en un foro especializado en ingeniería inversa de videojuegos. Estaba interesado en cómo conectar una función específica a un juego para cambiar su comportamiento. Después de analizar la función con IDA (Interactive Disassembler), encontró que su tipo era __int64 __fastcall(int a1, unsigned int *a2, unsigned int *a3).
El crash del juego
Entonces creó una estructura con una función enlazada que llamaba a la función original después de un retraso de 10 milisegundos. Sin embargo, cuando utilizó esta estructura, el juego falló.
Se preguntó por qué el juego fallaba y si debería omitir la instrucción Sleep(10) en su función enganchada.
Una publicación de código sin demora
Usando el mismo código marco sin demora, descubrió que el bloqueo del juego ya no ocurría, lo que lo llevó a cuestionar la importancia de la instrucción Sleep en su función enganchada.
La investigación actual
Otro usuario del foro sugirió buscar descompilaciones de versiones anteriores del juego para encontrar funciones que utilicen las mismas compensaciones encontradas al analizar la función inicial.
También mencionó la capacidad de buscar cadenas en IDA para realizar análisis de código estático.
Finalmente señaló que realizar ingeniería inversa a un juego como TFT (Teamfight Tactics) es complejo porque pocas personas se han interesado en él y por lo tanto hay poco conocimiento público al respecto.
Por ello, aconsejó al usuario perseverar en su investigación y seguir explorando diferentes posibilidades.
Fuente: www.unknowncheats.me





