Delphi-PRAXiS
Seite 1 von 11  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Process_Terminate funktioniert nicht (https://www.delphipraxis.net/155954-process_terminate-funktioniert-nicht.html)

speedy 14. Nov 2010 20:51

Process_Terminate funktioniert nicht
 
Hi,

ich benutze den Code aus diesem Beitrag > Klick < um einen bestimmten Prozess (ein Spiel) abzuschießen.

Auf dem Rechner (WinXP Pro), auf dem das Programm dann eingesetzt werden soll funktioniert das nur nicht. Die ProcessID für den Prozess kann ohne Probleme ausgelesen werden, nur beim anschließenden Process_Terminate tut sich überhaupt nichts. Das Programm, sowie der abzuschießende Prozess laufen beide als Admin (also kein Systemprozess). Beenden über den Taskmanager funktioniert.

Hab das Programm mit dem gleichen Spiel auf meinem Rechner (Win7 Pro x64 - Admin-Rechte) ausprobiert, dort funktioniert das einwandfrei. Auch auf einem anderen XP Rechner funktioniert es.

Hat irgendjemand eine Idee warum der Code (und vor allem warum auf genau diesem bestimmten Rechner) nicht läuft?

Danke!

Schöne Grüße
speedy

Assarbad 14. Nov 2010 21:14

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von speedy (Beitrag 1061500)
Auf dem Rechner (WinXP Pro), auf dem das Programm dann eingesetzt werden soll funktioniert das nur nicht. Die ProcessID für den Prozess kann ohne Probleme ausgelesen werden, nur beim anschließenden Process_Terminate tut sich überhaupt nichts. Das Programm, sowie der abzuschießende Prozess laufen beide als Admin (also kein Systemprozess). Beenden über den Taskmanager funktioniert.

Und kannst du mal mit dem Process Explorer gucken welche Zugriffsrechte gesetzt sind und wie (bei dem abzuschiessenden Prozeß).

Diverse Programme setzen auch Hooks, was hier u.U. auch ein Problem sein könnte. Die Namen der Prozesse könnten also helfen ;)

Aphton 14. Nov 2010 21:38

AW: Process_Terminate funktioniert nicht
 
Probier mal folgenden Code aus und sag mir, obs damit auch nicht klappt. Ist nur auf die Schnelle dahingetippt - darfste gerne Kleinigkeiten (Denkfehler) ausbessern...

Delphi-Quellcode:
procedure KillProcess2(const dwProcID, dwTimeOut: DWORD);
var
  hProcess, Size,
  WrittenBytes, TID,
  hThread, ExitCode: DWord;
  Memory: Pointer;

  procedure _injectedCode_ExitProcess(P: Pointer); stdcall;
  type
    TExitProcess = procedure(uExitCode: UINT); stdcall;
  begin
    TExitProcess(P)(0);
  end;
  procedure _injectedCode_End();
  asm
    ret
  end;

begin
  hProcess := OpenProcess( GENERIC_WRITE, False, dwProcID );
  if hProcess <> ERROR then
    try
      Size := DWord( @_injectedCode_End ) - DWord( @_injectedCode_ExitProcess );
      Memory := VirtualAllocEx( hProcess, NIL, Size, MEM_COMMIT, PAGE_EXECUTE_READWRITE );
      if Assigned( Memory ) then
        try
          WriteProcessMemory( hProcess, Memory, @_injectedCode_ExitProcess, Size, WrittenBytes );
          if WrittenBytes = Size then
          begin
            hThread := CreateRemoteThread( hProcess, NIL, 0, Memory, GetProcAddress( GetModuleHandle( 'kernel32.dll' ), 'ExitProcess' ),
              0, TID );
            if hThread <> ERROR then
              WaitForSingleObject( hThread, dwTimeOut );
          end;
        finally
          VirtualFreeEx( hProcess, Memory, Size, MEM_DECOMMIT );
        end;
    finally
      CloseHandle( hProcess );
    end;
end;
MfG

speedy 14. Nov 2010 21:48

AW: Process_Terminate funktioniert nicht
 
Kenn mich jetzt mit dem Process Explorer nicht so wirklich aus.

Das Spiel das abgeschossen werden soll ist Metin2 (kostenloses MMORPG, so ähnlich wie World of Warcraft) mit den Prozessen "metin2.bin" und "metin2client.bin". Das Spiel benutzt einen Schutz der sich "Hackshield" nennt. Beim Untersuchen mittels Process Explorer (auf dem Win7 Rechner) hat sich das Spiel nach kurzer Zeit mit der Meldung "DETECT_GAME_HACK Undefined hacks (0x20000006)" geschlossen. An den entsprechenden XP Rechner komm ich gerade nicht ran.

Zum Hintergrund:
Das Ziel ist ein Programm, dass den Betrieb dieses Spiels verhindert bzw. das Spiel in regelmäßigen Abständen per Timer beendet. Das Programm ist für eine Freundin deren Sohn (12) massiv süchtig nach dem Spiel ist und sie keine Kontrolle mehr hat. Das geht soweit, dass der teilweise locker 12 Std. am Tag zockt, nichts mehr für die Schule tut und sich sogar mitten in der Nacht nen Wecker stellt um noch ein paar Stunden spielen zu können (wenn die Eltern im Bett sind). PC wegnehmen geht auch nicht, weil er den auch für die Schule braucht. Spiel löschen hilft auch nichts, dann wirds halt neu installiert... Ne andere Möglichkeit als das Spiel regelmäßig abzuschießen sehen wir da leider nicht mehr.


Nach was genau soll ich denn schauen im Process Explorer? Glaube aber nicht, dass das Spiel irgendwelche Hooks setzt, da es auf jedem Rechner wo ich das Tool ausprobiert hab funktioniert. Nur auf dem einen XP Rechner eben nicht.

Assarbad 14. Nov 2010 21:58

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von speedy (Beitrag 1061511)
Das Spiel das abgeschossen werden soll ist Metin2 (kostenloses MMORPG, so ähnlich wie World of Warcraft) mit den Prozessen "metin2.bin" und "metin2client.bin". Das Spiel benutzt einen Schutz der sich "Hackshield" nennt. Beim Untersuchen mittels Process Explorer (auf dem Win7 Rechner) hat sich das Spiel nach kurzer Zeit mit der Meldung "DETECT_GAME_HACK Undefined hacks (0x20000006)" geschlossen. An den entsprechenden XP Rechner komm ich gerade nicht ran.

Dann ist die Wahrscheinlichkeit groß, daß genau das das Problem ist.

Versuch mal den Code von Aphton. Aber sei gewarnt, ab Vista (mit ASLR) wird das nicht mehr funzen.

speedy 14. Nov 2010 22:04

AW: Process_Terminate funktioniert nicht
 
Also unter Win7 tut sich mit dem Code überhaupt nichts. Prozess wird nicht beendet und Fehlermeldung oder sonstige Meldungen kommen auch keine.
Werd das dann mal in XP probieren und berichten.

Danke erstmal!

Christian Seehase 14. Nov 2010 22:32

AW: Process_Terminate funktioniert nicht
 
Moin Speedy,

zum einen:
Vielleicht wäre es da auch mal angebracht über einen Artzbesuch nachzudenken.

zum anderen:
Wenn ich mich recht entsinne konnte man Windows mal mit einer Art Whitelist bzw. Blacklist vorgeben, welche Programme gestartet werden dürfen, und welche nicht.
Das Ganze lief über Registryeintragungen.
Wo genau weiss ich im Moment leider nicht mehr, aber vielleicht hilft's bei der Problemlösung.

Luckie 15. Nov 2010 03:09

AW: Process_Terminate funktioniert nicht
 
Warum hat er Administratorrechte?

mleyen 15. Nov 2010 07:05

AW: Process_Terminate funktioniert nicht
 
begin
 if ProcessExists(cMetin2Exe) and GamingLimitReached then
  Run('SuperFastShutdown.exe');
end;

speedy 15. Nov 2010 07:40

AW: Process_Terminate funktioniert nicht
 
@Luckie: Windows default... Naja als der Rechner installiert wurde hat er noch nicht in dem Ausmaß gezockt und im normalen Benutzer Account läuft nicht alles

Hab mal noch schnell XP auf nen alten Rechner und den Code von Aphton ausprobiert. Es passiert nichts. Auch das normale Process_Terminate funktioniert nicht. Abschießen über ein Programm funktioniert auch nicht, wenn das Programm als System-Account gestartet wird. Komisch (für mich) allerdings, dass der normale Taskmanager das ohne Probleme beendet.
Scheinbar wurde Hackshield aktualisiert, da es vor kurzem unter einem anderen XP noch ging.

Im Process Explorer hab ich so jetzt nichts auffälliges feststellen können. Falls es noch was hilft - Bei "Threads" gibt es folgende Einträge:
!Create Thread+0x38
!Create Thread+0x27 (ziemlich oft)
!InternetSetStatusCallbackA+0x1ca
ntdll.dll!RtlQueueWorkItem+0x2b5
ntdll.dll!RtlAllocateHeap+0x18c

Was ich sonst noch auf die Schnelle zu Hackshield finden konnte (aus dem Forum von cheatengine.org - Beitrag von 2006):
"-hackshield loads a driver to hide and protected himself.
-Hackshield detects many gamehacking tools e.g.: (SoftICE,OllyDBG,CheatEngine,ArtMoney,WPE (PRO) , ...)
-Cant inject dlls when hackshield is loaded(Solution: CreateProcess Suspended -> inject dll(s) -> and resume it)
-CheatEngine is the only tool who can see the game process, that hackshield trys to hide, but cant open it
-Hook LoadLibraryA/W and abort if hackshield trys to load dlls dont work. "

Der Treiber (c:\windows\system32\drivers\eaglent.sys - Unsichtbar, wird aber scheinbar nur unter XP geladen) erinnert dabei an ein Rootkit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.
Seite 1 von 11  1 23     Letzte »    

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