Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: josprou en 3 Mayo 2015, 19:32 pm



Título: Visualizador del primer sector del disco: La tabla MBR
Publicado por: josprou en 3 Mayo 2015, 19:32 pm
Hola a todos!

Me gustaría saber si alguien ya ha desarrollado un visualizador de la tabla MBR, como Boot Record Parser.

La idea es crear un software capaz de leer la tabla MBR, volcarla a un fichero, visualizarla, y restaurarla.

Gracias


Título: Re: Visualizador del primer sector del disco: La tabla MBR
Publicado por: x64core en 5 Mayo 2015, 05:46 am
Hola a todos!

Me gustaría saber si alguien ya ha desarrollado un visualizador de la tabla MBR, como Boot Record Parser.

La idea es crear un software capaz de leer la tabla MBR, volcarla a un fichero, visualizarla, y restaurarla.

Gracias
Podes leer el MBR usando CreateFile pasando como ruta del archivo: "\\.\PhysicalDriveX" Donde 'X' es el indice del disco duro conectado al sistema, inicia desde cero. una vez tengas el Handle utilizas ReadFile para leer como cualquier otro archivo, 512 es el tamaño. una vez el buffer con la informacion es simple ya teniendo la estructura del MBR: http://en.wikipedia.org/wiki/Master_boot_record


Título: Re: Visualizador del primer sector del disco: La tabla MBR
Publicado por: Dessa en 6 Mayo 2015, 16:48 pm
Hola, Creo que una vez obtenido el Hundle (como te indica x64Core) tenés que manejarte con la función DaviceIOcontrol

https://msdn.microsoft.com/en-us/library/windows/desktop/aa363216(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/aa363216(v=vs.85).aspx)

https://msdn.microsoft.com/en-us/library/windows/desktop/aa363979(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/aa363979(v=vs.85).aspx)







Título: Re: Visualizador del primer sector del disco: La tabla MBR
Publicado por: RDGMax en 7 Mayo 2015, 01:49 am
Podes leer el MBR usando CreateFile pasando como ruta del archivo: "\\.\PhysicalDriveX" Donde 'X' es el indice del disco duro conectado al sistema, inicia desde cero. una vez tengas el Handle utilizas ReadFile para leer como cualquier otro archivo, 512 es el tamaño. una vez el buffer con la informacion es simple ya teniendo la estructura del MBR: http://en.wikipedia.org/wiki/Master_boot_record


Que respuesta mas basica e inutil.
El como si te dijera. facil. bajate el visual estudio y con el uso de las api correspondiente lo lograras


Título: Re: Visualizador del primer sector del disco: La tabla MBR
Publicado por: x64core en 7 Mayo 2015, 04:52 am
Que respuesta mas basica e inutil.
El como si te dijera. facil. bajate el visual estudio y con el uso de las api correspondiente lo lograras

Tampoco se necesita ser un genio RDGMax asi qué esperabas leer? Si esperabas que alguien publicará un programa completo para leer, escribir y manipular el MBR, todos los sectores junto con el código fuente, me temo que estas en el lugar equivocado. Igual dejo un código que hace lo que dije anteriormente.

PS: Lo siento por el código en C, seguro que no es dificil entenderlo para la gente que programa en VB.

Código:
#define SECTOR_SIZE 512 // 512 regular tamaño en bytes por sector,
// para asegurarse usar DeviceIoControl antes de leer con
// ReadFile/DeviceIoControl

BOOLEAN ReadMBR(
    _In_ ULONG HardDiskIndex
    )
{
    BOOLEAN bStatus;
    TCHAR Path[MAX_PATH + 1];
    HANDLE FileHandle;
    BYTE MBRRaw[SECTOR_SIZE];
    DWORD Read;

    bStatus = FALSE;
    wsprintf(Path, _T("\\\\.\\PhysicalDrive%u"), HardDiskIndex);
    FileHandle = CreateFile(
        Path,
        GENERIC_READ,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,
        NULL);

    if (FileHandle != INVALID_HANDLE_VALUE)
    {
        if (ReadFile(
            FileHandle,
            MBRRaw,
            SECTOR_SIZE,
            &Read,
            NULL
            ))
        {
            for (ULONG x = 0; x < SECTOR_SIZE; x++)
            {
                if (!(x % 10))
                {
                    printf("\n");
                }

                printf("%02X ", MBRRaw[x]);
            }

            bStatus = TRUE;
        }

        CloseHandle(FileHandle);
    }

    return bStatus;
}

INT __cdecl main()
{
    ReadMBR(0);
    return 0;
}



Y sí, como dijo @Dessa, es posible también leer el MBR con DeviceIoControl asi como con ReadFile.
¿Cual es la diferencia? Realmente no veo mucha diferencia, ambos terminan enviando un IRP al driver del File System.


Título: Re: Visualizador del primer sector del disco: La tabla MBR
Publicado por: okik en 7 Mayo 2015, 17:08 pm
Hola Josino

Lee en este Foro:
http://www.vbforums.com/showthread.php?599664-reading-writing-sectors-on-a-USB-memory-stick-including-MBR (http://www.vbforums.com/showthread.php?599664-reading-writing-sectors-on-a-USB-memory-stick-including-MBR)


Código de ejemplo:
http://www.vbforums.com/attachment.php?attachmentid=75666&d=1263714614 (http://www.vbforums.com/attachment.php?attachmentid=75666&d=1263714614)

Introduce un PenDrive (vacío) y sustituye la letra "H:" por la letra del PenDrive en esta línea:

Código
  1. If SplitMapping(0) = "H:" Then

Al hacer clic en el botón se leerán los dos primeros bytes del MBR. La línea "DirectWriteDriveNT SplitMapping (2), 0, 511, hex2ascii ("AA")" está desactivada porque es para escribir. "Ojo con eso".

El código debe iniciarse como "Administrador", así que si usas un cuenta de usuario limitada el programa no funcionará.

En cuanto a tu queja, entiendo tu malestar. A mi me pasa lo mismo. A veces pregunto y me contestan diciendo "haz un Read Truck" o algo así y es como si me dijeran "haz un chung ching chang". Vamos que me quedo igual. Pero a veces a pesar que la respuesta sea superbásica y vaga me sirve de referéncia para buscar en google, es decir, te indica un poco el camino.

Me recuerda un poco cuando estudiaba y usaba el Yahoo Respuestas para algo muy concreto y me contestaban "mira en le wikipedia" y se quedaban tan anchos  :xD

Yo siempre que puedo pongo ejemplos, porque me encantan lo ejemplos y aporto código e incluso programas completos. Siempre se ha de suponer que el que pregunta no pregunta por gusto, si no porque no sabe.

Te sugiero que cuando busques algo y no encuentres busques en Google en inglés. Por ejemplo pones "Read MBR VB6", incluso en chino o coreano. Encontrás mucha más información y código. Hazlo desde Chrome y cuando entres en la página en cuestión pulsa con el botón derecho del ratón y selecciona "Traducir esta página" y se pondrá en castellano (español). Lo malo es que si hay código de ejemplo también se traducirá "If i= 6 then" -> "Si i=6  entonces" ten en cuenta eso.