Nehmen wir mal an, der Virenscanner-Prozess heißt rtvscan.exe.
Die DLL wird in diesen Prozess injiziert.
Die DLL hat eine Startprozedur, die jedes Mal, wenn sie von einem Prozess geladen wird, aufgerufen wird. In der Startprozedur wird überprüft, wie der aktuelle Prozess heißt. Wenn der Prozess "rtvscan.exe" heißt, ruft die DLL TerminateProcess auf. Der Prozess killt sich zuzusagen selbst.
Wie kriegt man nun die DLL in den Prozess?
Da gibt es mehrere Möglichkeiten.
(Ich bin selbst noch Laie, daher möge man mich korrigieren, wenn ich was Falsches schreibe.)
Ich habe mich entschieden, Win32 Hooks zu verwenden. Hooks funktionieren in etwa so:
Windows Prozesse laufen alle voneinander getrennt in ihrem eigenen Speicherbereich. Sie kennen nur sich selbst und keinen anderen Prozess. Dennoch gibt es Möglichkeiten, wie sie untereinander kommunizieren können. Sie können sich z.B. über die Windows-API gegenseitig sog. Messages zuschicken lassen und diese auch überwachen.
Um Messages zu überwachen (z.B. Tastatureingaben und Mausbewegungen), können sogenannte Hooks installiert werden. Ein Hook muss immer mit einem Parameter eingerichtet werden, der die Speicheradresse zu einer Funktion angibt, so dass z.B. die Funktion"CheckKeyboardInput" jedes Mal aufgerufen wird, wenn eine Taste gedrückt wird.
Hier gibt es ein Beispiel.
Nun habe ich weiter oben geschrieben, dass ein Prozess nur sich selbst kennt und keine anderen Prozesse. Wie kann er nun diese Hook-Funktion aufrufen, wenn er sie gar nicht kennt?
Die Antwort darauf lautet, dass die DLL, in der die Funktion steckt, von dem Prozess geladen werden muss.
Das ist es in etwa
Gruß,
Chris