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

Si has creado algún documento interesante, este es su sitio

Moderador: Moderadores

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

Notapor Hendrix. » Mar Nov 25, 2008 11:27 am

En este texto explico, muy por encima, como iniciarse en la programación de Drivers, y encima, explico algunas técnicas que utilizan los Rootkits (Hooking en modo Kernel y DKOM).

Descarga

Un Saludo

Hendrix
"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
Avatar de Usuario
Hendrix.
:-)
:-)
 
Mensajes: 10
Registrado: Mar Nov 25, 2008 11:15 am

Notapor Nork » Mar Nov 25, 2008 11:42 am

Gracias por compartir tus artículos por estos sitios Hendrix. es un placer verte por aquí ;)
La televisión me ha culturizado porque cada vez que la encienden en casa me voy a leer a mi cuarto.
Avatar de Usuario
Nork
<|:-)
<|:-)
 
Mensajes: 476
Registrado: Dom Feb 11, 2007 1:00 am
Ubicación: 2348,8574,7

Notapor neofito » Mar Nov 25, 2008 4:07 pm

Gracias y bienvenido!!

Saludos
La verdad nos hara libres

http://neosysforensics.blogspot.com
http://www.wadalbertia.org
@neosysforensics
-<|:-P[G]
Avatar de Usuario
neofito
Wadalbertita
Wadalbertita
 
Mensajes: 1799
Registrado: Dom Ene 30, 2005 7:16 am
Ubicación: En algun lugar

Notapor NeTTinG » Mar Nov 25, 2008 11:38 pm

Hola:

¡¡Muchas gracias por compartirlo!!

Bienvenido a la comunidad ;)
| Blog NeTTinG | Proyecto Destripando iOS |
_____________________________
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas. (Albert Einstein)
Todos recaerán en la necesidad de conocer la única y presumible verdad que el gran embudo emana. (Sire Netting)
Avatar de Usuario
NeTTinG
Wadalbertita
Wadalbertita
 
Mensajes: 6270
Registrado: Mar Sep 20, 2005 5:54 pm
Ubicación: Bajo la trampilla del décimo primer piso.

Notapor Nork » Mié Nov 26, 2008 6:14 pm

Tengo un problemilla. Primero de todo perdona mi total ignorancia en este tema xD

Tengo ya en una carpeta los 3 archivos:

makefile.def

Donde está el siguiente código:

Código: Seleccionar todo
!INCLUDE $(NTMAKEENV)\makefile.def


sources (no sé que extensión debe de tener :S)

Con el siguiente código:
Código: Seleccionar todo
TARGETNAME=prueba
TARGETPATH=.
TARGETENGINE=DRIVER
SOURCES=main.c


main.c

Código: Seleccionar todo
#include <ntddk.h>

void Salir (PDRIVER_OBJECT DriverObject)
{
     DbgPrint("Adiós");
}

NTSTATUS DriverEntry( PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
         DriberObject->DriverUnload=Salit;
         DbgPrint("Hola mundo!!!");
         return STATUS_SUCCESS;
}     


Éste último al compilarlo ya me da error.

Al final los pongo en una carpeta, hago build -cZ y recibo 1 error

NMAKE : fatal error U1064: MAKEFILE not found and no target specified


Seguramente sea un error muy tonto pero es lo que tiene no haber echo nada de esto xd

S4ludos!
La televisión me ha culturizado porque cada vez que la encienden en casa me voy a leer a mi cuarto.
Avatar de Usuario
Nork
<|:-)
<|:-)
 
Mensajes: 476
Registrado: Dom Feb 11, 2007 1:00 am
Ubicación: 2348,8574,7

Notapor neofito » Mié Nov 26, 2008 10:22 pm

Hola

Nork escribió:sources (no sé que extensión debe de tener :S)


No tiene extension.


Nork escribió:Con el siguiente código:
Código: Seleccionar todo
TARGETNAME=prueba
TARGETPATH=.
TARGETENGINE=DRIVER
SOURCES=main.c




TARGETPATH se corresponde con el nombre del directorio donde obtendras el .sys, asi que mejor indica algun nombre de carpeta (pero este no es el error).

Nork escribió:main.c

Código: Seleccionar todo
#include <ntddk.h>

