Quote:
Originally Posted by Shiukahn
Ich werde mir das heute Abend mal durch lesen warfley.
Aus deinem Text entnehme ich das c/c++ oder Pascal sprachen sind mit der ich mein Vorhaben in die Wirklichkeit umsetzen kann.
Folgendes, ich habe die Frage auch in anderen Foren gestellt unter anderem in einem c++ Forum und da es ja um aimbots/wallhacks geht auch in einem Forum von einem Anbieter von aktuellen aimbots/wallhacks und in beiden Foren wurde gesagt das c++ ungeeignet ist. Warum könnten die das sagen? Was ist an den Aussagen dran?
Meine persönlichen Favoriten sind warum auch immer c++ und Python, ist mein Vorhaben mit eine der beiden Sprachen in die Wirklichkeit umzusetzen?
|
Erstmal du kannst mit jeder Sprache dein Vorhaben in die tat umsetzen, mit unterschiedlichem aufwand. Python z.B. ist eine tolle Sprache für scripte die wissenschaftlich rechnen müssen, ist zum gamehacking aber eher ungeeignet.
Um festzustellen was zum Hacking geeignet ist und was nicht muss man sich einfach mal anschauen was man dafür machen muss. Ich bin nicht so im gamehacking drin, kenn mich aber ganz gut mit computern aus daher hier mal meine Bewehgründe:
Nehmen wir als Beispiel den Aimbot. Dieser schaut die Position von gegnern nach, und bewegt dann die maus so das der nächste Schuss auf jeden fall trifft.
Gehen wir mal die verschiedenen möglichkeiten durch
Die einfachste und fehleranfälligste möglichkeit ist ein Image Suche. Man analysiert dabei einen aktuellen Screenshot des Spiels und sucht nach charakteristika (z.B. dem Kopf eines anderen Spielers). Wenn dieser gefunden ist kann man mit etwas trigonomitrie den Winkel zum Fenster Mittelpunkt (Fadenkreuz) ausmachen und die Maus bewegen.
Das lässt sich mit jeder Sprache machen, und ist auch gleichzeitig undetectable (im notfall kann man den Code aus nen Raspi oder Arduino auslagern der via VGA das Bildschirmsignal bekommt und eine USB maus simuliert). Natürlich kannst du damit nur Gegner lokalisieren die du siehst (man kann theoretisch noch geräusche analysieren, dann kann man nahe bewegende gegner außerhalb des sichtfeldes auch targeten)
Das ist vor allem etwas wo AutoIt glänzt, da es für all diese dinge extrem einfache realisierungen in AutoIt gibt. Ein AutoIt script für einen Solchen hack wäre nur ein paar zeilen lang, das selbe in C++ würde viel mehr Aufwand bedeuten.
Eine etwas ausgefeiltere Methode ist aber (die dann auch durch Anticheats erkennbar ist) ist das zugreifen auf die Memory des anderen Prozesses. Wenn Address space layout randomization deaktiviert ist, befinden sich verschiedene Objekte an der selben Speicheraddresse bei jedem lauf der Software. Das bedeutet man muss einmal rausfinden wo im Speicher die Gegner Informationen liegen, und kann diese dann auslesen (z.B. wie CheatEngine das macht). Windows stellt dafür API funktionen bereit, mit denen man auf den Speicher eines Fremden Prozesses zugreifen kann. Du musst also nur die Eigene Position aus dem Speicher laden, sowie die Position deines Gegners, ein bisschen Trigonomitrie und du weißt wie du die Maus bewegen musst für auf den Gegener zu Zielen.
Die Windows API ist (als API so designed) mit nahezu jeder Programmiersprache benutzbar. Allerdings ist in manchen Sprachen wie AutoIt (oder Java) es etwas aufwändiger, was man aber mit externen Bibliotheken umgehen kann. Ansonsten sind die Meisten Sprachen recht simpel mit API's, ob du jetzt C++ oder C# verwendest gibt sich da nicht viel.
Die absolut beste Methode, die von Anticheats auch am meisten versucht wird zu verhindern ist dann Code Injection, also eigenen Code in das Programm schmuggeln. Das geht auf verschiedene weisen, die Idee dabei ist es seinen eigenen Code als DLL zu kompilieren und diese dann in den Prozess zu injezieren. Sobald du deinen eigenen Code ausführen kannst hast du maximale Kontrolle. Du kannst dich frei im Speicher des Prozesses austoben, kannst werte auslesen, schreiben wie auch oben beschrieben, du kannst aber noch viel mehr machen. Du kannst den bisherigen Code ändern (also einfach den Assembly der Code page im Memory überschreiben) um eigenen Code auszuführen, so genanntes funktions Hooken (du überschreibst also z.B. jeden aufruf einer Funktion mit dem aufruf deiner eigenen funktion die dann für dich böse Sachen macht).
Dafür musst du aber in der lage sein deinen Code zu injezieren. Das schließt praktisch alle Scriptsprachen sowie Java aus (klar kann man sich auch da was zusammen hacken, z.B. C++ DLL die über die JNI java code lädt). Und selbst wenn du deinen eigenen Code injeziert bekommst willst du ja auch noch irgendwas böses anstellen, dafür brauchst du Maschinen nähe. Z.B. Funktions Hooken kannst du mit Java technisch einfach nicht machen. Ab diesem punkt musst du praktisch eine Hardware nahe Sprache nehmen (z.B. C++ oder Pascal) da es mit allen Sprachen wenn nur über sehr viele umwege möglich ist.
C++ ist für jede der 3 Möglichkeiten sehr gut geeignet.
Wenn wir jetzt mal ganz verrückt sind gibt es noch weitere Möglichkeiten die Volle Kontrolle über den Code erlauben, ohne das es der Anticheat detecten könnte, die nicht Hardware nahe sprachen wie .Net komplett ausschließen. (Alles was ich hier schreibe ist komplett crazy und eigentlich out of Scope für die meißten Hacks)
1. Emulation. Statt ein spiel auszuführen könntest du die Ausführung emulieren (QEMU, Virtual Box). Den Emulator könntest du dann augmentieren. Für das Spiel/den Anticheat wäre es nahezu unmöglich zu erkennen ob es auf echter Hardware oder auf emuliert Hardware läuft, mit dem unterschied alles was emuliert wird kann man beeinflussen.
2. Kernel Hacks. Die meißten Anticheats (bzw. die meiste Software) gehen von der Annahme aus das das Betriebsystem tut was es soll. Unter Linux und Mac OS kann man aber sehr einfach den Kernel erweitern/verändern. Der Kernel hat zugriff auf alles, eigener Kernel Code kann für dich also auch diverse Hacks ausführen.
Das sind beides Möglichkeiten die ohne Hardware nahe Sprache wohl kaum möglich sind. Daher wo C++ ungeeignet ist wüsste ich jetzt nicht.
Man muss aber auch dazu sagen, ich komm nicht aus der Game hacking Szene, sondern spezialisiere mich am meisten auf Netzwerke, sowie Low level funktionalitäten von systemen (also alles eher sehr technisch). Daher geh ich da auch von der System und Hardware nahen Seite dran. Vielleicht gibt es da dinge die ich übersehe, aber aus meiner Sicht ist eine möglichst hardware nahe Sprache der Schlüssel zu möglichst vielseitiger Nutzung. Dennoch kann es gut sein das diese Vielseitigkeit gar nicht benötigt wird und features anderer Sprachen wohmöglich besser geeignet sind