AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Systemprozess von nicht Systemprozess unterscheiden

Systemprozess von nicht Systemprozess unterscheiden

Offene Frage von "Assarbad"
Ein Thema von gandime · begonnen am 9. Mai 2010 · letzter Beitrag vom 13. Jan 2011
Antwort Antwort
gandime
(Gast)

n/a Beiträge
 
#1

Systemprozess von nicht Systemprozess unterscheiden

  Alt 9. Mai 2010, 17:12
Hallo,
ich schreibe gerade ein anti Botnetsoftware, welche einen Speziellen Bot killen soll und die exe löschen soll.
Das ganze funktioniert auch alles schon blos das doofe ist, das der Prozess smss.exe heisst. Wie unterscheide ich nun den System-Prozess und den anderen Prozess?
Gibt es eine Möglichkeit den Startpfad des Prozesses zu lokalisieren?

mfg
gandime
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

Re: Systemprozess von nicht Systemprozess unterscheiden

  Alt 9. Mai 2010, 17:58
Zitat von gandime:
Gibt es eine Möglichkeit den Startpfad des Prozesses zu lokalisieren?
Ja! Mithilfe einer Modulenumeration (Schnapschuß bzw. Snapshot mit Übergabe der Prozeß-ID) lassen sich alle Module dieses Prozesse inkl. Pfad zur Datei über die Variable „szExePath“ aufspüren. Nach meiner Beobachtung ist immer die erste über den Modulschnappschuß erhaltene Datei (bzw. der erste erhaltene Eintrag) die Exe-Datei selbst, deshalb vermute ich, daß Windows so programmiert wurde, daß es immer so ist.

Die Funktionsweise kannst Du Dir auch über mein Programm „Prozesse“ (geeignetes Suchwort im Forum: „Prozeßbetrachter“) veranschaulichen; just heute lud ich eine neue Version hoch, die auch den exklusiven Zugriff auf die Kernelmodus- bzw. Ring-0-Prozesse ermöglicht.

Edit: Eine „saubere“ Unterscheidung zwischen System- und Nichtsystemprozeß sieht vermutlich allerdings anders aus. Einfache und Systemprozesse müßten sich in einer ganzen Reihe von Eigenschaften eindeutig voneinander unterscheiden.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

Re: Systemprozess von nicht Systemprozess unterscheiden

  Alt 9. Mai 2010, 18:17
also mit dem First32Process o.ä. geht das mit dem Parameter szexepath leider nicht so einfach. Dieser gibt nur den absoluten Dateinamen an, ohne den Pfad zu der Exe.
An diesen kommt man über die Kommandozeile inkl. Parameter. Bsp.
Wodurch sich Systemprozesse noch von anderen Prozessen unterscheiden ist, dass der Firmenname auf "Microsoft Coporation" steht. Ich glaube auch, dass die Systemprozesse alle digital signiert sind und die meisten der frei rumlaufenden Viren/Trojaner/Bots nun eben mal nicht.

Also: Ein wirklich gutes Alleinstellungsmerkmal ist das Prüfen auf ein digitales Zertifikat und die Prüfung dieses Zertifikats. Wie man das allerdings anstellt, weiß ich nicht.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

Re: Systemprozess von nicht Systemprozess unterscheiden

  Alt 9. Mai 2010, 18:41
Zitat von rollstuhlfahrer:
also mit dem First32Process o.ä. geht das mit dem Parameter szexepath leider nicht so einfach. Dieser gibt nur den absoluten Dateinamen an, ohne den Pfad zu der Exe.
Warum gab ich wohl den Modulschnappschuß an?

Zitat von rollstuhlfahrer:
An diesen kommt man über die Kommandozeile inkl. Parameter
Es geht doch hier um ein Programm und nicht um die (manuelle!) Bedienung einer Textkonsole!

Zitat von rollstuhlfahrer:
Wodurch sich Systemprozesse noch von anderen Prozessen unterscheiden ist, dass der Firmenname auf "Microsoft Coporation" steht. Ich glaube auch, dass die Systemprozesse alle digital signiert sind und die meisten der frei rumlaufenden Viren/Trojaner/Bots nun eben mal nicht.

Also: Ein wirklich gutes Alleinstellungsmerkmal ist das Prüfen auf ein digitales Zertifikat und die Prüfung dieses Zertifikats. Wie man das allerdings anstellt, weiß ich nicht.
Ein wirklich gutes? Was ist mit den Diensten? Die müssen keinesfalls alle von Mikroweich stammen (kann man schließlich auch selbst programmieren), doch nach meinem Wissen laufen die regelmäßig im Kernelmodus! Müssenn die wirklich digital signiert sein?

Ein nach meiner Beobachtung eindeutiges Unterscheidungsmermal ist z.B., daß die Kernelmodusprozesse - im Gegensatz zu den Usermodusprozessen - den Modulschnappschuß nicht a priori erlauben, sondern erst nach explizter Privileganforderung. Allerdings weiß ich nicht, wie man Modulanzahl 0 (eigentlich gar nicht möglich, die Exe muß als 1 Modul eigentlich immer zurückgeliefert werden) von einem abgewiesenen Modulschnappschuß unterscheiden kann.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#5

Re: Systemprozess von nicht Systemprozess unterscheiden

  Alt 9. Mai 2010, 19:14
Die andere Frage ist nur, warum wollen in letzter Zeit ständig alle selber ihr Viren/Würmer/Trojaner/Bots entfernen, anstatt auf die allgemein üblichen Entfernungstools der großen Firmen zurückzugreifen oder statt den einzig wirklich sicheren Weg zu nehmen?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Systemprozess von nicht Systemprozess unterscheiden

  Alt 9. Mai 2010, 19:17
Hi!

Zitat von Delphi-Laie:
Zitat von rollstuhlfahrer:
An diesen kommt man über die Kommandozeile inkl. Parameter
Es geht doch hier um ein Programm und nicht um die (manuelle!) Bedienung einer Textkonsole!
Er meint damit die Kommandozeile, die verwendet wurde, um das Programm zu starten. Diese wird für jeden Prozess von Windows mitgespeichert und kann z.B. auch im Taskmanager angezeigt werden (passende Spalte hinzufügen).

Zitat von Delphi-Laie:
Zitat von rollstuhlfahrer:
Wodurch sich Systemprozesse noch von anderen Prozessen unterscheiden ist, dass der Firmenname auf "Microsoft Coporation" steht. Ich glaube auch, dass die Systemprozesse alle digital signiert sind und die meisten der frei rumlaufenden Viren/Trojaner/Bots nun eben mal nicht.

Also: Ein wirklich gutes Alleinstellungsmerkmal ist das Prüfen auf ein digitales Zertifikat und die Prüfung dieses Zertifikats. Wie man das allerdings anstellt, weiß ich nicht.
Ein wirklich gutes? Was ist mit den Diensten? Die müssen keinesfalls alle von Mikroweich stammen (kann man schließlich auch selbst programmieren), doch nach meinem Wissen laufen die regelmäßig im Kernelmodus! Müssenn die wirklich digital signiert sein?
Ein weiteres mögliches Merkmal ist die SID des Prozessbesitzers. Systemprozesse laufen meist im Kontext des Benutzers "SYSTEM" (SID: "S-1-5-18" siehe hier). Dies mag zwar nicht auf alle Prozesse zutreffen, aber auf den hier erfragten smss.exe trifft dies zu.

Zitat:
Ein nach meiner Beobachtung eindeutiges Unterscheidungsmermal ist z.B., daß die Kernelmodusprozesse - im Gegensatz zu den Usermodusprozessen - den Modulschnappschuß nicht a priori erlauben, sondern erst nach explizter Privileganforderung. Allerdings weiß ich nicht, wie man Modulanzahl 0 (eigentlich gar nicht möglich, die Exe muß als 1 Modul eigentlich immer zurückgeliefert werden) von einem abgewiesenen Modulschnappschuß unterscheiden kann.
Moment. Es gibt nur einen Prozess, der im Kernelmodus läuft und das ist der, der durch den Code von ntoskrnl.exe und den Treibern gespeist wird (und das ist nichteinmal ein richtiger Prozess...). Die anderen Prozesse laufen ALLE im Usermodus. Die Systemprozesse laufen "nur" unter einem authorisierten Benutzerkonto (z.B. oben genanntes "SYSTEM"-Konto).

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Re: Systemprozess von nicht Systemprozess unterscheiden

  Alt 12. Jan 2011, 23:48
Ich bitte um Nachsicht, daß ich diese etwas angestaubte Diskussion noch einmal aufgreife!

Ein weiteres mögliches Merkmal ist die SID des Prozessbesitzers. Systemprozesse laufen meist im Kontext des Benutzers "SYSTEM" (SID: "S-1-5-18" siehe hier). Dies mag zwar nicht auf alle Prozesse zutreffen, aber auf den hier erfragten smss.exe trifft dies zu.
Bei der Beschäftigung mit dieser Materie bin ich auf ein weiteres Unterscheidungsmerkmal "Systemprozesse<->Nichtsystemprozesse" gestoßen, und zwar aus der API-Funktion GetSecurityInfo, bei der man nach der SID auch - als nächsten Parameter - die Gruppe gewinnen kann. Unter meinem Windows 2000 (wird später auf anderen, späteren NTx-Betriebsprogrammen noch genauer untersucht werden) liefert der Parameter "ppsidGroup" (wie gesagt, nach dem vorigen Parameter "ppsidOwner) bei den "Systemprozessen" den - noch zu transformierenden - String "SYSTEM" zurück, bei allen anderen auf meinem Windows 2000 "kein".

Also, wenn das (k)ein Zufall ist!

Geändert von Delphi-Laie (12. Jan 2011 um 23:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: Re: Systemprozess von nicht Systemprozess unterscheiden

  Alt 13. Jan 2011, 00:58
Das ganze funktioniert auch alles schon blos das doofe ist, das der Prozess smss.exe heisst.


SMSS == Session Manager Subsystem

Das ist eines der Kernsubsysteme von Windows und wird aus dem Kernel heraus gestartet. Wird dieser Prozess beendet, gibt es einen Bluescreen. Würdest du csrss.exe (Client Server Subsystem) beenden, würde im besten Fall ein Bluescreen kommen und im schlimmsten Fall würden Win32-Prozesse sich merkwürdig verhalten, weil csrss.exe das Win32-Subsystem implementiert. Ja, Win32 ist eigentlich auf der NT-Plattform nur ein Subsystem, wenn auch mehr oder weniger das zentrale ...

Selbstverständlich kann sich auch ein bösartiger Prozess mit diesen Namen tarnen, aber dann könnte man wiederum Signaturen überprüfen (siehe Bernhards Vorschlag). Dennoch, bei diesem Mangel an Grundkenntnissen mag dein Ziel durchaus ehrenwert sein, aber bitte lasse es lieber sein. Du kannst damit Leute und deren Daten in die Bredouille bringen.

Ein wirklich gutes? Was ist mit den Diensten? Die müssen keinesfalls alle von Mikroweich stammen (kann man schließlich auch selbst programmieren), doch nach meinem Wissen laufen die regelmäßig im Kernelmodus!


Wie Sven schon schrieb, im KM laufen nur der Kernel und Treiber, wobei die Threads in den "normalen" Prozessen natürlich ab und an einen Ausflug in den KM machen um bspw. Dateien zu lesen, Ereignisse zu erstellen uns so weiter und so weiter. Treiber sind im Übrigen eher mit DLLs vergleichbar als mit Programmen, wenn man denn schon einen Vergleich benötigt um es sich zu verbildlichen ...
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz