Enviar respuesta 
Simple Anti-Inyector de Dlls
Autor Mensaje
wiD Sin conexión
Anti-cheat Team


Plugin developer Plugin popular
Mensajes: 803
Registro en: Nov 2013
Reputación: 18
Mensaje: #1
Simple Anti-Inyector de Dlls
El post no es de mi autoría. Créditos: BloodSharp

BloodSharp escribió:En estas últimas semanas estuve leyendo algunas de las protecciones que realizan algunos sistemas anticheats y me decidí probar algunas de dichas protecciones, en este caso evitar la inyección de cheats en Half-Life y sus mods derivados...

Ahora, bien sabemos que la mayoría de los cheats utilizan inyecciones que se realizan por hilo remoto. Los pasos para crear un hilo remoto son los siguientes:


Encontrar y abrir el proceso (abrir el proceso con permisos)
Almacenar memoria en el proceso para la dirección de la dll o código a ejecutar
Escribir la dirección de la dll o rutina a ejecutar
Crear un hilo remoto para que fuerze al programa ejecutar el código del hack


Como pensé que bloquear cada paso posible no sería muy complicado, cosa que tengo que admitir que me equivoqué (la razón fue porque varias cosas del sistema fallaban y en algunas ocasiones tuve resultados muy azules), decidí directamente bloquear directamente el último y más importante paso que es el que habilita el inicio de los cheats...

Lo que haremos será crear un driver que "hookée" la rutina NtCreateThread y detenga cualquier intento de crear un hilo desde otro programa hacia el juego:

