PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unter Protecded Mode auf MBR schreiben


HERRRMANN_DELIK
19.07.2004, 20:44
Würde gerne mit der Windows API direkt auf den MBR schreiben. Ging ja unter DOS ganz einfach. Will keinen Virus schreiben. Ist für ein Schulprojekt um ein Programm zu realisieren das ähnlich wie Ghost arbeitet.......
Hab schon mit der CreateFile() Methode unter C++ veruscht hat nicht funktioniert.
Mit welcher API Fuktion kann ich dies realisieren, notfalls auch mit dem MASM.


Patrik Graf
19.07.2004, 21:31
Würde gerne mit der Windows API direkt auf den MBR schreiben. Ging ja unter DOS ganz einfach. Will keinen Virus schreiben. Ist für ein Schulprojekt um ein Programm zu realisieren das ähnlich wie Ghost arbeitet.......
Hab schon mit der CreateFile() Methode unter C++ veruscht hat nicht funktioniert.
Mit welcher API Fuktion kann ich dies realisieren, notfalls auch mit dem MASM.
Ich geb dir mal einen kurzen vorgeschmack auf das, was dich erwartet, wenn du das tun willst was du vor hast...

>>Klick mich<< (http://www.spotlight.de/zforen/ccc/m/ccc-1085996250-5354.html)

Willst du jetzt immer noch was in den Bootsektor schreiben? :D

Ist ja eigentlich nicht sooo viel, aber doch mehr als man erst denkt...

HERRRMANN_DELIK
21.07.2004, 19:32
Kenne diese Code Beispiel, weis aber nicht ob das unter 2000 funktioniert.
Kenne mich nämlich mir der API von Windows sehr schlecht aus.
Oder ist der Code grundlegend der gleiche ??

Patrik Graf
22.07.2004, 01:36
Kenne diese Code Beispiel, weis aber nicht ob das unter 2000 funktioniert.
Kenne mich nämlich mir der API von Windows sehr schlecht aus.
Oder ist der Code grundlegend der gleiche ??
Der Code ist eigentlich immer der gleiche... die Frage ist nur, ob das OS es zulässt auf den Bootsektor zu schreiben.

HERRRMANN_DELIK
22.07.2004, 10:25
Also der obige Quellcode ist alt und MAKRO Definitionen fehlen auch.

Hab hier ein Code der etwas übersichtlicher ist und ich auch besser verstehen.
Hiermit kann man in diesem Fall die ersten 512 Bytes der PArtition auslesen, und auf der Konsole ausgeben.
Das schreiben sollte über die Flags leicht zu lösen sein :-)

Das Beispiel ist vom Borland Builder 5.01, Konsolenanwendung.
==============================================
==============================================

#pragma hdrstop
#include <condefs.h>
#include "iostream.h"
#include "windows.h"

int main()
{
HANDLE Handle;
DWORD NumRead;
char Buffer[512];

Handle = CreateFile("\\\\.\\E <http://\\\\.\\E>:",
GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING,
NULL);
if(Handle != NULL)
{
if(ReadFile(Handle, Buffer, 512, &NumRead, NULL) != 0 && NumRead == 512)
{
int i=0;
cout << "Ersten 512 Bytes von E:" << endl;
while(i!=80)
{
cout << "=";
i++;
}
cout <<endl;
i=1;
while(i!=512)
{
cout <<Buffer[i];
i++;
}
}
else cout<<("SCHADE SCAHDE");
CloseHandle(Handle);
}
else
{
cout <<"SCHADE SCHADE!";
}
cin.get();cin.get();
return(0);
}

Patrik Graf
22.07.2004, 11:12
Jo... aber die ersten 512 Bytes einer Partition sind nicht der Bootsektor... Der Bootsektor hat nämlich kein Verzeichnis wo man als "Datei" angeben könnte... deswegen wirds auch so nicht funktionieren.

Du wirst dich wohl oder über mit den Partitionstabellen auseinandersetzen müssen... ;)

HERRRMANN_DELIK
22.07.2004, 13:27
Was du alles weisst. :-)

Aber wenn ich den BR, ich denke du meinst den MBR, auslesen möchte langen mir 512 Bytes, ich muss nur den Namen des laufwerks (im obigen Beispiel) ändern dort einfach die Physikalische Bezeichnung eingeben und gut ist, un schon steht der MBR in der Konsole.

Patrik Graf
22.07.2004, 13:45
Was du alles weisst. :-)

Aber wenn ich den BR, ich denke du meinst den MBR, auslesen möchte langen mir 512 Bytes, ich muss nur den Namen des laufwerks (im obigen Beispiel) ändern dort einfach die Physikalische Bezeichnung eingeben und gut ist, un schon steht der MBR in der Konsole.
So... hab mich umgesehen nach der physikalischen Bezeichnung des BR... jedoch scheint er keine zu haben. Es gibt jedoch eine Menge Beispiele in ASM, mit denen du den BR auslesen kannst. Um das zu nutzen brauchst du nur das "__asm" statement zu benutzen und den ASM-Code reinschreiben... dann sparst du dir das ganze WinAPI-Zeugs... ;)

An sonnsten kann ich dir leider nicht weiterhelfen... sorry :(

HERRRMANN_DELIK
22.07.2004, 14:18
Also du schreibst in meinem Beispiel statts E: einfach
PHYSICALDRIVE0 // erste HD
PHYSICALDRIVE1 // zweite HD
........
und schon hast du den Mbr in der Konsole stehen.
Um auf ihn zu schreiben musst du bei CreateFile die richtigen Flags setzen.
Und dann los :-)

Infos dazu bei MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/createfile.asp

Patrik Graf
22.07.2004, 14:39
Also du schreibst in meinem Beispiel statts E: einfach
PHYSICALDRIVE0 // erste HD
PHYSICALDRIVE1 // zweite HD
........
und schon hast du den Mbr in der Konsole stehen.
Um auf ihn zu schreiben musst du bei CreateFile die richtigen Flags setzen.
Und dann los :-)

Infos dazu bei MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/createfile.asp
Oh... wieder was dazugelernt... :D