void Salir (PDRIVER_OBJECT DriverObject)
{
     DbgPrint("Adiós");
}

NTSTATUS DriverEntry( PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
         DriberObject->DriverUnload=Salit;
         DbgPrint("Hola mundo!!!");
         return STATUS_SUCCESS;
}     




DriverObject, con v y no con b. Ademas las funciones unload (Salir en tu caso) devuelven un valor de tipo NTSTATUS, por lo que la declaracion deberia ser:

Código: Seleccionar todo
NTSTATUS Salir(PDRIVER_OBJECT DriverObject)


Nork escribió:Éste último al compilarlo ya me da error.

Al final los pongo en una carpeta, hago build -cZ y recibo 1 error

NMAKE : fatal error U1064: MAKEFILE not found and no target specified


Seguramente sea un error muy tonto pero es lo que tiene no haber echo nada de esto xd


¿Estas abriendo la linea de comandos mediante el acceso directo que te crea la instalacion del DDK? Si no lo estas haciendo, ¿estas ejecutando el .bat que inicializa las variables de entorno? Creo que los tiros van por ahi.

Saludos
La verdad nos hara libres

http://neosysforensics.blogspot.com
http://www.wadalbertia.org
@neosysforensics
-<|:-P[G]
Avatar de Usuario
neofito
Wadalbertita
Wadalbertita
 
Mensajes: 1799
Registrado: Dom Ene 30, 2005 7:16 am
Ubicación: En algun lugar

Notapor Nork » Mié Nov 26, 2008 11:03 pm

Gracias neofito

Ya he arreglado el error tipográfico en el código. La linea de comandos la abro por el enlace que me ha creado la instalación.
El error sigue siendo el mismo :/ El código en c al intentar compilarlo me da los siguientes errores:

Imagen
La televisión me ha culturizado porque cada vez que la encienden en casa me voy a leer a mi cuarto.
Avatar de Usuario
Nork
<|:-)
<|:-)
 
Mensajes: 476
Registrado: Dom Feb 11, 2007 1:00 am
Ubicación: 2348,8574,7

Notapor neofito » Mié Nov 26, 2008 11:53 pm

Hola otra vez

Contenido del fichero SOURCES:

Código: Seleccionar todo
TARGETNAME=prueba
TARGETPATH=.
TARGETENGINE=DRIVER

INCLUDES=$(BASEDIR)\inc

SOURCES=main.c


Contenido del fichero MAKEFILE

Código: Seleccionar todo
!INCLUDE $(NTMAKEENV)\makefile.def


Contenido del fichero main.c

Código: Seleccionar todo
#include <ntddk.h>

NTSTATUS Salir (PDRIVER_OBJECT DriverObject)
{
     DbgPrint("Adiós");
     
     return STATUS_SUCCESS;
}

NTSTATUS DriverEntry( PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
         DriverObject->DriverUnload=Salir;
         DbgPrint("Hola mundo!!!");
         return STATUS_SUCCESS;
}


Compilamos dentro del directorio con los ficheros anteriores con el comando:

Código: Seleccionar todo
build


Y dentro del nuevo directorio i386 tenemos nuestro driver ;)

Saludos
La verdad nos hara libres

http://neosysforensics.blogspot.com
http://www.wadalbertia.org
@neosysforensics
-<|:-P[G]
Avatar de Usuario
neofito
Wadalbertita
Wadalbertita
 
Mensajes: 1799
Registrado: Dom Ene 30, 2005 7:16 am
Ubicación: En algun lugar

Notapor Hendrix. » Jue Nov 27, 2008 10:21 am

Fíjate lo que tienes nork:

#include <ntddk.h>

void Salir (PDRIVER_OBJECT DriverObject)
{
DbgPrint("Adiós");
}

NTSTATUS DriverEntry( PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
DriberObject->DriverUnload=Salit;
DbgPrint("Hola mundo!!!");
return STATUS_SUCCESS;
}


No puedo ampliar tu imagen, así que no se que código de error es, pero bueno, el código de Neófito tendría que compilar perfectamente.

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
Avatar de Usuario
Hendrix.
:-)
:-)
 
Mensajes: 10
Registrado: Mar Nov 25, 2008 11:15 am

Notapor NewLog » Jue Nov 27, 2008 11:22 am

Últimamente veo por aquí a gente de elhacker.net! Eso es bueno ^^

Bienvenidos!
Avatar de Usuario
NewLog
<|:-D
<|:-D
 
Mensajes: 1130
Registrado: Sab Ene 14, 2006 1:03 am

Notapor Nork » Jue Nov 27, 2008 3:33 pm

Hendrix. escribió:Fíjate lo que tienes nork:

#include <ntddk.h>

void Salir (PDRIVER_OBJECT DriverObject)
{
DbgPrint("Adiós");
}

NTSTATUS DriverEntry( PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
DriberObject->DriverUnload=Salit;
DbgPrint("Hola mundo!!!");
return STATUS_SUCCESS;
}


No puedo ampliar tu imagen, así que no se que código de error es, pero bueno, el código de Neófito tendría que compilar perfectamente.

Un Saludo :)


:oops: Ya me había dado cuenta, aún así me sigue dando el mismo error (con el código de neógito y el tuyo).

Dejo la imagen en forma de url: http://img399.imageshack.us/img399/9407 ... otosk6.jpg

Gracias!
La televisión me ha culturizado porque cada vez que la encienden en casa me voy a leer a mi cuarto.
Avatar de Usuario
Nork
<|:-)
<|:-)
 
Mensajes: 476
Registrado: Dom Feb 11, 2007 1:00 am
Ubicación: 2348,8574,7

Notapor Nork » Jue Nov 27, 2008 4:04 pm

El error era tonto (como era de esperar) yo pensaba que el archivo makefile era de extensión "def". Ya esta me ha linkeado sin problemas ;)

P.D: Cuando cargo el driver con el OSR Driver Loader simplemente busco el sys en Driver Path luego Registrer Service y Start Service, no? Por que el DebugView no me muestra nada :S
La televisión me ha culturizado porque cada vez que la encienden en casa me voy a leer a mi cuarto.
Avatar de Usuario
Nork
<|:-)
<|:-)
 
Mensajes: 476
Registrado: Dom Feb 11, 2007 1:00 am
Ubicación: 2348,8574,7

Notapor Hendrix. » Vie Nov 28, 2008 10:19 am

Nork escribió:P.D: Cuando cargo el driver con el OSR Driver Loader simplemente busco el sys en Driver Path luego Registrer Service y Start Service, no? Por que el DebugView no me muestra nada :S


Así es, por lo del DebugView tienes que activar el modo kernel que el la "rueda dentada" que aparece de color amarillo (creo que es esta, no tengo el DBW delante).

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
Avatar de Usuario
Hendrix.
:-)
:-)
 
Mensajes: 10
Registrado: Mar Nov 25, 2008 11:15 am

Notapor Nork » Vie Nov 28, 2008 4:36 pm

Hendrix. escribió:
Nork escribió:P.D: Cuando cargo el driver con el OSR Driver Loader simplemente busco el sys en Driver Path luego Registrer Service y Start Service, no? Por que el DebugView no me muestra nada :S


Así es, por lo del DebugView tienes que activar el modo kernel que el la "rueda dentada" que aparece de color amarillo (creo que es esta, no tengo el DBW delante).

Un Saludo :)


Por fin! No sé porque no me ha ido hasta que no he reiniciado :/ Bueno ahora ya esta, muchas gracias ;)
La televisión me ha culturizado porque cada vez que la encienden en casa me voy a leer a mi cuarto.
Avatar de Usuario
Nork
<|:-)
<|:-)
 
Mensajes: 476
Registrado: Dom Feb 11, 2007 1:00 am
Ubicación: 2348,8574,7

Notapor neofito » Lun Dic 01, 2008 2:28 pm

Hola

Como complemento al excelente tutorial del compañero Hendrix he agregado una entrada en mi blog (podeis encontrar su direccion en mi firma) que proporciona y comenta el codigo de un driver de dispositivo para la ocultacion de procesos mediante DKOM.

Saludos
La verdad nos hara libres

http://neosysforensics.blogspot.com
http://www.wadalbertia.org
@neosysforensics
-<|:-P[G]
Avatar de Usuario
neofito
Wadalbertita
Wadalbertita
 
Mensajes: 1799
Registrado: Dom Ene 30, 2005 7:16 am
Ubicación: En algun lugar

Siguiente

Volver a Faq

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado