Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: josue9243 en 10 Agosto 2017, 23:15 pm



Título: [Help :v] Detour a LdrpLoadDll
Publicado por: josue9243 en 10 Agosto 2017, 23:15 pm
Hola primeramente, últimamente intenté hookear o hacer un detour a LdrpLoadDll, logré hacerlo a LdrLoadDll pero bueno, a la otra función cuando intentaba CRASH, LdrpLoadDll se puede localizar en LdrLoadDll unas lineas abajo lo llama, su push no es "push 55", es un "push 140".

¿Alguna idea?, o simplemente alguna idea de como filtrar inyecciones en esa función?.

IMPORTANTE: la función LdrpLoadDll no está exportada, simplemente es una función.

Tenkiu

EDIT: Si necesitan un Hex-Rays de IDA Pro o alguna foto desde el Depurador para que vean la función, lo publico.

EDIT2: Esto no lo puse en ingenieria inversa PORQUE simplemente contiene C++, pero si va en ingenieria inversa sólo me dicen y lo paso. (o algun mod amable me lo podria pasar  ;))


Título: Re: [Help :v] Detour a LdrpLoadDll
Publicado por: BloodSharp en 11 Agosto 2017, 00:20 am
EDIT: Si necesitan un Hex-Rays de IDA Pro o alguna foto desde el Depurador para que vean la función, lo publico.

EDIT2: Esto no lo puse en ingenieria inversa PORQUE simplemente contiene C++, pero si va en ingenieria inversa sólo me dicen y lo paso. (o algun mod amable me lo podria pasar  ;))

Mostrá al menos la parte de como lo tenés declarado al LdrpLoadDll, la función en la que hacés el hook y como lo hookeas también... No se puede adivinar donde está el problema sino vemos algo de código.


B#


Título: Re: [Help :v] Detour a LdrpLoadDll
Publicado por: josue9243 en 11 Agosto 2017, 01:47 am
Aca está la declaración de las funciones:

Código:
typedef NTSTATUS ( NTAPI *LdrLoadDllFunc ) ( PWCHAR, ULONG *, UNICODE_STRING *, HMODULE * );
LdrLoadDllFunc LdrLoadDllPtr;

typedef NTSTATUS ( NTAPI *LdrpLoadDllFunc ) ( PWCHAR, ULONG *, UNICODE_STRING *, HMODULE *, int a5 );
LdrpLoadDllFunc LdrpLoadDllPtr;


//DETOUR:
//Directamente inserto el address de LdrpLoadDLL (si andaba lo adaptaba automaticamente)

std::uint8_t* aLdrpLoadDll = (std::uint8_t*)(DWORD)0x7717fc1d;//(std::uint8_t*)GetProcAddress( GetModuleHandle( "ntdll.dll" ), "LdrpLoadDll" );
LdrpLoadDllPtr = (LdrpLoadDllFunc)DetourFunction( (PBYTE)0x7717fc1d, (std::uint8_t*)Detour_LdrpLoadDLL );


FOTOS:

LdrLoadDLL
[spoiler]
(https://image.prntscr.com/image/SrP1sL3uTY6dZYn-AyJQBw.png)
[/spoiler]

LdrpLoadDLL
[spoiler]
(https://image.prntscr.com/image/8a0oQicgSQmMyTuu3g0SdA.png)
[/spoiler]

LdrLoadDLL en IDA Pro
[spoiler]
(https://image.prntscr.com/image/EttnI9QzSUCEuKDhaJw2Iw.png)
[/spoiler]



Título: Re: [Help :v] Detour a LdrpLoadDll
Publicado por: BloodSharp en 11 Agosto 2017, 02:23 am
Código
  1. typedef NTSTATUS ( NTAPI *LdrpLoadDllFunc ) ( PWCHAR, ULONG *, UNICODE_STRING *, HMODULE *, int a5 );
  2. LdrpLoadDllFunc LdrpLoadDllPtr;

LdrpLoadDll tiene según reactos 6 parametros (https://doxygen.reactos.org/d8/d55/ldrutils_8c.html#a297208bd9a920c295937d755afc40387). Fijate en ntdll.dll si LdrpLoadDll debería terminar con un ret 0x18 (por la convención stdcall 6x4=24 ---> 18h), de lo contrario es muy probable que hayas interceptado al lugar incorrecto...
En el caso de que hayas interceptado correctamente a la función... El error en tu programa se estaría generando por un mal retorno en la pila producto de la falta de parametros "desapilados".


B#


Título: Re: [Help :v] Detour a LdrpLoadDll
Publicado por: josue9243 en 11 Agosto 2017, 02:55 am
No lo creo, intercepte donde empieza el CALL a la función LdrpLoadDLL, aparte OpenGL32 se carga ahí, y también aparece una string que lo está cargando ahí.

Otra cosa tengo el win 7 32 bits.

si no me equivoco segui los jmp y termina en ret 18.

Creeria que el ntdll va cambiando segun el windows y bit...

Modifique a los parametros de la otra cosa y tampoco agarra u.u

(https://image.prntscr.com/image/poe5t7xMTJyiZTFqT6Xwfg.png)


Título: Re: [Help :v] Detour a LdrpLoadDll
Publicado por: BloodSharp en 11 Agosto 2017, 04:42 am
No lo creo, intercepte donde empieza el CALL a la función LdrpLoadDLL, aparte OpenGL32 se carga ahí, y también aparece una string que lo está cargando ahí.

Ok...

Otra cosa tengo el win 7 32 bits.
si no me equivoco segui los jmp y termina en ret 18.

Como predije mirando el code de reactos 6 parametros sin mirar tus imágenes... ahora que me doy cuenta mirandolas tu primera imagen lo confirma...
(https://image.prntscr.com/image/SrP1sL3uTY6dZYn-AyJQBw.png)

Creeria que el ntdll va cambiando segun el windows y bit...

Cambia ligeramente, lo cuál implementar parches para lo que "tenés pensado según tus mensajes privados" va a ser un dolor de huevos frente a nuevas versiones de Windows y parches futuros interceptar este tipo de funciones indocumentadas y no exportadas...
Respecto a 64 bits tiene otro juego de instrucciones, convenciones de llamadas son diferentes a las de 32 bits incluso...

Modifique a los parametros de la otra cosa y tampoco agarra u.u

Raro...


B#


Título: Re: [Help :v] Detour a LdrpLoadDll
Publicado por: josue9243 en 11 Agosto 2017, 04:45 am
Si tenes un tiempito libre haceme el detour de esto porfavor.