Seite 1 von 1
Prozesse abfragen
Verfasst: Sonntag 29. Januar 2012, 23:21
von JamesBond700
Guten Tag,
ich möchte in mein Python-Projekt eine Abfrage einbauen, ob ein Prozess gestartet ist. Den Prozess will ich per Namen abfragen. Das Problem ist, dass ich auf Python 2.2 angewiesen bin, und nicht auf die Win32Api zurückgreifen kann. Was bleiben mir für Möglichkeiten? Ich könnte mit os.system auch mit einem Timer alle 3 Sekunden den Prozess beenden, aber die alle 3 Sekunden aufblinkende Eingabeaufforderung ist wirklich nervig.
Lg

Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 00:39
von lunar
@JamesBond700: "tasklist.exe" ist so ziemlich die einzige verbleibende Möglichkeit. Im Allgemeinen ist allerdings eine Aktualisierung der Python-Version ratsam. Welche Gründe kann es denn geben, heute noch Python 2.2(!) einzusetzen?!
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 00:41
von needsch
Wieso kannst du die Win32API nicht benutzen? Also ich kann verstehen, dass du einen Bogen um die
pywin32-Module machen möchtest, aber zumindest das
ctypes-Modul könntest du verwenden, um direkt die API anzusprechen. Beispielsweise so:
http://code.activestate.com/recipes/576 ... on-on-win/
Alternativ kannst du einfach tasklist verwenden oder - wenn das von den Lizenzen her kein Problem ist -
pslist von den Sysinternals-Tools zu dem Python-Skript dazupacken. Das kann dann einfach von Python aus ausgeführt werden um die aktuell laufenden Prozesse zu listen. Dann musst du dich selbst nicht um die API-Aufrufe kümmern, das wird alles von tasklist/pslist erledigt.
Aus persönlichem Interesse: Wieso musst du Python 2.2 verwenden?
Viele Grüße
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 00:44
von JamesBond700
Ich betreibe einen P-Server und die User benutzen Bots, welche ich ausfindig machen möchte, und danach killen

Habe jetzt geschafft den Client des Spiels auf Python 2.3 zu updaten, und habe es auch geschafft mit ctypes Programme über die PID zu killen. Jedoch muss ich ja noch die PID des Bots ausfindig machen. Wie komme ich über den Namen eines Prozesses zur PID? Vor dem Problem stehe ich gerade.
Danke schon einmal für eure Hilfe
Lg
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 00:50
von lunar
@JamesBond700: Was ist ein "P-Server"?
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 00:53
von JamesBond700
Privater Server eines Spieles. Ähnlich wie World of Warcraft Server, welche von Privaten Personen gehostet sind.
Lg
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 00:55
von needsch
JamesBond700 hat geschrieben:Ich betreibe einen P-Server und die User benutzen Bots, welche ich ausfindig machen möchte, und danach killen

Habe jetzt geschafft den Client des Spiels auf Python 2.3 zu updaten, und habe es auch geschafft mit ctypes Programme über die PID zu killen. Jedoch muss ich ja noch die PID des Bots ausfindig machen. Wie komme ich über den Namen eines Prozesses zur PID? Vor dem Problem stehe ich gerade.
Danke schon einmal für eure Hilfe
Lg
Schau dir mal das Rezept an, das ich in meinem obigen Post verlinkt habe. Ganz unten in dem main-Abschnitt wird über alle gerade laufenden Prozesse iteriert. Für jeden Prozess wird ein PROCESSENTRY32-struct zurückgegeben. Dieses enthält neben der PID auch den Namen (ich glaube th32ProcessID und szExeFile sind das).
Der richtige Einstieg für dieses Thema in der Win32-API ist hier:
http://msdn.microsoft.com/en-us/library ... s.85).aspx
Viele Grüße
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 01:02
von lunar
@JamesBond700: Und wieso müssen x-beliebige Spieler dazu Prozesse auf Deinem Server ausführen können?
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 01:11
von JamesBond700
lunar hat geschrieben:@JamesBond700: Und wieso müssen x-beliebige Spieler dazu Prozesse auf Deinem Server ausführen können?
Ich glaube du hast mich falsch verstanden. Der Client überprüft ob auf dem PC des Anwenders irgendwelche Hacks etc. gestartet sind, und soll sie dann schließen. Der Client ist in Python 2.2 geschrieben. Habe gerade probiert pywin zu importieren, jedoch scheint das in dem Client nicht zu funtkionieren. Werde auf die Suche nach der PID auf andere Mittel zurückgreifen müssen. Wer hat noch eine Idee?
Lg
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 14:16
von jerch
@JamesBond700:
Wie willst Du verhindern, dass der Code im Client, der sich um Prozesserkennung und -beendigung der "Hacks" kümmert, einfach auskommentiert wird? Desweiteren ist die Namenserkennung durch Umbenennen der .exe sehr einfach zu umgehen. Über ein Speicherabbild des laufenden "smelly" Prozesses kannst Du auch nicht ohne weiteres gehen, dafür bräuchtest Du Ring0-Zugriff.
Wie sehen diese "Hacks" den aus, bzw. über welche Mechanismen wird das Spiel manipuliert?
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 14:39
von JamesBond700
Der Python Code ist in verschlüsselten Datein verpackt, welche mit einem besonderen Code verschlüsselt sind, welcher nur mir bekannt ist. Sprich: Niemand kann den Code verändern. Die Hacks werden über .dll injection geladen.
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 14:40
von Hyperion
JamesBond700 hat geschrieben:Der Python Code ist in verschlüsselten Datein verpackt, welche mit einem besonderen Code verschlüsselt sind, welcher nur mir bekannt ist. Sprich: Niemand kann den Code verändern. Die Hacks werden über .dll injection geladen.
Und wie werden diese Dateien dann ausgeführt? :K Ich meine, wenn nur Du sie entschlüsseln kannst, dann können sie ja auch nur bei Dir laufen...
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 14:44
von JamesBond700
Der sogenannte Xtea-Code zum Entschlüsseln der Archive ist natürlich auch in der .exe zum Starten des Spiels eingetragen. Diese ist jedoch gecryptet, und es ist nahezu unmöglich den Xtea-Code rauszulesen. Ob ein Schutz vor Hacks Clientside Sinn macht... Darüber kann man streiten, aber versuchen kann man es. Also hat jetzt noch jemand eine Idee für das Herausfinden der PID über den Prozessnamen?
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 15:38
von jerch
JamesBond700 hat geschrieben:Der sogenannte Xtea-Code zum Entschlüsseln der Archive ist natürlich auch in der .exe zum Starten des Spiels eingetragen. Diese ist jedoch gecryptet, und es ist nahezu unmöglich den Xtea-Code rauszulesen.
Warum glaubst Du, dass das nahezu unmöglich ist, wenn der Rechner das doch sowieso bei jeder Programmausführung machen muss, um den Pythoncode ausführen zu können? Ich will nicht schon wieder eine Diskussion um vermeintliche Sicherheit anzetteln, allerdings ist sowas softwarebasiert nicht zunagelbar, da die Zustände sehr leicht auslesbar sind. Mit einem Hardware-Schlüssel sähe das schon anders aus - die wenigsten würden sich wohl die Mühe machen, ein IC vom Board löten und durchmessen zu wollen.
JamesBond700 hat geschrieben:Also hat jetzt noch jemand eine Idee für das Herausfinden der PID über den Prozessnamen?
Das geht nicht direkt mit der Win-API, Du kannst Dir aber alle Prozesse, für die Du genügend Rechte besitzt, holen und nach dem entsprechenden Namen durchsuchen. Nur frag ich mich, was Dir das bringt, Du müssest doch eher am Spieleprozess nach verdächtigen Symbolen/Bibliothekshandles suchen, wenn die über .dll-Injektion kommen.
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 16:02
von JamesBond700
JamesBond700 hat geschrieben:Also hat jetzt noch jemand eine Idee für das Herausfinden der PID über den Prozessnamen?
Das geht nicht direkt mit der Win-API, Du kannst Dir aber alle Prozesse, für die Du genügend Rechte besitzt, holen und nach dem entsprechenden Namen durchsuchen. Nur frag ich mich, was Dir das bringt, Du müssest doch eher am Spieleprozess nach verdächtigen Symbolen/Bibliothekshandles suchen, wenn die über .dll-Injektion kommen.[/quote]
Du hast recht. Habe gerade geschaut, die Bots/Hacks haben dann logischerweise keinen eigenen Prozess, und werden nicht unter Prozess angezeigt. Jedoch steht unter Anwendungen ihr der Name des Hacks. Ich könnte nach dem Namen suchen, und wenn der Name gefunden wurde ein Boolean zurückgeben, und anschließend das gesamte Spiel schließen lassen. Ist es möglich, nach Anwedungsanmen zu suchen?
Lg
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 17:46
von lunar
@JamesBond700: Kannst Du dieses Problem nicht dadurch lösen, dass Du Nutzer, die Bots verwenden, einfach aussperrst? Technisch kannst Du das ohnehin nicht so lösen, dass nicht ein fähiger Nutzer drum herum käme.
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 19:26
von JamesBond700
Der Bot ist nicht wirklich erkennbar, und ich kann nicht einfach auf Verdacht irgendwelche Leute bannen...
Re: Prozesse abfragen
Verfasst: Montag 30. Januar 2012, 22:45
von jerch
Codeobfuscation, Speicherüberwachung etc. taugen zwar, den direkten Angriff auf den Clientprozess zu erschweren, nur nützt das reichlich wenig gegen Bots, da die Skriptkiddies einfach eine Ebene höher gehen und Tastatur/Mouseevents simulieren können. Wahrscheinlich bis Du besser beraten, nach Verhaltenspattern zu suchen, um wenigstens die allzu offensichtlichen (schlechten) Bots zu erfassen. Richtig gute Bots wirst Du nicht entlarven können, da die Verwechslungsgefahr mit einem unbedarften Spieler hoch ist.