Kleine Frage

04/21/2014 10:10 Whaaat?#1
Hey leute,
Ich habe mir grade ein Sourcecode für einen External CS:S Hack runtergeladen.
Ich benutze diese ganz gerne um zu schauen wie andere Cheats schreiben und wie man richtig anfängt.
Habe dort bisher alles verstanden da ein gewisses Grundwissen vorhanden ist.
Nun habe ich dort aber diese Zeile:
Code:
while(!(ProcInfo.handle = OpenProcess(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF, false, ProcInfo.pid)))
Als ich nachgeschaut habe fiel mir auf das als 3. Teil eig. nur die pId gebraucht wird hier aber nicht.
Habe dann weitergesucht und schließlich noch etwas gefunden:
Code:
OpenProcess(access-mask | PROCESS_QUERY_INFORMATION, FALSE or TRUE, pid);
Nun habe ich aber die Frage, was PROCESS_QUERY_INFORMATION ist.

Edit:
Mir ist später noch: GetModuleBaseExtern(ProcInfo.pid, "client.dll") aufgefallen jedoch finde ich zu GetModuleBase bzw. GetModuleBaseExtern nichts.
Kann mir jemand das erläutern?

Falls ich etwas davor schon falsch verstanden habe bitte sagt es mir :)
Für jede Hilfe bin ich dankbar.
04/21/2014 11:09 Actidnoide#2
Quote:
Originally Posted by Whaaat? View Post
Nun habe ich dort aber diese Zeile:
Code:
while(!(ProcInfo.handle = OpenProcess(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF, false, ProcInfo.pid)))
Als ich nachgeschaut habe fiel mir auf das als 3. Teil eig. nur die pId gebraucht wird hier aber nicht.
Habe dann weitergesucht und schließlich noch etwas gefunden:
Code:
OpenProcess(access-mask | PROCESS_QUERY_INFORMATION, FALSE or TRUE, pid);
Nun habe ich aber die Frage, was PROCESS_QUERY_INFORMATION ist.
Siehe msdn:
[Only registered and activated users can see links. Click Here To Register...]

Quote:
PROCESS_QUERY_INFORMATION (0x0400) Required to retrieve certain information about a process, such as its token, exit code, and priority class (see OpenProcessToken).
Quote:
Edit:
Mir ist später noch: GetModuleBaseExtern(ProcInfo.pid, "client.dll") aufgefallen jedoch finde ich zu GetModuleBase bzw. GetModuleBaseExtern nichts.
Kann mir jemand das erläutern?
[Only registered and activated users can see links. Click Here To Register...]
bzw.
[Only registered and activated users can see links. Click Here To Register...]

GetModuleBase() liefert die Basisadresse eines Moduls ;)
Dort steht uebrigens auch, dass das PROCESS_QUERY_INFORMATION Zugriffsflag benoetigt wird.
Die Basisadresse ist die Adresse eines Images (z.b. einer Dll) im virtuellen Prozessspeicher. DIese wird z.B. benoetigt, um mithilfe von relativen Adressen Prozessdaten auszulesen / zu beschreiben.
04/21/2014 11:24 Whaaat?#3
Danke für die Antwort jedoch hab ich noch die Frage, warum der Codeersteller hier
Code:
while(!(ProcInfo.handle = OpenProcess(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE |0xFFFF, false, ProcInfo.pid)))
nicht einfach nur die pId am Ende eingefügt hat.
04/21/2014 11:47 Mostey#4
Quote:
Originally Posted by Whaaat? View Post
Danke für die Antwort jedoch hab ich noch die Frage, warum der Codeersteller hier
Code:
while(!(ProcInfo.handle = OpenProcess(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE |0xFFFF, false, ProcInfo.pid)))
nicht einfach nur die pId am Ende eingefügt hat.
Was verstehst du denn nicht? ProcInfo.pid stellt doch anscheinend die Prozess ID dar.
04/21/2014 11:55 Whaaat?#5
Quote:
Originally Posted by Mostey View Post
Was verstehst du denn nicht? ProcInfo.pid stellt doch anscheinend die Prozess ID dar.
Ich verstehe nicht warum er davor noch 0xFFFF und False reingepackt hat.
Ich weiß das 0xFFFF 65535 ist aber ich weiß nicht was es dort zu bedeuten hat.
04/21/2014 12:07 Schlüsselbein#6
Mann kann ja nachschauen, was die Parameter für Auswirkungen haben. Hab ich jedenfalls mal gehört.
04/21/2014 12:09 Actidnoide#7
mit "| 0xFFFF" werden weitere Zugriffsflags gesetzt. Welche diese sind und ob sie gebraucht werden ist glaube ich OS abhaengig

Das Accessflag PROCESS_ALL_ACCESS scheint so definiert zu sein:
Code:
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
Ich weiss aber nichts genaueres in diesem Zusammenhang
04/21/2014 12:21 Whaaat?#8
Ah ja ich habs jetzt verstanden :)
"(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)" ersetzt einfach nur Process_All_Access in "OpenProcess(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF, false, ProcInfo.pid)"
Aber warum macht der Ersteller das?
Macht das irgendein unterschied um es vielleicht vom AntiCheat zu verstecken?
04/21/2014 12:25 Actidnoide#9
Nein, (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF) oder PROCESS_ALL_ACCESS ist am Ende nur eine Zahl, die in einem 32bit Integer im Binaercode liegt. Warum er es gemacht hat liegt wohl offen.
04/21/2014 12:31 Whaaat?#10
Danke für die Antworten ;)
Thread kann geclosed werden.
04/21/2014 13:17 Padmak#11
Eventuell hat er das deswegen gemacht:
[Only registered and activated users can see links. Click Here To Register...]
Speziell
Quote:
All possible access rights for a process object.
Windows Server 2003 and Windows XP: The size of the PROCESS_ALL_ACCESS flag increased on Windows Server 2008 and Windows Vista. If an application compiled for Windows Server 2008 and Windows Vista is run on Windows Server 2003 or Windows XP, the PROCESS_ALL_ACCESS flag is too large and the function specifying this flag fails with ERROR_ACCESS_DENIED. To avoid this problem, specify the minimum set of access rights required for the operation. If PROCESS_ALL_ACCESS must be used, set _WIN32_WINNT to the minimum operating system targeted by your application (for example, #define _WIN32_WINNT _WIN32_WINNT_WINXP). For more information, see Using the Windows Headers.
Padmak