Entwickler-Ecke

Windows API - Bootsector und Exe-Execution...


ShadowCaster - Fr 02.05.03 10:30
Titel: Bootsector und Exe-Execution...
Hi Leute,

ich möchte gern 2 Sachen machen. 1. Den Bootsector eines beliebigen Datenträgers oder Laufwerks dumpen (unabhängig vom Filesystem) und 2. möchte ich von windows an meine Anmeldung mitgeteilt bekommen oder es von windows abrufen, BEVOR eine Exe ausgeführt wird. Diese Exe soll einem Scan unterzogen werden. Sofern die Exe ok ist, darf sie ausgeführt werden. Ansonsten soll sie für windows gesperrt werden.

Könnt ihr mir da helfen? Wofür ich das brauche? Ganz einfach, ich möchte meinen Virenscanner den ich mir geschrieben habe um einige Features verbessern *g* 8)

Also vielen Dank

(achja: der Bootsector soll ja nur gedumpt werden erstmal. ich glaub kaum dass es so einfach ist, den zu patchen und von Jumpadressen zu viren zu befreien ;))


Delete - Fr 02.05.03 12:56

Zweites geht wohl mit einem Hool.


ShadowCaster - Fr 02.05.03 13:10

Hool? du meinst nicht Hook?


Delete - Fr 02.05.03 13:30

Ach, ob "k" oder "l" oder "j", liegt doch alles nebeneinander auf der Tastatur. :roll:


ShadowCaster - Fr 02.05.03 13:38

ist ja witzig. Werd mal schauen. aber wie soll ich dem Kernel sagen: Hey du Mistprog... *g*, lass mal schön die Finger von der Exe. Da ist ein Virus drinnen, du deppischer Kernel!
:lol: :lol: :lol:

wie ?? *g*


Delete - Fr 02.05.03 13:45

Hm, das könnte ein Problem werden. Ein Hooj bekommt ja auch erst alles mit, nach dem das schlimmeste schon vorbei ist. Zu mindest bei einem Shell-Hool dürfte das so sein.

Hast du dich schon mal informiert, wie das Anti-Viren-Software macht?

Im ungünstigsten Fall mußt du wohl einen Treiber schreiben, der direkt auf die Hardware kontrolliert. Aber da ist ja auch wieder das Problem, damit dein Programm die Exe scannen kann, muß sie ja in den Arbeitsspeicher geladen werden und an der Stelle mußt du verhindern, dass Windows das Programm erst ausführt, wenn dein Programm das OK gegeben hat.

Es steckt also noch jede Menge Theorie darin bevor du asuch nur die erste Zeile Code tippen kannst. Und dann stellt sich die Frage, ob man nicht besser C/C++ nimmt wegen der Hardwarenähe.


ShadowCaster - Fr 02.05.03 13:55

Naja, ich arbeite mich nebenher in Assembler ein und ich glaub der Inlineassembler von Delphi ist mir hardwarenahe genug. Zudem verfügt Delphi über sämtliche API-Schnittstellen wie c++ auch (oder?). Ich weiß nicht was hardware naher sein soll.

Das mit der Theorie ist mir bewusst. Erstmal alle Wege finden und dann den besten auswählen. Aber selbst wenn ich das in c++ schreiben soll, kein Problem. das krieg ich auchnoch.


Delete - Fr 02.05.03 13:58

Wenn es auf einen Treiber hinausläuft, dann mußt du C/C++ und den Visual C Kompiler nehmen, da man mit Delphi keine Treiber schreiben kann. Desweiteren auch wenn es ohne Treiber gehen sollte, du aber direkt auf die Hardware zugreifen mußt, mußt du doch einen Treiber schreiebn, da du unter NT-basierenden Systemen nicht direkt auf die Hardware zugreifen kannst.


ShadowCaster - Fr 02.05.03 14:00

ui. Allerdings ist bei mir der Norman-virenscanner auch so aufgebaut und der checkt einfach nur ab ob eine Exe geöffnet wird. Er öffnet sie vorher und wenn die Exe ok ist, gibt er sie frei, ansonsten ändert er die Zugriffsberechtigung der exe. Hab ihn bei mir laufen und mein Delphi bringt mir oft meldungen wie: die Datei blabla.dcu ist schreibgeschützt. Wenn ich dann nochmal auf compilieren klicke, gehts.


Delete - Fr 02.05.03 14:04

ShadowCaster hat folgendes geschrieben:
Er öffnet sie vorher

Und genau das ist der Knackpunkt: Wie macht er das?


Motzi - Fr 02.05.03 14:05

Ich schätze mal da steckt ein Treiber dahinter...!


Delete - Fr 02.05.03 14:08

Womit wir dann bei C/C++ gelandet wären. :mrgreen:

Ich denke auch, dass ein Treiber dahintersteckt, allerdings habe ich keinen Plan, wie der aussehen müßte.


ShadowCaster - Fr 02.05.03 14:38

reicht nicht einfach ein Dienst? ich will aber kein c++.. der Dreck *g*


Delete - Fr 02.05.03 14:54

Nein. Ein Dienst reicht nicht, da auch ein Dienst nicht im Kernel-Modus operiert. Aber das ist zwingend erforderlich.[url][/url]


ShadowCaster - Fr 02.05.03 14:56

naja.. also ein Treiber in Form einer Dll? hm.... weil soweit ich es erkennen kann, benutzt der norman antivirus z.B. auch keine Dll's mit diesen Funktionen, sondern Exe-files.


Delete - Fr 02.05.03 14:57

Sicher? Diemüssen ja nicht improgrammverzeichnis liegen. Wer weiß wo der seien dateien überall hin installiert. Aber der Treiber muß in eien DLL.


ShadowCaster - Fr 02.05.03 14:59

hm... kann gar nicht verstehen, dass man in delphi keine Treiber schreiben kann. Das ist mir unverständlich. ... :( Ich will aber kein c++ ... da kann ich mich ja gleich foltern lassen.


ShadowCaster - Fr 02.05.03 15:01

Ok, das bringt uns wohl nicht weiter, denke ich. Dann mal die Frage, wie ich den bootsektor aus Partitionen udn Laufwerken auslesen kann. Wenn ich danach googlele lande ich immer nur auf Warez-Sites und wie ich Passwörter auslese und wie ich XXX-Sites hacke! Das will ich aber nicht wissen *g*


Delete - Fr 02.05.03 15:05

Na ja. ich denke schon, dass wir weitergekommen sind. Du mußt dich eben damit abfinden einen Trieber zu schreiben.

Ansonsten gilt: neue Frage, neuer Thread.


ShadowCaster - Fr 02.05.03 15:15

nunja,... neuer Thread.. ich will ja nicht spammen aber ok. Werde bei Gelegenheit einen erstellen. :?


ShadowCaster - Fr 02.05.03 16:28

Dennoch eine Frage... Warum ist es definitiv nicht möglcih in delphi einen Treiber zu schreiben. ist das nicht nur eine Dll die einen bestimmten für windows-benutzbaren Funktionsbereich exportieren muss? Also ich hab bei der windows SDK schon einige Sachen gelesen, wie man sowas macht und dann ist ja ja noch das DDK für Windows. Also wenn das in c++ geht, muss es doch auch in delphi gehen, oder nicht? Kann man in delphi7 denn treiber schreibenn wenns in 5 nicht geht?


Delete - Fr 02.05.03 16:34

Warte mal. Ich suche mal eben was raus.

Zitat:

Delphi ist ein Tool, dass dahingehend optimiert und entwickelt wurde, um schnellstmöglich Anwendungen für den Benutzermodus in Win32 (bevorzugt GUI) zu entwickeln.

Probleme:
- im Kernelmodus herrschen ganz andere Spielregeln,
- das Layout des resultierenden Images (PE/COFF-Format, kurz .exe und .dll) läßt sich beim Object Pascal Compiler/Linker nicht genügend beinflussen, um überhaupt erfolgreich vom Kernel akzeptiert zu werden
- Visual C++ ist die _einzige_ unterstützte Entwicklungsplattform für Anwendungen im Kernel-Modus...
- es gibt also folglich keine Units dafür und Du kannst bei 0 (nichts, nada, nil) mit reinem Assembler anfangen (sonst bekommst Du nichtmal die Init-Callback-Funktion hin), kein Speicher-Manager, keine Compiler-Magic, _keine_ Win32 API-Funktionen...
- ...selbst wenn sich jemand die Arbeit macht das Device Driver Kit (DDK) nach Object Pascal zu 'übersetzen', wird er feststellen, das selbige Sprache einige Features nicht hat, die dort ausgiebig benutzt werden ( z.B. Makros, 'fastcall' (Microsoft-spezifische Aufrufkonvention, vergleichbar mit 'register' in Pascal) und Unions (bedingt übersetzbar) ... )

Das waren nur die gröbsten technischen Probleme.
Alleine die Einarbeitung in das Thema Treiberentwicklung erfordert einen nicht zu unterschätzenden Aufwand. [...]

...insofern rate ich davon ab, zu versuchen mit Delphi (mal eben) einen Treiber zu schreiben.
Das haben andere schon getan, es reicht aber nicht zu mehr als: 'hm, geht mit viel Arbeit + HexEditor, aber macht irgendwie keinen Sinn'.

Ich hoffe das war deutlich genug. Dem interessierten Entwickler sei passende Lektüre (mind. DDK) empfohlen.

NicoDE


ShadowCaster - Fr 02.05.03 16:44

Ok... dann mal eine Frage: Krieg ich denn mit Borland c++ 5 einen Treiber geproggt? Das hab ich nämlich. Nur soviel ich weiß, sind borland c++ und borland delphi ziemlich ähnlich. Wäre nur eine Frage weil visual c++ wäre in der Registrierung verdammt teuer.

PS: Echt vielen Dank für deine weiten Ausführungen. in dem Forum lernt man eine ganze Menge dann Leuten wie dir. Also Danke :)


Klabautermann - Fr 02.05.03 16:49

Luckie hat folgendes geschrieben:
Warte mal. Ich suche mal eben was raus.

Zitat:
[...]
- Visual C++ ist die _einzige_ unterstützte Entwicklungsplattform für Anwendungen im Kernel-Modus...
[...]


Gruß
Klabautermann


ShadowCaster - Fr 02.05.03 16:53

ähm.. ok :oops:
... ist aber ne ganz schöne Sauerei, wenn ich extra einen vc++-Compiler für über 1000 Euro kaufen muss, um einen Treiber entwicklen zu können, wo ich doch schon 3000 Euro für Delphi ausgegeben hab! :x


Klabautermann - Fr 02.05.03 17:36

Hallo,
ShadowCaster hat folgendes geschrieben:
extra einen vc++-Compiler für über 1000 Euro kaufen muss, um einen Treiber entwicklen zu können, wo ich doch schon 3000 Euro für Delphi ausgegeben hab!

wieos extra? Micro$oft geht davon aus das du dir nur dieses kaufst.
Wie ich das einschätze ist einfach der Markt der Treiberprogrammierer zu klein als das sich eine andere Firma drum bemühen wollte. Borland bemüht sich ja eigendlich immer alles wichtige zu unterstützen (akkut z.B. Linux & .NET). Das sie bewust auf treiber verichten liegt wohl nicht zu letzt dadran, das man mit dem Argument "kann auch Treiber erstellen" nicht viele Kunden ködern kann, aber viel Arbeit reinstecen muss.

Gruß
Klabautermann