Código PHP:
NTSTATUS NTAPI HOOK_ZwCreateThread(OUT PHANDLE ThreadHandle,IN ACCESS_MASK DesiredAccess,
                                   
IN POBJECT_ATTRIBUTES ObjectAttributes,
                                   
IN HANDLE ProcessHandle,OUT PCLIENT_ID ClientId,
                                   
IN PCONTEXT ThreadContext,IN PUSER_STACK UserStack,
                                   
IN BOOLEAN CreateSuspended)
{
    
NTSTATUS lStatus;
    
CHAR CurFileName[MAX_PATH]={0},ProcFileName[MAX_PATH]={0};
    
HANDLE CurrentPID=PsGetCurrentProcessId();
    
HANDLE ProcessHandleId=(HANDLE)GetProcessIdByHandle(ProcessHandle);
    
PEPROCESS EProc;

    
lStatus=PsLookupProcessByProcessId(CurrentPID,&EProc);
    if(
lStatus==STATUS_SUCCESS)
    {
        
ImageFileName(EProc,CurFileName);
        
ObDereferenceObject(EProc);
    }
    
lStatus=PsLookupProcessByProcessId(ProcessHandleId,&EProc);
    if(
lStatus==STATUS_SUCCESS)
    {
        
ImageFileName(EProc,ProcFileName);
        
ObDereferenceObject(EProc);
    }

    if(!
strcmp(_strlwr(ProcFileName),"hl.exe"))
    {
        if(
CurrentPID==ProcessHandleId || !strcmp(_strlwr(CurFileName),"explorer.exe"))
            return 
pZwCreateThread(ThreadHandle,DesiredAccess,ObjectAttributes,
                                    
ProcessHandle,ClientId,ThreadContext,UserStack,
                                    
CreateSuspended);
        else
        {
            
DbgPrint("%s tried to create a remote thread in the game... ACCESS DENIED!!!\n",CurFileName);
            return 
STATUS_UNSUCCESSFUL;
        }
    }
    return 
pZwCreateThread(ThreadHandle,DesiredAccess,ObjectAttributes,ProcessHandle,
                            
ClientId,ThreadContext,UserStack,CreateSuspended);


Este es un código muy simple, estoy seguro que se pueden bloquear mejor y de muchas otras formas las inyecciones...
02/11/2018 08:46 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Pan Bimbo (? Ausente
Anti-cheat Team


Plugin developer
Mensajes: 365
Registro en: Jun 2015
Reputación: 8
Mensaje: #2
RE: Simple Anti-Inyector de Dlls
Image

Código PHP:
if(CurrentPID==ProcessHandleId || !strcmp(_strlwr(CurFileName),"explorer.exe"))
            return 
pZwCreateThread(ThreadHandle,DesiredAccess,ObjectAttributes,
                                    
ProcessHandle,ClientId,ThreadContext,UserStack,
                                    
CreateSuspended);
        else
        {
            
DbgPrint("%s tried to create a remote thread in the game... ACCESS DENIED!!!\n",CurFileName);
            return 
STATUS_UNSUCCESSFUL;
        } 


Código PHP:
!strcmp(_strlwr(CurFileName),"explorer.exe&quot

Quien fue el desgraciado que coloco esa condición ahí, tranquilamente inyecto una dll en explorer.exe(un shellcode/pedaso de código asm que cree threads...) o le pongo a mi proceso explorer.exe y inyecto.

Oh god why (AM como red social) (? (? (?
(Venganza le dijo el ganzo ala ganza.)
(Este mensaje fue modificado por última vez en: 02/11/2018 08:59 PM por Pan Bimbo (?.)
02/11/2018 08:58 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Cr3470r Ausente
Anti-cheat Team


Mensajes: 438
Registro en: Feb 2014
Reputación: 8
Mensaje: #3
RE: Simple Anti-Inyector de Dlls
(02/11/2018 08:58 PM)Pan Bimbo (? escribió:  Quien fue el desgraciado que coloco esa condición ahí, tranquilamente inyecto una dll en explorer.exe(un shellcode/pedaso de código asm que cree threads...) o le pongo a mi proceso explorer.exe y inyecto.

Acordate que esto es conceptual, es sólo para ver el funcionamiento de las cosas y darse una idea, y no codearlo perfectamente al %100 ...

Volviendo al tema, el código es en modo ring0, si te fijás bien, cualquier Thread que quieras crear en el juego directamente no te funciona, así que por más que inyectes en explorer.exe, como harías para cargar todo en hl.exe ?

[SteamID: Rainnegan]

Destro escribió:  Igual el nombre es horrible, algo así quedaría mejor:
Código PHP:
public g_maxplayers 
(Este mensaje fue modificado por última vez en: 02/11/2018 09:18 PM por Cr3470r.)
02/11/2018 09:11 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Pan Bimbo (? Ausente
Anti-cheat Team


Plugin developer
Mensajes: 365
Registro en: Jun 2015
Reputación: 8
Mensaje: #4
RE: Simple Anti-Inyector de Dlls
(02/11/2018 09:11 PM)Cr3470r escribió:  
(02/11/2018 08:58 PM)Pan Bimbo (? escribió:  Quien fue el desgraciado que coloco esa condición ahí, tranquilamente inyecto una dll en explorer.exe(un shellcode/pedaso de código asm que cree threads...) o le pongo a mi proceso explorer.exe y inyecto.

Acordate que esto es conceptual, es sólo para ver el funcionamiento de las cosas y darse una idea, y no codearlo perfectamente al %100 ...

Volviendo al tema, el código es en modo ring0, si te fijás bien, cualquier Thread que quieras crear en el juego directamente no te funciona, así que por más que inyectes en explorer.exe, como harías para cargar todo en hl.exe ?

Y es una boludes, pones un export en la dll, y modificas los importes de hl.exe o alguna dll que este ahi, y creas el thread o lo q fuere.

No empeces con las boludeces de "ay i zi te blokio el imphort xdxdxd?"

Oh god why (AM como red social) (? (? (?
(Venganza le dijo el ganzo ala ganza.)
02/11/2018 09:29 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Destro Sin conexión
Anti-cheat Team


Buen Tutorial Plugin developer Pensador Plugin popular
Mensajes: 820
Registro en: Oct 2013
Reputación: 4
Mensaje: #5
RE: Simple Anti-Inyector de Dlls
Dejo algunos repositorios que podrían ser util para cualquiera que le interese este tema:
https://github.com/SagaanTheEpic/Sagaan-AntiCheat-V2.0/
https://github.com/SLAUC91/AntiCheat
ninguno llego a nada serio, no son mas que recopilaciones de metodos que se pueden encontrar en otros lados si se busca bien

Y este que da pena jaja (si lo haces funcional, no es mas que una broma para poner en tu servidor made in casa)
https://github.com/moien007/AntiCheat

02/11/2018 09:31 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Cr3470r Ausente
Anti-cheat Team


Mensajes: 438
Registro en: Feb 2014
Reputación: 8
Mensaje: #6
RE: Simple Anti-Inyector de Dlls
(02/11/2018 09:31 PM)Destro escribió:  Dejo algunos repositorios que podrían ser util para cualquiera que le interese este tema:
https://github.com/SagaanTheEpic/Sagaan-AntiCheat-V2.0/
https://github.com/SLAUC91/AntiCheat
ninguno llego a nada serio, no son mas que recopilaciones de metodos que se pueden encontrar en otros lados si se busca bien

Y este que da pena jaja (si lo haces funcional, no es mas que una broma para poner en tu servidor made in casa)
https://github.com/moien007/AntiCheat

Voy a tomar algunos codes de ahí para darme ideas, sobre todo las detenciones a modo ring 3, buena info!

(02/11/2018 09:29 PM)Pan Bimbo (? escribió:  Y es una boludes, pones un export en la dll, y modificas los importes de hl.exe o alguna dll que este ahi, y creas el thread o lo q fuere.

No empeces con las boludeces de "ay i zi te blokio el imphort xdxdxd?"

Estamos para discutir sobre el tema, pero tampoco irnos al carajo y lo sabes jajaja...
Bueno, vamos a simplificar todo de esta manera...

Te bloqueo la creación de Threads en el hl.exe, cambias el export de una dll y modificas los importes del hl.exe y ya está, inyectas.
Te hago una validación MD5 de todo los archivos del juego, y me podés hacer un archivo colisionado con una misma MD5 y ya está, inyectas.
Te puedo hacer incluso una validación y unos bloqueos a nivel Kernel y ya está, me parcheas todo e inyectas.
Es más, podemos ir por la más fácil, me hacés un método code-cave y ya está, inyectas lo más tranqui.

Siempre vas a tener una forma de saltearte las cosas a nivel Cliente, haga lo que yo haga, si corre en tu PC, me lo podés bypassear, es por esto que siempre opté porque se haga todo desde el lado servidor y no desde el Cliente ...

[SteamID: Rainnegan]

Destro escribió:  Igual el nombre es horrible, algo así quedaría mejor:
Código PHP:
public g_maxplayers 
(Este mensaje fue modificado por última vez en: 02/11/2018 09:39 PM por Cr3470r.)
02/11/2018 09:38 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Neeeeeeeeeel.- Sin conexión
Administrador


El protector Plugin developer 1k
Mensajes: 1,980
Registro en: Oct 2013
Reputación: 38
Mensaje: #7
RE: Simple Anti-Inyector de Dlls
Si lo único que vas a hacer es decir que vos lo podés bypassear o hacer mejor no tiene mucho sentido que comentes. Si querés compartir algo compartilo, sino ni comentes.

No contesto mensajes privados pidiendo soporte!

Donaciones en btc 1EcNJV2gTFDYr7BBAFpMQk7pVCFEZCaKX4
03/11/2018 01:49 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS