Introducción a la programación de drivers en Windows

Iniciado por Hendrix, 12 Octubre 2008, 20:43 PM

0 Miembros y 4 Visitantes están viendo este tema.

Distorsion

#60
Si a alguien le interesa un visor de APIs hookeadas que funcione con win7 es el RootKit Hook analizer.
;D


Distorsion

#61
Hola,
estoy intentando hacer un hook en un driver, cambiando una dirección de los MAJORS, el problema es que cuando lo hago se cuelga el sistema.

No se si es porque no obtengo bien la dirección del MAJOR o por el cambio de dirección del MAJOR o por la función propia que sustituyo con el hook.

Se que con el memoryze puedo ver las direcciones de los drivers y sus MAJORS así ya descartaría la primera posibilidad, pero no funciona con el windows 7.

Alguien sabría algún programa parecido que funcione en windows 7?

Por cierto Virtual pc más windbg y driver cargado con osrloader me peta la VM :S

He visto en codigos cosas parecidas a estas:
InterlockedExchangePointer(&Driver->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL],HookDriver);

Seria lo mismo que esto verdad:

Driver->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = HookDriver;

Saludos.

Hendrix

Cita de: Distorsion en 17 Agosto 2010, 16:26 PM
Hola,
estoy intentando hacer un hook en un driver, cambiando una dirección de los MAJORS, el problema es que cuando lo hago se cuelga el sistema.

No se si es porque no obtengo bien la dirección del MAJOR o por el cambio de dirección del MAJOR o por la función propia que sustituyo con el hook.

Se que con el memoryze puedo ver las direcciones de los drivers y sus MAJORS así ya descartaría la primera posibilidad, pero no funciona con el windows 7.

Alguien sabría algún programa parecido que funcione en windows 7?

Por cierto Virtual pc más windbg y driver cargado con osrloader me peta la VM :S

He visto en codigos cosas parecidas a estas:
InterlockedExchangePointer(&Driver->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL],HookDriver);

Seria lo mismo que esto verdad:

Driver->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = HookDriver;

Saludos.

Aquí hay un texto sobre lo que pides (IRP Hooking): http://www.rootkit.com/newsread.php?newsid=846

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

gil8250

hola, estuve leyendo el tuto, por que estoy interesado en hacer un bypass al gameguard, para 9 dragons, ya que el gameguard hace hook al proceso del cliente, y no permite ver la memoria o modificarla , simplemente lo oculta de la lista de procesos,

una cosa es unhookear el gameguard,  pero el mismo hace chekeos para  ver si los hook estan activos,

crees que haya un manera de hacerlo y hacerle creer al gameguard que aun estan los hook activos,


gracias,  agradezco cualquier ayuda ;-)

Hendrix

Cita de: gil8250 en 24 Agosto 2010, 00:21 AM
hola, estuve leyendo el tuto, por que estoy interesado en hacer un bypass al gameguard, para 9 dragons, ya que el gameguard hace hook al proceso del cliente, y no permite ver la memoria o modificarla , simplemente lo oculta de la lista de procesos,

una cosa es unhookear el gameguard,  pero el mismo hace chekeos para  ver si los hook estan activos,

crees que haya un manera de hacerlo y hacerle creer al gameguard que aun estan los hook activos,


gracias,  agradezco cualquier ayuda ;-)

Ya comenté en otros posts, que Meek y yo estuvimosintentando parchear el sXe, en modo Kernel y en modo usuario, y al final la solución la encontramos en modo usuario, parcheando algunas funciones del mismo sXe, no se como funciona el GameGuard, pero supongo que se le podrá hacer lo mismo.

Un Saludo
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Distorsion

Tengo un problemilla con el siguiente codigo, es sencillo pero me da un pantallazo azul  >:(


PFILE_OBJECT FileObject;

PsReferenceProcessFilePointer(PsGetCurrentProcess(),&FileObject);



PsGetCurrentProcess() me devuelve el resultado correcto y no da problemas pero al usar PsReferenceProcessFilePointer pues pantallazo azul.


Saludos.

Distorsion


Distorsion

Haber si alguien sabe echarme una mano.

Intento obtener la ruta del archivo desde un PFILE_OBJECT, entonces si hago esto:


if (IoQueryFileDosDeviceName(FileObject,&wcFilePath)==STATUS_SUCCESS)
           DbgPrint("Ruta archivo: %s .\n",wcFilePath->Name.Buffer);


Si hago esto funciona bien pero de vez en cuando me da un pantallazo azul muy bonito el IoQueryFileDosDeviceName(FileObject,&wcFilePath).

Así que intento evitar esta API y hago lo siguiente:

DbgPrint("Ruta archivo: %s .\n",FileObject->FileName.Buffer);


Y cual es mi sorpresa? Que solo imprime una barra :huh:

Haber si alguien me ayuda.

Gracias.

bizco


Distorsion

Ya lo he probado con el %ws y el 'L' delante de todo y sale lo mismo :-[