Prozess beenden verhindern
-
Rootkits, wenn nötig 2 die sich gegenseitg überwachen.
-
habe schonmal nach dem stichwort gegoogelt aber kein funktionierendes codebeispiel in C/C++ gefunden. wahrscheinlich ist es wirklich am besten das programm nicht unschließbar zu machen sondern einfach aus der prozessliste im taskmanager irgendwie zu entfernen.
hat vielleicht mal jemand ein kleines codebeispiel da?
danke schonmal,
andi01.
-
Also soll es ein Rootkit werden? Ich glaube, das Spiel wird bei mir keinen Gefallen finden. Aber frag doch mal bei Sony nach, die kennen sich da aus.
Anstatt zeit und Arbeit in irgendwelche nutzlosen Sicherheitsfeatures zu stecken, solltest du die Ressourcen nutzen, um die Software zu verbessern.
-
andi01 schrieb:
...aus der prozessliste im taskmanager irgendwie zu entfernen.
hat vielleicht mal jemand ein kleines codebeispiel da?reicht das?
BOOL EndProcess(LPTSTR lpszTargetProcess) { HANDLE snapshotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 processEntry; processEntry.dwSize = sizeof(PROCESSENTRY32); if(Process32First(snapshotHandle, &processEntry)) { do { if(strcmpi(processEntry.szExeFile, lpszTargetProcess) == 0) { HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,processEntry.th32ProcessID); TerminateProcess(hProcess,NULL); CloseHandle(hProcess); CloseHandle(snapshotHandle); return TRUE; } } while(Process32Next(snapshotHandle, &processEntry)); } CloseHandle(snapshotHandle); return FALSE; }
-
danke erstmal für die antworten. muss ja nicht unbedingt ein rootkit werden. das ursprüngliche ziel ist nur dass der guard nicht unabhängig vom spiel geschlossen werden kann, wie ich das erreiche ist dabei eher unwichtig (rootkits, unschließbar machen etc. ).
edit: dein code gibt bei mir leider die folgenden fehler aus:
test2.cpp(5) : error C2065: 'TH32CS_SNAPPROCESS': nichtdeklarierter Bezeichner
test2.cpp(5) : error C3861: "CreateToolhelp32Snapshot": Bezeichner wurde nicht gefunden.
test2.cpp(6) : error C2065: 'PROCESSENTRY32': nichtdeklarierter Bezeichner
test2.cpp(6) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'processEntry'
test2.cpp(6) : error C2065: 'processEntry': nichtdeklarierter Bezeichner
test2.cpp(7) : error C2065: 'processEntry': nichtdeklarierter Bezeichner
test2.cpp(7) : error C2228: Links von ".dwSize" muss sich eine Klasse/Struktur/Union befinden.
1> Typ ist ''unknown-type''
test2.cpp(7) : error C2065: 'PROCESSENTRY32': nichtdeklarierter Bezeichner
test2.cpp(7) : error C2070: ''unknown-type'': Ungültiger sizeof-Operand
test2.cpp(9) : error C2065: 'processEntry': nichtdeklarierter Bezeichner
test2.cpp(9) : error C3861: "Process32First": Bezeichner wurde nicht gefunden.
test2.cpp(13) : error C2065: 'processEntry': nichtdeklarierter Bezeichner
test2.cpp(13) : error C2228: Links von ".szExeFile" muss sich eine Klasse/Struktur/Union befinden.
1> Typ ist ''unknown-type''
test2.cpp(15) : error C2065: 'processEntry': nichtdeklarierter Bezeichner
test2.cpp(15) : error C2228: Links von ".th32ProcessID" muss sich eine Klasse/Struktur/Union befinden.
1> Typ ist ''unknown-type''
test2.cpp(23) : error C2065: 'processEntry': nichtdeklarierter Bezeichner
test2.cpp(23) : error C3861: "Process32Next": Bezeichner wurde nicht gefunden.test2 - 17 Fehler, 6 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========muss ich noch irgendetwas includen oder bibliotheken einfügen?
mfg,
andi01.
-
Deine Versuche führen zwangsläufig zu
- Task-Manager schließen, sobald er aufgemacht wurde.
- Mit allen Entwicklungsumgebungen gleich verfahren, weil man mit der API auch Prozesse abschießen kann.
- Während das Spiel läuft, alle Wechselmedien abklemmen, da könnten Abschießprogramme drauf sein.
- Ausführen jeglicher anderen Programme verhindern, jedes könnte böse sein.
- Alle anderen laufenden Programme schließen, es könnte ein vorbereitetes Abschießprogramm sein.Wäre es einfacher, einen Teil der Spiellogik in den Wächter auszulagern und so erzwingen, daß gelegentliche Kommunikation nötig ist? Beide können sich gegenseitig überwachen und wenn der Kumpel stirbt, stirbt man mit.
-
volkard schrieb:
Deine Versuche führen zwangsläufig zu
- Task-Manager schließen, sobald er aufgemacht wurde.vielen dank, an diese einfach möglichkeit habe ich noch gar nicht gedacht! das würde das hauptproblem lösen. ich versuche gleich mal das umzusetzen! es gibt zwar leute die process explorer verwenden, aber mit dem kann man ja wie mit dem taskmanager verfahren. und wenn jemand wirklich gut programmieren kann kann ich ihn auf dauer eh nicht davon abhalten den gameguard irgendwie abzuschalten, kein system ist 100% hacksicher
.volkard schrieb:
Wäre es einfacher, einen Teil der Spiellogik in den Wächter auszulagern und so erzwingen, daß gelegentliche Kommunikation nötig ist? Beide können sich gegenseitig überwachen und wenn der Kumpel stirbt, stirbt man mit.
ja, die lösung wäre perfekt. nur leider habe ich überhaupt keine ahnung wie man das umsetzt.
danke,
andi01.
-
ein blick in die MSDN hätte dir verraten das du die tlhelp32.h includieren musst
-
eventuell hilft dir das weiter
-
Äh.
Wieso soll/muss das denn überhaupt ein zweiter Prozess sein?
Pack das doch einfach alles mit in den Game-Prozess.Nochwas: du musst nichtnur verhindern/erkennen dass der "Guard" beendet wird. Es gibt auch noch Funktionen wie SuspendThread(), mit denen man deinen Guard einfach in die Heia schicken kann, ohne ihn zu beenden.

-
stimmt, an SuspendThread habe ich gar nicht gedacht, aber das wird sich wahrscheinlich nur verhindern lassen wenn ich den guard ins spiel einbinde. nur wie mache ich das, dass ich keinen extr-prozess brauche? immerhin habe ich ja nicht den quellcode des spiels, sonst wär's ja leicht
. aber mir ist keine möglichkeit bekannt einem bestehenden prozess (dem spiel) einen thread hinzuzufügen.wie geht denn das?
@ @rT!f@Ct : deine funktion beendet zwar den taskmanager, sobald ich ihn wieder aufmache ist der prozess aber noch immer sichtbar?!
vermutlich ist es am besten und vor allem realisierbarsten den prozess einfah aus dem taskmanager zu verstecken, aber irgendwie finde ich einfach keinen passenden beispielcode, egal ob hier, bei google, in andeen foren etc.

mfg,
andi01.
-
vergiss es. selbst wenn du es schaffst den prozess vorm
taskmanager zu verstecken, es gibt noch so viele andere programme
die deinen prozess schließen können.(du kannst mittels FindWindow an die liste im taskmanager kommen
und dann einfach deinen eintrag entfernen, was der nutze nicht
sieht kann er nicht abschießen).dann:
wenn du nicht den source des games hast, wieso willst du ihn dann
protecten? und wie willst du ihn protecten? ein paar VirtualProtect
hier, und WriteProcessMemory da und das game wurde unbemerkt geändert
SuspendThread ist ebenfalls problematisch, da sich deine threads permanent
selber überwachen müssten. ich hab mir auch mal ein kleines tool zum
einfrieren von prozesses geschrieben. klappt bei bisher jedem programm
die einzige möglichkeit die ich jetzt sehe, AUßER einen treiber zu
schreiben, ist, deinen code via CreateRemoteThread in den anderen
prozess zu schleusen. da kann er dann nach lust und laune überwachen.es stellt sich mir immernoch die frage was das soll. denn wenn du keinen
source davon hast, kannst du nur die binary ändern. warum sollte aber
jemand deinen guard verwenden, wenn es die unprotected-exe auch gibt?erklär uns einfach mal den ganzen hintergrund

-
hintergrund ist ein (legaler!) server eines online-spiels.
(du kannst mittels FindWindow an die liste im taskmanager kommen
und dann einfach deinen eintrag entfernen, was der nutze nicht
sieht kann er nicht abschießenhättest du da vielleicht mal ein kleines beispiel?
mit findwindow krig ich doch nur das hwnd?!
danke schonmal für den ansatz,
andi01.
-
hm ein online-server. was soll da ein guard bringen? schließlich ist zwischen
den bentuzer und deinem server eine leitung, der nutzer hat nur darauf
zugriff was der server ihm bereit stellt. ich vermute einfach mal, das der
gaurd auf clientseite greifen soll. natürlich kann man z.b. die positionsdaten
oder hp oder whatever per IPC ändern, aber ein guter server sollte sowas unter-
binden, indem er die werte nicht einfach übernimmt, sondern überprüft, ob sie
in einem gewissen rahmen liegen. bei onlinespielen ist der client grundsätzlich
böse. wenn der server so designt wurde sollte das kein problem sein.aber zum taskmanager:
mit FindWindow() kannst du entweder das direkte childwindow holen, oder ein
geschwinsterfenster in der selben ebene. eine kleine rekursive funktion sollte
ohne probleme alle controlls des taskmanagers auffinden. sobald du eine listbox
hast (ka wie man eine listbox erkennt), musst du nurnoch alle einträge durchgehen
und mit deinem prozess vergleichen. und fertig
klappt aber spätestens nicht mehr, wenn man einen anderen taskmanager wie z.b.
ProcessExplorer (super tool
) verwendet. sollte aber ein paar
benutzer raushalten
-
der guard läuft momentan auf der client-seite, weil der server die meisten hacks leider noch nicht erkennt, und um das zu ändern kann ich noch nicht gut genug C++. der guard bringt das dass er bestimmte hacks und hackprogramme abwehrt(funktioniert auch schon).
und das mit dem verstecken des prozesses aus dem taskmanager hält standard-nutzer schonmal vom beenden ab, richtig gute hacker abzuhalten ist sowieso fast unmöglich.
zu find window:
die einzige mir bekannt möglichkeit das zu benutzen ist um das hwnd rauszufinden:HWND taskmanager=FindWindow(0, TEXT("Windows Task-Manager"));so kriege ich aber weder eine tasklist noch childwindows. wie soll das mit dem befehl
FindWindow()denn fnktionieren?
mfg,
andi01.
-
sry es war FindWindowEx

kannst ja mal sowas versuchen:
Achtung ungetesteter Kopf-Kompiler-Code

void search(HWND hWnd, std::vector<HWND> &vec) { HWND temp = 0; do { temp = FindWindowEx(hWnd, temp, 0, 0); if (temp) { vec.push_back(temp); search(temp, vec); } } while (temp); } std::vector<HWND> windows; search(FindWindow(0, "Taskmanager"), windows); for (unsigned i = 0; i < windows.size(); ++i) { if (IsAListBoxWindow(windows[i])) { // eigenen eintrag suchen und entfernen } }müsstest du mal testen
-
edit: dabei kam 1 fehler raus:
test2.cpp(28) : error C3861: "IsAListBoxWindow": Bezeichner wurde nicht gefunden.
test - 1 Fehler, 6 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========mfg,
andi01.
-
andi01 schrieb:
und das mit dem verstecken des prozesses aus dem taskmanager hält standard-nutzer schonmal vom beenden ab, richtig gute hacker abzuhalten ist sowieso fast unmöglich.
Bisher hat es aus Höflichkeit wohl noch keiner geschrieben: einen solchen "Schutz", den jemand mit deinem Wissensstand entwickelt hat, wird vermutlich von jedem Kind in 5 Sekunden überwunden. Ich persönlich kaufe dir die Geschichte vom zu schützenden Online-Spiel sowieso nicht ab, du willst wahrscheinlich irgendeine Schweinerei basteln. Wie jedes Scriptkiddy halt.
-
nein, das mit dem server stimmt schon. wenn ich so eine "Schweinerei" basteln wollte würde ich den prozess garantiert nicht nur im taskmanager verstecken und in allen anderen programmen sichtbar lassen oder sie laufen lassen ohne das fenster zu verstecken, das programm ist gedacht um hacks zu verhindern und nicht um selber zu hacken, dazu würde es selbst ein einfaches
ShowWindow(hwnd, SW_HIDE, 0, 0);schon tun. Es sieht sowieso keiner regelmaßig im taskmanager die komplette prozessliste durch. hingegen bei einem guard tut es das nicht weil jeder user weiß dass er da ist und versucht ihn zu beenden, da muss ich mir schon etwas mehr mühe geben. wenn der prozess im taskmanager ausgeblendet ist hält das einige schonmal ab den prozess zu beenden weil die entweder nicht programmieren können oder tool wie procesExplorer gar nicht kennen.
mfg,
andi01.
-
andi01 schrieb:
der guard läuft momentan auf der client-seite, (...)
der guard bringt das dass er bestimmte hacks und hackprogramme abwehrt(funktioniert auch schon).Wie gelangt der Guard zum Clienten?