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

Estoy escribiendo en elhacker.net un artículo sobre la programación de drivers en Windows. Los temas a tratar son los siguientes:

1. Nociones básicas

  • 1.1 Herramientas necesarias
  • 1.2 Modo kernel y modo Usuario
  • 1.3 Documentación interesante

2. Introducción

  • 2.1 Hola mundo desde el driver
  • 2.2 Comunicación entre Modo kernel y modo usuario

3. El Kernel de Windows

  • 3.1 La SSDT o System Service Descriptor Table
  • 3.2 Memoria protegida

4. Hooks

  • 4.1 Hooks en la SSDT

5. Direct Kernel Object Manipulation (DKOM)

  • 5.1 Eprocess
  • 5.2 Ocultando procesos sin Hooks

Espero que les guste, si no entienden algo, o creen que me e dejado algo en el tintero, solamente diganmelo.

Un Saludo

Hendrix

Anuncios

10 comentarios to “Introducción a la programación de drivers en Windows”

  1. amigo esta muy bueno tu trabajo..peeeeeeeeeerooo¡¡¡
    no le entiendo bien..que codigo va con que codigo
    ya puedo correrlo desde el kernel
    pero en el main.c se agrega el resto de codigo ??
    y en consola hay un codigo con varias cabeceras que hago con ese ? o lo agrego en el source..

  2. Esto no corre con la consola ni se usa el main.c. Lee de nuevo el capitulo del hola mundo desde el Kernel 😉

    Un Saludo

  3. Dreams_eater Says:

    Hendrix, esta muy bueno el tutorial, sobretodo porque vamos ingresando esos temas en los foros de habla hispana.

    La primera vez que entre a ver esas cosas fue en rohitab (de habla inglesa, te hacen mala cara si traducis alli, pero te autorizan a postear la traduccion en otro lado). Hoy me anote a ingles 1,( jajajaj), que malo soy con el ingles.

    Ahora (con 3 años en C/c++) puedo darme el lujo de empezar a escribir un tuto de C (considero que deve haber una distancia entre el “profe” y “alumno”).

    Un placer “volverte a ver”.

    PD:¿de donde nace la necesidad de tener un “programa/programa en ejecucion” en MK y no hilos en MU, es decir cual es la problematica que resuelve?
    Mientras el planificador de hilos de windos los multiplexa de su tabla, logrando el seudo-paralelismo (la tecnologia multiprocesador todabia no llego a casa :)). ¿Cuando el planificador se acuerda de los drivers o como es el criterio para seleccionarlos?

    PD2:si el hilo es la unidad de ejecucion de un programa (caso windows).
    proceso es un programa en ejecucion.
    ¿Tienen nombres especiales el driver en ejecucion y su unidad de ejecucion?

    dreams_eater

  4. PD:¿de donde nace la necesidad de tener un “programa/programa en ejecucion” en MK y no hilos en MU, es decir cual es la problematica que resuelve?

    [—-]

    A que te refieres con sin hilos en MU??? Puedes hacer un modulo de Kernel que te oculte los procesos que empiecen, por ejemplo, por 1234_, lo que consigues un rootkit que esconde tu proceso sin tener que especificarle tu PID, por ejemplo.

    [—–]

    PD2:si el hilo es la unidad de ejecucion de un programa (caso windows).
    proceso es un programa en ejecucion.
    ¿Tienen nombres especiales el driver en ejecucion y su unidad de ejecucion?

    [——]

    Los modulos de Kernel es codigo que se ejecuta en modo Kernel, el codigo a ejecutar se ejecuta con las llamadas a los eventos (DriverEntry, DriverUnload, etc.).

  5. Dreams_eater Says:

    A que te refieres con sin hilos en MU???
    [—-]
    soy yo que habla para el traste(no hilos en MU, ajajjajaja pobre planificador).
    quise decir:….en MK y no TENER QUE USAR hilos en MU….

    Esperaba algo así como:
    Cuando el desempeño es critico.
    Se quiere manejar al harware mas finamente.
    Se quiere hacer un rootkit.
    mas detallado, con tus palabras, enumerados por lo que es mas comun, etc. (yo no tengo palabras propias en este tema)
    [—]
    Los modulos de Kernel es codigo que se ejecuta en modo Kernel, el codigo a ejecutar se ejecuta con las llamadas a los eventos (DriverEntry, DriverUnload, etc.).
    [—]
    Buenisimo….pero generaste otra pregunta:
    ¿Esos eventos, del lado del MU son generados por:

    CreateService(SCManager, DriverName, DriverName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, drivePath, NULL, NULL, NULL, NULL, NULL);

    StartService(Service, 0, NULL);

    ControlService(Service, SERVICE_CONTROL_STOP, &proc);

    DeleteService(Service);

    o solo son la alternativa del OSRLoader, para registrar y ejecutar modulos de driver?

    ¿Uno de los roles del driver es una especie de manejador de eventos producidos por el MU?

    –gracias–

  6. Si, el driver tiene un manejador para que en todos los “Eventos”. Si te fijas:

    ##

    DriverEntry is the first routine called after a driver is loaded, and is responsible for initializing the driver.

    DriverObject Caller-supplied pointer to a DRIVER_OBJECT structure. This is the driver’s driver object. Each driver object represents the image of a loaded kernel-mode driver. A pointer to the driver object is an input parameter to a driver’s DriverEntry, AddDevice, and optional Reinitialize routines and to its Unload routine, if any.

    The DriverObject parameter supplies the DriverEntry routine with a pointer to the driver’s driver object, which is allocated by the I/O manager. The DriverEntry routine must fill in the driver object with entry points for the driver’s standard routines.

    The DriverObject pointer gives the driver access to DriverObject->HardwareDatabase, which points to a counted Unicode string that specifies a path to the registry’s \Registry\Machine\Hardware tree.

    http://msdn.microsoft.com/en-us/library/ms795702.aspx

    ##

    Con la ayuda de la MSDN se entiende mucho mejor….

    Un Saludo

  7. Dreams_eater Says:

    se me aclaro el “despachaje”(de dispatch) de rutinas por eventos.
    (DriverUnload=Salir; por ejemplo)

    ausumo que:
    MajorFunction con IRP_MJ_MAXIMUM_FUNCTION+1 elementos,
    son mas o menos estas constantes (con el nombre de lo que hacen)
    http://msdn.microsoft.com/en-us/library/ms806157.aspx
    se puede hacer directo como el aleman y su “camel’s driver”

    http://www.adp-gmbh.ch/win/misc/writing_devicedriver.html

    [—-]
    Con la ayuda de la MSDN se entiende mucho mejor….
    [—–]
    ¿eso fue un “lee msdn antes de preguntarme”? XDDD
    o sera mi cola de paja

    Jerga argentina –>cola de paja: es tener problemas con la propia conciencia que a uno no lo deja vivir normalmente.

    Un Saludo y gracias!!

    • xDDDD No, con lo de que con la MDSN se entiende mejor es literalmente eso, que con las explicaciones que dan en la MSDN se entiende, que por algo son ellos los que “documentaron el kernel” de Windows….

      Un Saludo 😀

  8. hola amigos la verdad es que no he logrado conseguir leer el tutorial ya que el link me lleva a este error agregando que ya estoy registrado….

    El tema o foro que estás buscando parece que no existe, o fuera de tus límites…

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: