[Help :v] Detour a LdrpLoadDll

Iniciado por josue9243, 10 Agosto 2017, 23:15 PM

0 Miembros y 1 Visitante están viendo este tema.

josue9243

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  ;))

BloodSharp

Cita de: josue9243 en 10 Agosto 2017, 23:15 PMEDIT: 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#



josue9243

Aca está la declaración de las funciones:


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]

[/spoiler]

LdrpLoadDLL
[spoiler]

[/spoiler]

LdrLoadDLL en IDA Pro
[spoiler]

[/spoiler]


BloodSharp

#3
Cita de: josue9243 en 11 Agosto 2017, 01:47 AMtypedef NTSTATUS ( NTAPI *LdrpLoadDllFunc ) ( PWCHAR, ULONG *, UNICODE_STRING *, HMODULE *, int a5 );
LdrpLoadDllFunc LdrpLoadDllPtr;

LdrpLoadDll tiene según reactos 6 parametros. 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#



josue9243

#4
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


BloodSharp

Cita de: 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í.

Ok...

Cita de: josue9243 en 11 Agosto 2017, 02:55 AMOtra 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...


Cita de: josue9243 en 11 Agosto 2017, 02:55 AMCreeria 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...

Cita de: josue9243 en 11 Agosto 2017, 02:55 AMModifique a los parametros de la otra cosa y tampoco agarra u.u

Raro...


B#



josue9243

Si tenes un tiempito libre haceme el detour de esto porfavor.