Estuche de hacking estándar. Hack inyecta en un proceso de juego iniciado y escribe sobre la memoria de proceso usando WriteProcessMemory
call.
La situación es así:
- estamos hospedando un servidor de juegos
- los clientes se unen al servidor con sus juegos, pueden corromper sus juegos usando varios hacks
- no tenemos oportunidad de cambiar la fuente del juego, es como es. Sin embargo, tenemos la posibilidad de hacer que nuestro programa se ejecute antes de que el cliente pueda unirse al servidor.
Para dejarlo claro: no podemos ofuscar la memoria del juego, pero sí tenemos la posibilidad de ejecutar un programa separado al mismo tiempo. Ya intenté usar una llamada EnumProcessModules
que enumera todos los DLL de proceso sin éxito. Me parece que los hacks se inyectan directamente en la memoria del proceso, por lo tanto, no se detectan. Después de hacer una gran cantidad de "investigación de Google", he llegado a algunas opciones:
-
buscar nombres de procesos en ejecución, archivos en el directorio del juego, patrones de bytes de bytes, patrones de bytes de procesos en ejecución ... esta tarea lleva mucho tiempo, ya que tendría que obtener muestras de todos los hacks disponibles y actualizaciones Nuestro programa cada vez que sale uno nuevo. Toda la información del hackeo debe almacenarse dentro de la fuente, lo que puede hacer que el programa sea muy grande.
-
Usar
ReadProcessMemory
para monitorear los cambios en las compensaciones de memoria bien conocidas (los hacks usualmente usan las mismas compensaciones para lograr algo). Necesitaría ejecutar algunos hacks, monitorear el comportamiento y obtener muestras del comportamiento de hack cuando se compara con la ejecución normal. Básicamente, el programa haría lo mismo que los hacks pero a la inversa. -
detecta
WriteProcessMemory
call dentro de la memoria. No estoy seguro de si esto traería algunos falsos positivos de DLL legítimos, pero la idea parece interesante. ¿Cómo escanearía la memoria de proceso para esta llamada? ¿Cómo obtener el valor de byte?
Este es un ejemplo de una llamada hack:
WriteProcessMemory(phandler,0xsomeoffset,&datatowrite,...);
El desplazamiento se arregla realmente al menos en hacks de bajo nivel. Si pudiéramos reorganizar de alguna manera la pila o empujarla hacia abajo de alguna manera, ya podría estropear el truco para bloquear el juego.
Algunos datos más:
- los nuevos hacks rara vez se publican y hay un número fijo de aquellos que están disponibles públicamente y que realmente funcionan. La mayoría de ellos también funcionan de manera similar.
- el objetivo es detectar el hack o confundirlo con el trabajo
Mi pregunta aquí es, ¿cuáles serían algunas buenas maneras de alcanzar mis metas aquí? Cualquier idea que pueda confundir el hack o ayudar a detectar un hack que se inyecta o un cambio de memoria es bienvenida.
Sé que NO HAY NINGUNA MANERA de tener un sistema 100% seguro contra piratas informáticos, pero si detectamos solo a aquellos que utilizan piratearon públicamente disponibles, ya es el 95% de los piratas informáticos, no nos importa la minoría de piratas informáticos inteligentes.