Autoit ProcessSuspend() vs xTrap

03/30/2014 13:28 Wayntressierts#1
Hallo,

ich möchte bei dem Spiel Cabal den xTrap ausschalten - idealerweise auch per AutoIt.

Solange xTrap noch nicht vollständig geladen ist, kann ich per ProcessSuspend() ProcessResume() ganz normal den Prozess stilllegen, danach funktioniert es nicht mehr, während es mit Tools wie z.B. ProcessHacker noch ganz normal geht.

Ich arbeite auf Win7 x64 und ja, SetPrivilege("SeDebugPrivilege", 1) ist gesetzt.

Frage: Was macht ProcessHacker anders, dass es da funktioniert?
03/30/2014 13:40 alpines#2
Funktioniert es nicht mehr wenn du suspendierst und resumest oder nur suspendierst? ProcessHacker suspendiert vielleicht gar nicht.
03/30/2014 15:22 Wayntressierts#3
Nachdem xTrap "seine Finger im Spiel" hatte, funktioniert das suspenden per Autoit nicht mehr - der Prozess läuft trotzdem einfach weiter.

Mach ich das gleiche mit Process Hacker dann ist der problemlos gestoppt.
03/30/2014 16:48 alpines#4
Verwendet ProcessHacker vielleicht nicht NtSuspendProcess() sondern andere Funktionen?
Detoured der vielleicht in eine Schleife die nichts macht und nur bsp.-weise 100ms sleeped bis der Hook aufgehoben ist?
03/30/2014 20:22 snow#5
Process Hacker hat meines Wissens nach einen Service auf Kernel-Ebene, damit geht ein bisschen mehr als mit AutoIt.

@alpines: XTrap hat einen Treiber auf Kernel-Ebene, eine solche Modifikation bemerkt das ohne Probleme.
04/01/2014 02:11 Wayntressierts#6
xTrap ist in dem Moment schon tot ;-) Es liegt an den Prozessberechtigungen - die hatte xTrap zuvor fleissig umgebogen. Wenn ich "jeder" Vollzugriff auf den Prozess erteile kann autoit auch wieder ran ;-)
04/08/2014 17:06 x-Qey#7
Copy-Paste

Quote:
Func _ProcessSuspend($process)
$processid = ProcessExists($process)
If $processid Then
$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
$i_sucess = DllCall("ntdll.dll","int","NtSuspendProcess","int" ,$ai_Handle[0])
DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
If IsArray($i_sucess) Then
Return 1
Else
SetError(1)
Return 0
Endif
Else
SetError(2)
Return 0
Endif
EndFunc

Func _ProcessResume($process)
$processid = ProcessExists($process)
If $processid Then
$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
$i_sucess = DllCall("ntdll.dll","int","NtResumeProcess","int", $ai_Handle[0])
DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
If IsArray($i_sucess) Then
Return 1
Else
SetError(1)
Return 0
Endif
Else
SetError(2)
Return 0
Endif
EndFunc
04/08/2014 17:41 alpines#8
Quote:
Originally Posted by x-Qey View Post
Copy-Paste
I guess you didn't read the thread correctly because the problem is not the Suspend function, it's the detection by XTrap.