Autor Beitrag
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Fr 16.05.03 09:59 
Hi Leute, vielleicht bekomme ich ja doch noch eine Hilfe, ohne dass ich einen Treiber schreiben muss.

Im Prinzip geht es darum, dass ich einen Virenscanner schreiben will. Er soll den Start von Exe-Dateien und Com-Dateien oder mindestens einer Exe verhindern. Im Prinzip sind die Exe-Dateien ja mittlerweile mit einem PE-Header aufgebaut. Der Kernel müsste also hergehen und den Header erst auslesen und dann für die Pages der Exe entsprechende Speicherbereiche, etc. reservieren. Dann wird er wohl den Startschuss geben und ab dem Einstiegspunkt der Exe geht es los mit dem Ausführen.

Spätestens da soll vorher mein Programm eingreifen und solange kein OK zum Start der Exe geben bis sich herausgesellt hat, dass sie clean ist. Wenn man schon früher eingreifen kann, wäre das nicht schlecht. Ich will ja nur zwischenzeitlich die Exe scannen und dann den Start verhindern können, falls sie von einem Virus befallen ist.

Vielleicht ist mein Ansatz jedoch falsch... aber ich finde nichts im Netz wie ich das programmieren kann. Bin für jede Code-Hilfe dankbar... die mich der Lösung ein Stück näher bringt.. achja... und ich denke schon dass die Möglichkeit ohne Treiber gegeben sein sollte, das zu schaffen oder ohne VC++. Ich hab auch schon an einen Hook gedacht aber das wird wohl nicht helfen. :cry:
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Fr 16.05.03 10:22 
ShadowCaster hat folgendes geschrieben:
Ich hab auch schon an einen Hook gedacht aber das wird wohl nicht helfen.

Doch, der kann sehr wohl helfen um einen globalen API Hook zu installieren.

Die einfachste Methode ist, den Eintrag
[*************************************ENTFERNT
**********************]
Mit ParamStr(1) bekommst du dann den Exe-Dateinamen und kannst ihn auswerten. Starten musst du das Programm dann per CreateProcess. Und da ist auch schon die Schwachstelle gefunden. Diese Methode funktioniert nur mit ShellExecute ausgeführe Programme, wie es der Windows Explorer macht.

Beim API Hook wird es schwieriger. Unter WindowsNT/2000/XP geht das indem du dir mit VirtualProtect den Zugriff auf die API Funktion CreateProcess erlaubst und dann dort deine Scanfunktion injezierst. Da unter WinNT Systemen auf den System-Adressbereich ein "Copy on Write" Zugriff besteht, muss du über den Hook (in einer DLL) auf alle laufenden Prozesse diesen API Hook anwenden.

Bei Windows 9x/ME sieht die Sache ganz anders aus. Dort gibt es nur einen, für alle Programme zu Verfügung stehenden System-Adressraum. Wenn mal also dort etwas verändert wirkt sich das auf alle Programme aus. Nun hat aber ein Windows Explorer keinen Zugriff auf die Delphi-RTL und somit braucht man hier ganz andere Methoden.

Mehr Infos unter http://www.madshi.net/

_________________
Ist Zeit wirklich Geld?


Zuletzt bearbeitet von AndyB am Fr 16.05.03 10:37, insgesamt 1-mal bearbeitet
ShadowCaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Fr 16.05.03 10:34 
So genial! Endlich mal eine Antwort mit der ich richtig was anfangen kann :) Tausend Dank. Das bringt mich sicher eine ganze Ecke weiter 8) Ich hab inzwischen 30 Anfragen mit insgesamt über 150 PC's die vom Pinfi-VIrus befallen sind. Ich hab den Virus geknackt (er hatte auch meinen PC infiziert) und naja einen Virenscanner geschrieben. Dieser Virus infiziert Exe-dateien und ich wollt gern die Scanfunktion adden. Ich will den Scanner aus dem Grund selbst programmieren, weil alle auf dem Markt verfügbaren Scanner den Pinfi-Virus nicht sauber aus Exe-Dateien oder vom System entfernen können. Ich weiß wie ich ihn entfernen kann und damit er nicht wieder auftaucht will ich gern ähnlich des ondemand-scanners von F-Prot mein System schützen :)
ShadowCaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Fr 16.05.03 10:39 
Nachtrag... hm... ich hab mir das mal angeschaut. Die dort beschriebenen Funktionen benutzt teilweise auch dieser Virus, den ich disassembliert hab. Er hängt sich an laufende win32-Prozesse im Arbeitsspeicher und ist so unsichtbar. Er extrahiert eine Dll im Windows/Temp-Verzeichnis und lädt diese an laufende Prozesse. Ist ja interessant. Schon witzig, wie der offenbar etwas geisteskranke (sonst hätte er keinen Virus programmiert) Programmierer beim Proggen des Viruses vorgegangen ist. Man muss den Feind (Virus) eben mit den gleichen Waffen schlagen *g*. So sollte es mir ja auch jetzt möglich sein, laufende win32-Prozesse nach dem Viruscode zu scannen und zu beenden.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Fr 16.05.03 10:42 
ShadowCaster hat folgendes geschrieben:
Endlich mal eine Antwort mit der ich richtig was anfangen kann

Was tut man nicht, um keine Delphianer an C++ zu verliehren. :lol:

Das unter WindowsNT/2000/XP habe ich selbst schon hinbekommen. Die Win9x/Me theorie habe ich nie richtig ausprobiert, da der Delphi Debugger dort einen DebugChunk für alle API Funktionen installiert. Das was ich damals vor hatte, habe ich mittlerweile ganz anders gelöst, weil es für meine Problemstellung nicht notwendig war, einen globalen API Hook zu installieren.

Ach ja: Über google.de findet man sogar ein APIHook SDK für sage und schreibe US $9999.95 :roll:

_________________
Ist Zeit wirklich Geld?
ShadowCaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Fr 16.05.03 10:45 
Sorry, dass ich schon wieder schreibe! Eine wichtige Frage noch. Auf deiner angegebenen Homepage kann ich mir nirgends den Sourcecode bzw. die Packages zu den Hookingfunktinoen und die Libraries komplett runterladen. Hast du vielleicht einen direkten download-Link?
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Fr 16.05.03 10:52 
Zitat:
Sourcecode

Den gibt es leider nicht. Deswegen, habe ich versucht es aus der Theorie heraus nach zu programmieren, was mir aber nur unter WindowsNT/2000/XP gelang.

Man klicke auf der Seite auf [www.madshi.net] und dann auf Delphi.
Hier der direkte Link, der aber wegen des fehlenden Framesets einen Scriptfehler hervoruft.

_________________
Ist Zeit wirklich Geld?
ShadowCaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Fr 16.05.03 11:00 
ich habs gefunden (komplett) ;) Also laut Hersteller steht drinnen, dass der Quellcode bei den Hooking-Funktionen drinnen ist. Ist doch ok. Werd mir das mal reinziehen.