Escribir en MBR

Iniciado por Vaagish, 19 Octubre 2013, 23:12 PM

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

Vaagish

Buenas, la consulta es la siguiente: Que tan complicado puede ser escribir en el MBR del disco? Se puede solo con ensamblador o tiene que ser en Ring0?

Saludos!

Eternal Idol

Hay que partir de la siguiente base: bajo un S.O. moderno podes hacer lo mismo con ensamblador que con C/C++. Con la API de Windows podes hacerlo (ver CreateFile, Physical Disks and Volumes).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Jamas pense que CreateFile podria hacer eso.. un poco inseguro por parte del equipo microsoft  :silbar:

Ahora tengo mas para estudiar.. Gracias!!!  ;-)

Eternal Idol

Necesitas privilegios de administrador (con los mismos podes cargar un modulo de modo Kernel).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Si, el tema de los privilegios me lo habia imaginado.. pero ta, en realidad no es lo que me preocupa..  aparte tambien sigo leyendo "programming the windows driver model"  :silbar:

La idea es leer un poco de ambas cosas, asi como para cambiar un poco el tema y no enloquecerme  :xD
Si surgen dudas, vuelvo a preguntar.. Gracias!!

Eternal Idol

De nada; no lo decia como problema sino que la barrera de seguridad es esa.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

cpu2

Tambien tienes la opcion en ASM de usar la direccion 0x7c00, en ring0 claro.

Cualquier cosa de estas que hagas en ring0, podrias compartirla si quieres.

Un saludo.

Vaagish

#7
Si logro algo lo comparto, claro! Igual dudo que sea dentro de poco.. Aun no caigo del todo en el Ring0, ya tengo algunas dudas, pero voy a esperar a leer un poco mas, para no quedar tan molesto..

Por el momento estoy viendo CreateFile y DeviceIoControl (que me la vuelvo a cruzar tambien aca, digo porque tambien la he visto con el tema de los drivers.. )
CitarHANDLE WINAPI CreateFile(
 _In_      LPCTSTR lpFileName,
 _In_      DWORD dwDesiredAccess,
 _In_      DWORD dwShareMode,
 _In_opt_  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
 _In_      DWORD dwCreationDisposition,
 _In_      DWORD dwFlagsAndAttributes,
 _In_opt_  HANDLE hTemplateFile
);
CitarlpFileName [in]
The name of the file or device to be created or opened.

Ahora me surge la duda con CreateFile si tengo que crear un dispositivo, abrirlo, o escribirle dentro un archivo, el problema es que siquiera se que rutina se ejecuta ahi dentro.. digamos que quiero empezar por escribirle en el MBR un llamado a un programa, asi lo ejecuto, pero no desde el registro de windows, por el momento voy a seguir buscando, se agradece cualquier fuente de estudio o dato importante  :silbar:

PD: Aca hay un ejemplo muy bueno para obtener informacion del disco:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363147(v=vs.85).aspx
Se puede ver como "llama" al disco para ser leido: #define wszDrive L"\\\\.\\PhysicalDrive0" y otras cositas importantes  ;-)

Eternal Idol

Cita de: cpu2 en 22 Octubre 2013, 00:55 AM
Tambien tienes la opcion en ASM de usar la direccion 0x7c00, en ring0 claro.

Cualquier cosa de estas que hagas en ring0, podrias compartirla si quieres.

¿Vos probaste esto? No te olvides que toda la memoria que manejas directamente es virtual (esa que mencionas es una direccion fisica) y no estas trabajando en modo Real sino en modo protegido o largo. Mas alla de esto que es elemental la BIOS lee de un disco la MBR poniendola en MEMORIA RAM, modificar esa memoria no afecta a los datos del disco ...

Vaagish: mira que lo que hay en la MBR es codigo de 16 bits ... no esperes que sea capaz de llamar a la API de Windows para ejecutar un programa tuyo ... CreateFile con OPEN_EXISTING como dice la documentacion es lo que tenes que hacer.

http://wiki.osdev.org/MBR_%28x86%29
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Buenas!!  ;D Bueno, esto se puso interesante, al momento de hacer la consulta, no tenia idea que escribir en el MBR tenia tanta similitud con los drivers, pero me vino como anillo al dedo.. y ahora si voy a consultar algunas cosas, ya que despejo dudas de drivers y del mbr...

Por lo que vengo entendiendo, para comunicarse con el disco, lo hace de igual manera que se comunica una aplicación con un driver, no? O es que en realidad estoy llamando a algún driver?
Una duda que tengo con los drivers es si siempre es necesario "hablar" de un dispositivo,, o sea,, los drivers solo sirven para la comunicación con hardware, o puedo ejecutar en un driver una rutina cualquiera? (Hacer alguna cuenta, inyectar algo, etc..)
Y volviendo al tema, hasta CreateFile entiendo, que puedo "comunicarme" con el dispositivo y obtener un handle al mismo.. ahora.. lo que me esta quemando es saber si tengo que escribir ahí dentro en alguna dirección especifica, y algo como que?? Puedo empezar a escribirle dentro cualquier cosa,, pero seguro que no va a arrancar mas el SO  :silbar:
Estaría bueno ver un código de MBR, pero no creo que sea posible eso..

Saludos y Gracias!!