Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: TrashAmbishion en 4 Junio 2016, 23:07 pm



Título: Duda para impedir inyeccion en proceso ?
Publicado por: TrashAmbishion en 4 Junio 2016, 23:07 pm
Hi,

En mi red jugamos BF3, Mw3 y luchamos contra los Cheaters batalla interminable pero bueno a lo que iba..

Regularmente los cheaters usan inyeccion DLL me preguntaba si yo protegiera el EXE con digamos ARMADILLO esto evitaria que alguien pudiese hacer una inyección o mejor dicho le costaria muchisimo mas trabajo.

Lo otro seria que todos tuvieran que usar esta aplicacion modificada y no usaran la de por defecto pero creo que se pueden idear otras soluciones, para esa tarea.

Salu2


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: K3NS4N en 6 Junio 2016, 05:43 am
De todos modos lo que desees hacerle al juego, van a tener que usarlos todos los que se encuentro dentro del servidor, como cualquier anticheat, no se exactamente que anticheats tendrá dicho juego, pero según mi experiencia es la única salida que tienes  :(


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: BloodSharp en 6 Junio 2016, 06:21 am
Regularmente los cheaters usan inyeccion DLL me preguntaba si yo protegiera el EXE con digamos ARMADILLO esto evitaria que alguien pudiese hacer una inyección o mejor dicho le costaria muchisimo mas trabajo.

Lo otro seria que todos tuvieran que usar esta aplicacion modificada y no usaran la de por defecto pero creo que se pueden idear otras soluciones, para esa tarea.

Estrictamente los protectores de software no previenen la inyección de código de terceros, normalmente lo que hacen es modificar el archivo ejecutable para que el código sea complicado de entender con un desamblador/depurador normal, pero a la larga siempre se encuentra vulnerabilidades en el programa original o el código del protector :P
En resumen lo que hacen es complicar el entendimiento del programa (en este caso juegos), pero por otra parte cuidado... si son originales y conectan a los "servidores oficiales" con sistemas antitrampas existe la posibilidad(normalmente alta) de que quién use el software intencionalmente modificado te baneen porque la comprobación de la sumatorias de los archivos no coincidan con las sumatorias oficiales/originales...
Hasta donde yo recuerdo el MW3 y el BF3 creo que usaban PunkBuster...


B#


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: TrashAmbishion en 8 Junio 2016, 06:05 am
Hola,

El BF3 lo jugamos de forma local nada de internet.

Ahora mismo no tengo nada del Armadillo o algun programa encriptador pero según recuerdo modifican las TABLAS IAT y las direcciones de memorias por virtuales asi no es mas complicado.

El tema es que los inyectores que hay para estos juegos buscan cierto espacio de memoria para poder funcionar la inyeccion si este protector ofusca esto supongo que estaría un 85% solucionado.

Lo otro sería hacer que todos los usuarios usen el EXE protegido esto me parece que es pan comido, montando un cliente - servidor que verifique esto cada 10 min o algo asi podria ser una solución.

Salu2


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: fary en 8 Junio 2016, 09:39 am
Cuando inyectas en memoria creas un nuevo espacio dentro del proceso, ofusca lo que quieras que te van a inyectar  :laugh:


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: Kaxperday en 8 Junio 2016, 17:06 pm
Quizás si reservas toda el máximo de la memoria disponible para el proceso en el que se quiere en el inyectar ya no tengan espacio para inyectarse código, pero eso sí habrá que ocupar toda la memoria virtual en windows, si tienes 4 GB de RAM, deberías de reservar memoria hasta llegar a su límite, luego ya no me preguntes si funcionaría o no el SO, pero no creo que te pudieran inyectar en ese caso XD, no tendrían memoria virtual disponible para hacerlo.

Bueno he estado leyendo, y windows usa el disco duro para asignar memoria virtual en caso de que la RAM quede ocupada, así que lo veo bastante jodido (link (http://windows.microsoft.com/es-es/windows/what-is-virtual-memory#1TC=windows-7)).

Saludos.


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: fary en 8 Junio 2016, 17:10 pm
Quizás si reservas toda el máximo de la memoria disponible para el proceso en el que se quiere en el inyectar ya no tengan espacio para inyectarse código, pero eso sí habrá que ocupar toda la memoria virtual en windows, si tienes 4 GB de RAM, deberías de reservar memoria hasta llegar a su límite, luego ya no me preguntes si funcionaría o no el SO, pero no creo que te pudieran inyectar en ese caso XD, no tendrían memoria virtual disponible para hacerlo.

Bueno he estado leyendo, y windows usa el disco duro para asignar memoria virtual en caso de que la RAM quede ocupada, así que lo veo bastante jodido (link (http://windows.microsoft.com/es-es/windows/what-is-virtual-memory#1TC=windows-7)).

Saludos.


Esta sin duda alguna es la respuesta del mes  ;-) ;-) ;-) ;-) ;-) ;-)



Como ya dije se pueden recorrer la DLLs que hay cargadas en un proceso y si no te cuadra alguna descargarla... obviamente todos los que estuvieran jugando deberían de jugar con el parche porque si no no haces nada.

saludos.


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: Kaxperday en 8 Junio 2016, 17:18 pm

Esta sin duda alguna es la respuesta del mes  ;-) ;-) ;-) ;-) ;-) ;-)


Pues yo la veo una respuesta como cualquier otra, si ocupas la memoria virtual no puede inyectarse en tu proceso.


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: fary en 8 Junio 2016, 17:31 pm
Pues yo la veo una respuesta como cualquier otra, si ocupas la memoria virtual no puede inyectarse en tu proceso.

Y si cierras el programa tampoco pueden inyectarse en el, no? :xD


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: .:UND3R:. en 8 Junio 2016, 17:47 pm
Pues yo la veo una respuesta como cualquier otra, si ocupas la memoria virtual no puede inyectarse en tu proceso.

Memoria Virtual, ASLR lo que sea, si se busca el set de instrucciones que se desea alterar para que funcione el cheat, siempre se podrá hacer pues el código no varía, a no ser que sea polimórfico, aun así que más di, basta con modificar el patrón de búsqueda, lo cual de la misma forma permita que se localicen las instrucciones a "parchar" en tiempo de ejecución (finalidad del cheat generalmente).


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: TrashAmbishion en 9 Junio 2016, 21:10 pm
Para entonces terminar con esa opción y aclarar.

Yo se que siempre se podra inyectar no planeo que sea imposible pero si hacerselo mas complicado, ahora mismo yo entro en un sitio donde sacaron un inyector para el bf3 que funciona en todos los windows y cojo un software digamos el Armadillo le ofusco hasta los huevos al EXE del juego, y trato de hacer una inyeccion funciona de todas maneras o ya hay que ponerse a ver en que direccion esta el punto de entrada bla bla bla..

Pd:Alguien tiene algun codigo que me permita mostrar las DLL cargadas de un proceso en vb.Net tengo varios en C++ y estoy viendo como convertirlo.

Salu2 y gracias de antemano


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: Karman en 10 Junio 2016, 00:43 am
Hay varias formas de complicar la inyección de una dll en un proceso, una es por kernel bloqueando ciertas funciones pero solo funciona en 32 bits, la otra es tocar algunas de las funciones del sistema que se ejecutan cuando la dll se inyecta (ldrloaddll, threadstartcaller [también llamada basethreadstart, pero no se si tiene un nombre oficial porque es indocumentada], y habían un par más que no recuerdo son llamadas por el kernel luego de inyectar) aunque se podría de todas formas inyectar manualmente donde ldrloadll no funcionaría, pero bue, es cuestión de probar...

S2


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: MCKSys Argentina en 10 Junio 2016, 12:31 pm
Para entonces terminar con esa opción y aclarar.

Yo se que siempre se podra inyectar no planeo que sea imposible pero si hacerselo mas complicado, ahora mismo yo entro en un sitio donde sacaron un inyector para el bf3 que funciona en todos los windows y cojo un software digamos el Armadillo le ofusco hasta los huevos al EXE del juego, y trato de hacer una inyeccion funciona de todas maneras o ya hay que ponerse a ver en que direccion esta el punto de entrada bla bla bla..

En vez de usar Armadillo, usa VMProtect y trata de virtualizar lo que puedas. La inyección debe modificar partes del ejecutable y, si está virtualizado, se romperá el código cuando la DLL lo parchee.

También puedes hacer un thread "protector" que recorra los módulos cargados y descargue (o cierre) el programa cuando detecte una DLL sospechosa.

Pd:Alguien tiene algun codigo que me permita mostrar las DLL cargadas de un proceso en vb.Net tengo varios en C++ y estoy viendo como convertirlo.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682631(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682631(v=vs.85).aspx)

Saludos!


Título: Re: Duda para impedir inyeccion en proceso ?
Publicado por: TrashAmbishion en 20 Junio 2016, 19:52 pm
Hola,

Bueno básicamente lo que tengo mas o menos realizado es verificar las DLL que el utiliza en un sistema con w7, w8 y w10, crear como una estructura y comparar, noc estoy buscando otras alternativas, con el virtualprotect no puedo resolver porque parece que el programa verifica el tamaño del .EXE y no abre.

Salu2



Algo que me tenía con duda el juego del bf3 siempre se va a llamar desde mi aplicación. Esto lo puedo considerar como una ventaja puedo emplear alguna tecnica tan solo provisoria no pretendo hacerlo imposible, como habia dicho molestar al cheater.

Tenia pensando hacer el proceso crítico para si alguien trata de inyectar y quizas crashea el proceso en el intento al ser crítico le metería el pantallazo azul, pero bueno esto lo he realizado en mi aplicación nunca en una externa nose si será el mismo mecanismo.

Aun sigo leyendo el tema pero voy a preguntar si siempre se hace una inyeccion de una DLL esto no saltaria al estar vigilando los modulos cargados por el juego, hacer lo que decía MCKSys Argentina.

Salu2 y gracias cualquier opinión.



Hola de nuevo,

Leyendo encontre esta respuesta a una pregunta similar a la mia voy a citarlo y pongo el sitio donde lo encontré:

http://reverseengineering.stackexchange.com/questions/2262/how-can-dll-injection-be-detected (http://reverseengineering.stackexchange.com/questions/2262/how-can-dll-injection-be-detected)

Citar


Yes, it is possible. There are a couple of generic approaches you can take for detecting injected processes (not just dlls). The first is to enumerate DLLs that are injected by the OS via registry key. The two known key/value are AppCertDLL & AppInitDLLs. The second is to search for all memory that is marked as RWX and then parse out the memory for clues of an executable file or injected code. The third is to search for private memory that contains an executable or injected code. Another approach is to search for inline hooks of APIs. Parse out the handler address and then query the memory address of the handler. The handler will likely be an injected process.

I have been doing research in this area for the past couple of weeks. My main focus is detecting injected malware. Here is a tool called injdmp that I released this week for detecting injected processes.


Alguien conoce la herramienta saben de alguna mas moderna o algun proyecto.

Que podria leer para tratar de implementar algo quizas no tan rebuscado mas bien superficial programando en Vb.Net esto es aparte de los modulos y los hilos que tiene corriendo el proceso.

Salu2

MOD EDIT: No hacer triple post.