Inyección de memoria en juegos

2

Actualmente estoy investigando ataques de inyección de memoria en juegos en Windows 7/10.

Después de revisar varios subprocesos sobre este tema, hay algunas preguntas que aún no están claras.

  1. la inyección de DLL se puede detectar fácilmente mediante el uso de la introspección. Incluso si parchea y firma una DLL existente, el SHA1 no coincidirá y causará señales de advertencia, asumiendo que el cliente del juego tiene detección de todo esto. ¿Correcto?

  2. La inyección de memoria se puede usar para inyectar código malicioso, sin embargo, al parecer, esto solo se puede lograr mediante el uso de un módulo kernel firmado ya que el espacio de la memoria está protegido contra la lectura / escritura de otros procesos. ¿Correcto?

  3. Si se usa un módulo de kernel para inyectar en una memoria de procesos, ¿el proceso puede detectar esto? Por ejemplo, digamos que hay una cadena en la memoria que apunta a una ruta del disco ( /conf/something.cnf ), si se sobrescribió con una cadena con la misma longitud, ¿el proceso podría detectar que la memoria se sobrescribió?

pregunta sleepycal 27.09.2015 - 22:39
fuente

1 respuesta

2

Responda en orden inverso, porque sus preguntas posteriores se basan en suposiciones inexactas en las anteriores:

3: No si el código de inyección es lo suficientemente astuto. En teoría, un proceso puede, por supuesto, escanear su propio espacio de direcciones y detectar cosas que no pertenecen. Sin embargo, ese procedimiento que realiza el escaneo debe estar en el proceso en algún lugar y, en la práctica, solo puede editarlo cuando realice las inyecciones.

2: Incorrecto. Cualquier proceso puede ser depurado por otro proceso que se ejecute con el mismo token de seguridad que el debuggee, o con un superconjunto del acceso del token (es decir, un proceso de espacio aislado en el usuario A puede ser depurado mediante un proceso no aislado en el mismo usuario) , o por cualquier proceso con privilegio elevado (SeDebugPrivilege, que normalmente solo es Administradores pero podría ser otros procesos). Consulte, por ejemplo, WriteProcessMemory . Si desea hacer que la memoria sea ejecutable, es probable que necesite usar / use VirtualAllocEx / VirtualProtectEx . Si luego desea iniciar una secuencia (en el proceso de destino) ejecutándose en la memoria inyectada, consulte CreateRemoteThread .

1: estás confundiendo inyección DLL y otra cosa, probablemente DLL en cuclillas ( que no parece ser un término bien conocido, pero es lo que uso y escucho cuando se coloca su propia copia de una DLL esperada más arriba en la ruta de carga, por ejemplo, en el propio directorio del programa, que versión real). La inyección de DLL (donde el proceso no esperaba cargar esa DLL) se lleva a cabo de varias maneras, comúnmente usando la inyección de memoria como se indica anteriormente (inyecte el nombre de la DLL, use CreateRemoteThread para iniciar un hilo que llame a LoadLibrary en el proceso de destino con el nombre de DLL inyectado como el parámetro). Esa DLL podría, por supuesto, editar el proceso para hacer cosas como deshabilitar u omitir cualquier código de introspección que el autor de la DLL supiera.

    
respondido por el CBHacking 27.09.2015 - 23:57
fuente

Lea otras preguntas en las etiquetas