Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: black_flowers en 8 Diciembre 2010, 12:59 pm



Título: una duda, intentando comunicar mu con mk.
Publicado por: black_flowers en 8 Diciembre 2010, 12:59 pm
hola, estaba siguiendo el pdf de hendrix para comunicar el modo usuario con el modo kernell y tengo algunas dudas basicas. Yo lo estoy haciendo en windows 7 y utilizo para compilar el x86 free build environment, del windows 7, del ddk. El código del driver es este (faltan las rutinas de unload, y de control que no las pongo porque no importan en esta duda):

Código
  1. #include <ntddk.h>
  2.  
  3. const WCHAR Device[]=L"\\Device\\bananas";   //modo kernell
  4. const WCHAR sLink[]=L"\\DosDevices";   //modo usuario
  5. UNICODE_STRING Dev,lnk;
  6.  
  7. NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
  8. {   NTSTATUS s;
  9. unsigned int i;
  10.    //DriverObject->DriverUnload=Salir;
  11.    for(i=0;i<IRP_MJ_MAXIMUM_FUNCTION;i++)
  12.    {
  13.       // DriverObject->MajorFunction[i]=Control;
  14.    }
  15.    RtlInitUnicodeString(&Dev,Device);
  16.    RtlInitUnicodeString(&lnk,sLink);
  17.    s=IoCreateDevice(DriverObject,0,&Dev,FILE_DEVICE_UNKNOWN,0,0,&DriverObject->DeviceObject);
  18.    if (NT_SUCCESS(s))
  19.    {
  20.        s=IoCreateSymbolicLink(&lnk,&Dev);
  21.        if(!NT_SUCCESS(s))
  22.        {
  23.            IoDeleteDevice(DriverObject->DeviceObject);
  24.            DbgPrint("Linking Error");
  25.        }
  26.        else
  27.        {
  28.            DbgPrint("Cargado");
  29.        }
  30.    }
  31.    else
  32.    {
  33.        DbgPrint("Error IoCreate");
  34.    }
  35.    return STATUS_SUCCESS;
  36. }

Con este codigo me da "Linking Error", con lo cual el DeviceObject debería estar creado y llamarse "bananas", pero he buscado con el WinObject dentro del directorio "Device" y no he visto el objeto creado.

¿No debería de haberse creado el objeto "bananas" dentro del directorio "Device"?

Además tampoco he visto por ningún sitio el directorio DosDevices.

Un saludo.


Título: Re: una duda, intentando comunicar mu con mk.
Publicado por: Arkangel_0x7C5 en 9 Diciembre 2010, 15:39 pm
const WCHAR   sLink[]=L"\\DosDevices";   //modo usuario

Eso se supone que es un directorio donde debes de poner el nombre del enlace
typo: sLink[]=L"\\DosDevices\\bananas";

tambien puedes sustituir 'DosDevices' por '??' y funciona igual.


Título: Re: una duda, intentando comunicar mu con mk.
Publicado por: black_flowers en 10 Diciembre 2010, 11:25 am
vale, gracias.
Pero sigo sin entender por qué no encuenctro mi device creado con el nombre "bananas" en la carpeta "Device", con el WinObj. ¿no debería estar creado el dispositivo en dicha carpeta?

un saludo.


Título: Re: una duda, intentando comunicar mu con mk.
Publicado por: Arkangel_0x7C5 en 10 Diciembre 2010, 15:32 pm
Si, pero solo si no da error en alguna parte, por estas lineas:

Código
  1. IoDeleteDevice(DriverObject->DeviceObject);
  2. DbgPrint("Linking Error");
  3.  


Título: Re: una duda, intentando comunicar mu con mk.
Publicado por: black_flowers en 10 Diciembre 2010, 22:26 pm
estaba escribiendo aquí una parrafada que te cagas porque no me aparecía el objeto y acabo de entender tu respuesta. Es cierto que me dá ese error, y no me había fijado en que al dar ese error se destruye el DeviceObject con lo cual es lógico que no este cargado.

Bueno ahora habrá que intentar crear el simbolic link de manera satisfactoria,

sigo intentandolo, un saludo. ;D