Hi alle zusammen,
Dieser Thread richtet sich an Leute, die Ahnung von Windows Internals und am besten PEB, Debuggerdetection, NT etc. haben (an alle Linuxer, ihr könnt hier aufhören zu lesen, falls ihr nicht vorhabt, etwas mit Windows zu machen ;))
Keine Angst, da es sich bei mir um einen 64bitler handelt, geht es vorläufig (!) nicht in den ring0.
Mein Problem ist eine äußerst nervige Debuggerdetection beim Spiel S4 League.
Ich dachte erst, sie kommt evtl. durch Themida, aber es scheint doch aus der XTrapVa.dll zu kommen (XTrap^^)...
Um es schon vorweg zu nehmen:
Ich habe folgendes probiert:
-hooken von IsDebuggerPresent
-hooken von NtQueryInformationProcess und habe schon zig Parameter ausprobiert, ob es nun DebugPort, DebugFlags oder ProcessDebugObjectHandle war....kein Erfolg.
Ich bemerkte, dass NtQueryInformationProcess ziemlich oft mit ProcessBasicInformation gecalled wird, und dann fiel mir das BeingDebugged Byte, die NtGlobalFlags und die Heapflags ein.
Nichts, BeingDebugged hat nichts genützt, und bei den Flags gabs nen Crash, als ich manuell etwas dorthin schreiben wollte....entweder habe ich etwas falsch gemacht oder ich darf da nicht einfach was hinschreiben...obwohl manche Ollyscripts machen das ja auch^^
Naja, ich bin mir ziemlich sicher, dass es irgendwie mit dem PE Header überprüft wird, da der ziemlich oft kontrolliert wird....
Übrigens: CheckRemoteDebugger ist sinnlos, da diese Funktion NtQuery... aufruft, und da ich es testweise auch mal in den XTrap Prozess injected habe, ist eine Kontrolle von außerhalb unwahrscheinlich....
-OutputDebugString war es nicht
-Da S4 erst geschlossen wird, wenn man attached, kann FindWindow ausgeschlossen werden, genau wie EnumProcesses...
Ich weiß echt nicht mehr weiter, auch viele Antidebugreferenzen haben mir nur das hier schon aufgezählt...ich bin mir fast sicher, dass es per PEB gemacht wird, aber wenn ich da was zb. an den GlobalFlags verändere, gibts nen Crash.... was könnte ich noch probieren oder wie kann man die Flags richtig verändern?
p.s. wird eigentlich NtExitProcess immer gecalled, wenn man ExitProcess aufruft? Ich hatte mir für die Analyse eine Dll gemacht, die ExitProcess und ExitThread einfach nichts tuen lässt, damit Themida/Xtrap machtlos ist.
Das geht nun plötzlich nicht mehr, also möchte ich mal NtExitProcess etc. probieren. Ist das die einzige Möglichkeit einen Prozess zu schließen (TerminateProcess auch gehooked oder in dem Falle dann auch NtTerminateProcess) oder gibts da noch was anderes?
(Testweise habe ich die dll auch in XTrap injected, und da auch TerminateProcess etc. gehooked ist, ist ein Schließen von außerhalb auszuschließen!)
So, ich hoffe einer ist da recht erfahren und kann mir vielleicht weiterhelfen.
Wäre auf jeden Fall nett ;)
Danke im Voraus
MfG Sm!th
Dieser Thread richtet sich an Leute, die Ahnung von Windows Internals und am besten PEB, Debuggerdetection, NT etc. haben (an alle Linuxer, ihr könnt hier aufhören zu lesen, falls ihr nicht vorhabt, etwas mit Windows zu machen ;))
Keine Angst, da es sich bei mir um einen 64bitler handelt, geht es vorläufig (!) nicht in den ring0.
Mein Problem ist eine äußerst nervige Debuggerdetection beim Spiel S4 League.
Ich dachte erst, sie kommt evtl. durch Themida, aber es scheint doch aus der XTrapVa.dll zu kommen (XTrap^^)...
Um es schon vorweg zu nehmen:
Ich habe folgendes probiert:
-hooken von IsDebuggerPresent
-hooken von NtQueryInformationProcess und habe schon zig Parameter ausprobiert, ob es nun DebugPort, DebugFlags oder ProcessDebugObjectHandle war....kein Erfolg.
Ich bemerkte, dass NtQueryInformationProcess ziemlich oft mit ProcessBasicInformation gecalled wird, und dann fiel mir das BeingDebugged Byte, die NtGlobalFlags und die Heapflags ein.
Nichts, BeingDebugged hat nichts genützt, und bei den Flags gabs nen Crash, als ich manuell etwas dorthin schreiben wollte....entweder habe ich etwas falsch gemacht oder ich darf da nicht einfach was hinschreiben...obwohl manche Ollyscripts machen das ja auch^^
Naja, ich bin mir ziemlich sicher, dass es irgendwie mit dem PE Header überprüft wird, da der ziemlich oft kontrolliert wird....
Übrigens: CheckRemoteDebugger ist sinnlos, da diese Funktion NtQuery... aufruft, und da ich es testweise auch mal in den XTrap Prozess injected habe, ist eine Kontrolle von außerhalb unwahrscheinlich....
-OutputDebugString war es nicht
-Da S4 erst geschlossen wird, wenn man attached, kann FindWindow ausgeschlossen werden, genau wie EnumProcesses...
Ich weiß echt nicht mehr weiter, auch viele Antidebugreferenzen haben mir nur das hier schon aufgezählt...ich bin mir fast sicher, dass es per PEB gemacht wird, aber wenn ich da was zb. an den GlobalFlags verändere, gibts nen Crash.... was könnte ich noch probieren oder wie kann man die Flags richtig verändern?
p.s. wird eigentlich NtExitProcess immer gecalled, wenn man ExitProcess aufruft? Ich hatte mir für die Analyse eine Dll gemacht, die ExitProcess und ExitThread einfach nichts tuen lässt, damit Themida/Xtrap machtlos ist.
Das geht nun plötzlich nicht mehr, also möchte ich mal NtExitProcess etc. probieren. Ist das die einzige Möglichkeit einen Prozess zu schließen (TerminateProcess auch gehooked oder in dem Falle dann auch NtTerminateProcess) oder gibts da noch was anderes?
(Testweise habe ich die dll auch in XTrap injected, und da auch TerminateProcess etc. gehooked ist, ist ein Schließen von außerhalb auszuschließen!)
So, ich hoffe einer ist da recht erfahren und kann mir vielleicht weiterhelfen.
Wäre auf jeden Fall nett ;)
Danke im Voraus
MfG Sm!th