![]() |
MBR auslesen
Ich hab zu dem Thema schon ein bisschen gesucht, aber keine wirkliche Lösung gefunden, außer das HxD wohl direkt Festplattensektoren auslesen kann (aber ich wills ja selbst machen :lol: )
Hat jemand eine Idee wie sich der MBR auslesen lässt? Und nein, das hat nicht wirklich praktische Gründe, ich will ihn mir einfach nur mal anschauen :-D |
Re: MBR auslesen
Willst Du das aus Delphi heraus machen oder einfach nur mal nen MBR sehen?
|
Re: MBR auslesen
Ist relativ einfach.
Delphi-Quellcode:
Fertig.
fHandle := CreateFile(
PChar('.PHYSICALDRIVE0'), // ...PHYSICALDRIVE0 <--<< first Harddisk ( Primary Master ) GENERIC_READ, // ...read only FILE_SHARE_WRITE, // ...Wichtig, nicht das es Probleme gibt nil, OPEN_EXISTING, // ...ist klar warum 0, 0); if fHandle = INVALID_HANDLE_VALUE then begin ShowMessage('CreateFile - Error: Invalid Handle'); exit; end; Success := ReadFile(fHandle, Buffer, 512, // ....read the first 512 Byte (MBR) nBytesRead, nil); CloseHandle(fHandle); // ...Schnell wieder dem MBR zu-machen ;-) // --- nun sollte man den MBR im Array "Buffer" haben --- Anmerkung:
|
Re: MBR auslesen
Ich hätte das jetzt mit Linux und dd gemacht ;)
|
Re: MBR auslesen
Zitat:
Was ist ein "dd" ? |
Re: MBR auslesen
dd ist ein Linux Programm im Images von Partitionen und Festplatten zu erzeugen. Steht wohl für DiskDouble oder so was. Komischerweise wird dd oftmals von Virenscanner als Malware eingestuft.
|
Re: MBR auslesen
[OT] dd steht für Copy & Convert. Da aber das Kürzel cc bereits für den C-Compiler reserviert war, hat man einfach den nächsten Buchstaben genommen. [/OT]
|
Re: MBR auslesen
Hmpf, dann eben so.
Übrigens brauht man auch unter XP für den direkten physischen Zugriff auf Laufwerke Administratorenrechte. |
Re: MBR auslesen
och, gibt auch die interpretation "dump device" or "data destroy"...
|
Re: MBR auslesen
Der Code von turboPASCAL funktioniert bei mir leider nicht. Bekomme immer als Rückgabewert immer INVALID_HANDLE_VALUE.
Hat das vielleicht noch jemand ausprobiert? |
Re: MBR auslesen
Administratorrechte hast Du?
[edit] Probiert - geht bei mir auch nicht (XP SP 3) [/edit] |
Re: MBR auslesen
Ja, Adminrechte hab ich. XP pro SP2
|
Re: MBR auslesen
So gehts bei mir
Delphi-Quellcode:
Gruss, Jörn
procedure TForm1.Button1Click(Sender: TObject);
var nBytesRead , fHandle : Cardinal; Buffer : Array of Byte; Success : Boolean; begin fHandle := CreateFile( PChar('\\.\PHYSICALDRIVE0'), // ...PHYSICALDRIVE0 <--<< first Harddisk ( Primary Master ) GENERIC_READ, // ...read only FILE_SHARE_WRITE, // ...Wichtig, nicht das es Probleme gibt nil, OPEN_EXISTING, // ...ist klar warum 0, 0); if fHandle = INVALID_HANDLE_VALUE then begin ShowMessage('CreateFile - Error: Invalid Handle'); exit; end; SetLength(Buffer,512); // ....read the first 512 Byte (MBR) if not ReadFile(fHandle, Buffer[0], 512, nBytesRead, nil) then begin ShowMessage('ReadFile - Error'); end; CloseHandle(fHandle); // ...Schnell wieder den MBR zu-machen ;-) // --- nun sollte man den MBR im Array "Buffer" haben --- end; |
Re: MBR auslesen
Jo, bei mir auch (was so ein paar läppische Backslashes nicht ausmachen können :mrgreen:).
|
Re: MBR auslesen
Entschuldigung, die habe ich unterschlagen. ( Absichtlich ?! :gruebel: :stupid: )
|
Re: MBR auslesen
Huch erst nichts und auf einmal so viel hier drin. :P
Bin zwischenzeitlich zum selben Ergebnis gekommen, kam aber noch nicht dazu, das zu posten (Schule und so...). :wink: Das ganze lässt sich noch mit SetFilePointer errweitern um beliebige Sektoren auszulesen und mit WriteFile und GENERIC_WRITE Rechten lässt sich auch schreiben, auch dazu sind Adminrechte von nöten. Dabei sollte allerdings - insbesondere im MBR (erster Sektor) und den folgenden Sektoren - vorsichtig sein, da hier falsche Änderungen sehr schnell dazu führen können, dass sich das System nicht mehr booten lässt.
Delphi-Quellcode:
Danke an alle die MBR-Sache hat sich für mich damit erledigt. :thumb: :dp:
type
TMBR = array[0..511] of Byte; var Mbr: TMBR; i: Word; Errorcode: Cardinal; function ReadMBR(var Buffer: TMBR): Boolean; var hDevice: THandle; //Handle der Festplatte NumberOfBytesRead: DWORD; begin //Handle anforern hDevice:= CreateFile(LPCTSTR('\\.\PHYSICALDRIVE0'), GENERIC_READ, //Schreib-/Leserechte: nur Lesen FILE_SHARE_READ or FILE_SHARE_WRITE, //Lese- und Schreibrechte teilen PSecurityAttributes(nil), //lpSecurityAttributes OPEN_EXISTING, //nur öffnen wen nschon vorhanen (Standard bei allem außer Dateien) 0, //dwFlagsAndAttributes, THandle(0)); //hTemplateFile: NULL if (hDevice = INVALID_HANDLE_VALUE) then begin Result:= false; //Fehler Exit; end; //auslesen, bei Fehler ggf. GetLastError; Fehler wenn <> 0 Result:= ReadFile(hDevice, {@}Buffer, 512, {@}NumberOfBytesRead, nil); //NumberOfBytesRead enthält die gelesenen Bytes. //Handle freigeben CloseHandle(hDevice); end; begin if(ReadMBR(Mbr)) then begin for i:= 0 to High(Mbr) do begin Write(Format('%.2x', [Mbr[i]])); //16 Werte pro Zeile if(((i+1) mod 16) <> 0) then Write(' ') else Writeln; end; end else begin Write('Errorcode: '); Errorcode:= GetLastError; Writeln(Errorcode); case Errorcode of 5: Writeln('Access is denied.'); else Writeln('Unknown error.'); end; end; Readln; end. (Ich schau mir nur grade historische Linux-Kernel an und wollte den MBR mal bei einem funktionierenden System betrachten, komme aber im Moment noch nicht so wirklich drauf wie die Funktionsweise der Loader so funktioniert :gruebel: Mag dran liegen das sie in Asm sind und mir zum Thema (also Kernel nicht Asm grundsätzlich) noch insgesamt zuviel Hintergrundwissen fehlt.) |
Re: MBR auslesen
Zitat:
|
Re: MBR auslesen
Naja es gibt sicherlich auch Ausnahmefälle wo sowas sinnvoll sein kann, Tools zum partitionieren oder zum resizen von Partitionen, wenn Windows damit grundsätlich Propleme hätte könnte man sowas ja zum Beispiel ja nicht ohne windows-eigene Programme lösen oder Bootmanager verwenden, dennoch sollte man wissen was man macht (und sowas besser in einer VM testen).
|
Re: MBR auslesen
Zitat:
Naja, aber aus der Zeit von Win 3.1 sind wir raus. :stupid: [/OT] |
Re: MBR auslesen
PChar('\\.\PHYSICALDRIVE0') :
Wie bekomme ich raus, was für andere Geräte am System angeschlossen sind ? MfG |
Re: MBR auslesen
Zitat:
![]() ![]() |
Re: MBR auslesen
unter unix brauchts dafür kein tool.
das normale fdisk kann das auch Gruss Kh |
Re: MBR auslesen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz