Ir al contenido


Foto

Consulta: Injector de DLL ( Bloquear y Liberar )


  • Por favor identifícate para responder
6 respuestas en este tema

#1 T0ybanead00

T0ybanead00

    Newbie

  • Miembros
  • Pip
  • 3 mensajes

Escrito 29 abril 2014 - 12:02

Estimados Delphiaccess:
Buen día, deseo realizar una consulta sobre el tema de Injector de DLL,  bloquear la injección de una dll y realizar la reversa, por ejemplo aqui muestro un source de un:

Anti Injector DLL



delphi
  1. library Project2;
  2.  
  3. uses
  4.   SysUtils,  Classes, Windows, Dialogs;
  5.  
  6. {$R *.res}
  7.  
  8. var
  9. HH : THandle;
  10. WBytes : Cardinal;
  11. procedure HookarFunc(NossaFunc : Pointer);
  12. var
  13.   Pular : DWORD;
  14.   Funcao : Pointer;
  15. begin
  16. Funcao := GetProcAddress(GetModuleHandle('ntdll.dll'), 'LdrLoadDLL')
  17.   Pular := DWORD(NossaFunc) - DWORD(Funcao) - 5;
  18.   VirtualProtect(Funcao, 5, PAGE_EXECUTE_READWRITE, nil);
  19.   Funcao := Pointer(Pular);
  20. end;
  21.  
  22. procedure OnInject;
  23. var
  24. H : Thandle;
  25. begin
  26. ShowMessage('Injección bloqueada');
  27. H := GetModuleHandle('ntdll.dll');
  28. H := 0;
  29. end;
  30.  
  31. Procedure InjetadoNoPrograma;
  32. begin
  33. ShowMessage('Anti Injector Activado.');
  34. end;
  35.  
  36. begin
  37. HH := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
  38. HookarFunc(@OnInject); 
  39. CreateRemoteThread(HH, nil, 0, @InjetadoNoPrograma, @InjetadoNoPrograma, 0, WBytes);
  40. end. 



Con esta dll injectado aun proceso ( ejemplo notepad.exe ) bloque la función de ntdll.dll de no dejar injectar mas DLL, ahora como podria hacer la reversa, es decir restaurar la función de ntdll.dll y poder injectar otras dll en el mismo proceso

He intectado injectar con otra función ( Con LoadLibraryA y LoadLibraryW ) pero sin resultado alguno.

Gracias de antemano por su apoyo y comprensión
  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 29 abril 2014 - 04:14

Bienvenido T0ybanead00.

En este momento no puedo probar ese código porque no tengo un WinXP a mano pero, a bote pronto, me da la impresión de que no hace nada. Pienso que lo tomaste y lo resumiste de algún sitio y no está completo. Realmente no hace ningún Hook a la API LdrLoadDLL pues en ningún sitio escribes en su dirección, ni tienes una función que la "suplante".

Si quieres puedes estudiar un tutorial que hice en delphi para conseguir un hook automatizado a cualquier API aquí. En ese tutorial explico cómo cambiar los permisos de escritura de un bloque de memoria, necesario para poder escribir en "memoria ejecutable" de una API o cualquier función/procedimiento.

Cuando tenga tiempo pruebo en un WinXP 32 pues la inyección de código 32 en S.O. simplemente no funciona, quizás tus pruebas de inyección estén fracasando por este detalle.


Saludos.
  • 0

#3 T0ybanead00

T0ybanead00

    Newbie

  • Miembros
  • Pip
  • 3 mensajes

Escrito 30 abril 2014 - 12:20

Estiimado escafandra:

Gracias por la bienvenida y su gentil información, en sus comentario esta en lo correcto es un source tomado como ejemplo para poder dar una idea de lo que trato de plasmar en el tema de anti injección DLL, el cual me he tocado con un proceso ( .exe + .dll ) que bloquea toda injección de DLL.

Mi objectivo es lograr realizar la reversa, es decir restaurar la función ntdll.dll para poder injectar mis dll al proceso que seria como un BYPASS, voy a estudiar su tutorial sobre las api's que es un tema muy interesante, espero lograr mi objectivo.

Muchas gracias
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 30 abril 2014 - 10:37

Aunque el código que muestras no hace nada, intuyo que el código original realiza un Hook a LdrLoadDLL para bloquear posteriores cargas de dlls. Esa función es una API indocumentada. Si subes dicho código quizás sea fácil ver el antídoto y sobre todo si realiza una inyección a todos los procesos o sólo a uno. Se me ocurre deshacer el hook con una inyección directa de código, si sólo afecta a un proceso la vacuna es más sencilla.

Recuerda que una dll compilada en 32bits no se puede inyectar en un proceso de 64.

Saludos.

  • 0

#5 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 07 mayo 2014 - 11:52

Quizás esto te ayude en lo que pretendes.


Saludos.
  • 0

#6 T0ybanead00

T0ybanead00

    Newbie

  • Miembros
  • Pip
  • 3 mensajes

Escrito 19 mayo 2014 - 11:36

Estimado escafandra:
Buenas noche, he intentado 2 tipos de injección :

* 1.dll >> he creado una dll  que llama a un form y despues un mensaje, el cual el resultado fue negativo ( NO permite injectar)
* 2.dll >> he creado una dll con solo mensaje (ShowMessage) el cual el resultado fue negativo ( NO permite injectar)

Seguire realizando otro tipo de pruebas, si logro algun fix les estaria comentado.

Muchas gracias
  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 20 mayo 2014 - 01:34

Me da la impresión que tienes problemas para cualquier tipo de inyección.
Elije un proceso de 32bits e injecta tu dll compilada para 32bits.

Sube el código que usas para inyectar.


Saludos.
  • 0




IP.Board spam blocked by CleanTalk.