Vorwort dies ist eine Weiterführung zu dem Letzen teil( Detours 1/2 ).
Fals ihr diesen noch nicht gelesen habt, solltet ihr euch überlegen dies zuerst zutun.
Dort habe ich gezeigt wie das Prinzip hinter Detouren erklärt, hier werde ich auf die Detection und noch ein paar sinnvolle Beispiele der Anwendung von Detouren geben.
Also starten wir mal mit der Detection:
Es gibt viele Möglichkeiten um Herauszufinden ob eine Funktion Gedetourd wurde, oder nicht.
Die einfachste ist die Adressen im Speicher zu vergleichen dies ist simpel zu ereichen indem man tostring( any type ) aufruft.
Wenn man dieser Funktion eine Funktion Übergibt print( tostring( function() end ) ) so gibt sie ein String aus der wie folgt aussieht Funktion: 0x4fbf82c0 dies repräsentiert die Adresse der Funktion im speicher.
Jedoch wenn man mit dieser Methode Funktionen überprüft muss man im Vorfeld ( vor der detour ) die Adresse speichern!
Also...
Wie mach ich es besser ( *im nachhinein* ) ?
Nun Gmod stellt uns hierfür perfekte Funktionen zur Verfügung ( ich liste hier nur die eine auf! es gibt natürlich mehr )
debug.getinfo( function , string )
diese returnt eine Tabelle mit Folgenden Feldern( https://wiki.garrysmod.com/page/Structures/DebugInfo ) :
code: PrintTable( debug.getinfo( function() end ) )
currentline = -1
func = function: 0x4dbf41f0
isvararg = false
lastlinedefined = 12
linedefined = 12
namewhat =
nparams = 0
nups = 0
short_src = external
source = @external
what = Lua
Alles anzeigen
So ist es natürlich super einfach herauszufinden ob eine Funktion Gedetourd wurde oder nicht.
Indem man überprüft ob sie die src oder die linedefined Herausfindet Doch Halt.
Es gibt trotzdem Möglichkeiten Dies zu Fälschen z.b kann man mit Runstring den Src Faken und die line auch. ( wenn man weis was man tut ich werde hier zu keine src geben möchte nicht das ihr das könnt *cac bypass* )
Also muss es doch ein weg geben es noch besser zu machen
-JA
string.dump( function , boolean )
Dies gibt uns den Bytecode einer funktion zurück ( bitte aufpassen auf NULL-chars *string.dump * ) ( -> https://wiki.garrysmod.com/page/string/dump )
nunja um Speicher zu Spiechern rate ich jedoch util.CRC( string ) zu benutzen um eine eindeutige crc checksume zu bilden JEDOCH MUSS MAN DIES TUN BEVOR SIE GEDETOURD WURDE
so zum Schluss: die Funktionen die zur Detection Benutzt werden sind meist in der debug , jit und jit.util Lib
So jetzt zu den Sinnvollen Detours:
Ich persönlich detour nicht so gerne da es ( wie bereits erwähnt ) mit Rechenleistung verbunden ist.
jedoch ist es immer eine gute Idee RunConsoleCommand zu detrouren um zusehen wenn Admins ( über ULX ) etwas in eurer Console ausführen wollen.
Sowie file.Read damit sie nicht eure daten ( im Gmod Verzeichniss ) auslesen können.
Fals ihr fragen / Vorschläge / Kritik habt Schriebt ein Kommentar oder eine PM.
K03
Btw ich werde bald mit einem Tutorial Anfangen indem ich versuche Lua zu erklären und irgend etwas Sinnvolles zu schrieben ( fals ihr Ideen habt oder dabei sein wollt ( z.b ihr Source Code habt den ich benutzen soll oder gute Ideen ) schreibt ein Komentar )