CS 1.6 GlBegin() Entrypoint verändert sich? - Druckversion +- Home of Gamehacking - Archiv (http://archiv-homeofgamehacking.de) +-- Forum: Gamehacking (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=3) +--- Forum: Gamehacking (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=6) +--- Thema: CS 1.6 GlBegin() Entrypoint verändert sich? (/showthread.php?tid=959) |
||||
CS 1.6 GlBegin() Entrypoint verändert sich? - Cflash - 26.03.2012 Hey, beschäftige mich momentan mit dem Gamehacking im Bereich des Hookings von Funktionen. Wollte in Counterstrike 1.6 bzw Halflife nun einen GlBegin hook machen, jedoch habe ich festgestellt das bei jedem Start er zwischen einer von 2 Speicheradressen wählt und dort dann die glBegin hinpackt, sprich die Funktion ändert bei jedem Start ihre Adresse an der man sie ansprechen kann:s Ist das "normal"? :dodgy: Ist nervig weil ich Theoretisch nun ein Check machen muss an welcher von beiden die wirkliche Funktion ist ,und dann meine Operationen starten...:( Zudem noch eine weitere Frage, würde gerne per Code Patching die funktion glPolygoneMode manuell anpassen, kann ich da direkt so wie wenn ich die glBegin hooken würde einfach die glPolygoneMode patchen ,so das sie z.b nur GL_LINE zulässt? Habe es vorhin versucht (ja sogar die ganze Funktion Genoped!) doch es kahm keine veränderung, auch keine Bugs, Abstürtze o.ä - Habe ich etwas in meinem Gedankengang falsch gemacht? Das ist der Assembler-Dump der glPolygoneMode die ich gefunden habe, hoffe einfach mal das es die richtige ist Code:
RE: CS 1.6 GlBegin() Entrypoint verändert sich? - iNvIcTUs oRCuS - 26.03.2012 Ich nehme an Du versuchst nen Wall-Hack zu coden??? RE: CS 1.6 GlBegin() Entrypoint verändert sich? - Cflash - 26.03.2012 Eigendlich wollte ich nur mein Playermodell als Wireframe anzeigen lassen damit es "Geil aussieht" :-/ Dazu muss man beim zeichnen ja GL_LINE anstelle von GL_FILL machen damit eben das Playermodell nicht "Gefüllt" wird sondern per Wire´s angezeigt (Clientside). Für einen Wallhack müsste man ganz anders Vorgehen, nämlich glColor verändern bzw Dephtest ausschalten, was ich ja hier aber nicht versuche^^ RE: CS 1.6 GlBegin() Entrypoint verändert sich? - iNvIcTUs oRCuS - 26.03.2012 Ich frage nur nach... Ansonsten hätte sich dieses Thema bereits erledigt. RE: CS 1.6 GlBegin() Entrypoint verändert sich? - Acubra - 26.03.2012 Hey, wo befindet sich denn der Codeabschnitt? In der hl.exe oder hw.dll? Bzw. ändert sich die BaseAdresse vllt. jedes mal beim Start? RE: CS 1.6 GlBegin() Entrypoint verändert sich? - Cflash - 26.03.2012 (26.03.2012, 21:25)Acubra schrieb: Hey, Der Codeabschnitt befindet sich in der opengl32.dll, und ist normalerweise dafür zuständig zu bestimmen ob ein Modell als GL_POINT (Punkte) oder GL_LINE etc. Gerendert wird (Clientside). Ob sich die BaseAdresse ändert müsste ich schnell nachschauen, werde dann reineditieren. Kenne mich nun leider mit Assembler auch nicht sooo gut aus das ich großartig weiß was genau ich patchen muss damit er GL_LINE macht, da muss es denke irgendein Flag geben was per Mov oder Push gesetzt wird um zu bestimmen welchen Modus man nutzt.. schätze ich zumindestens :shy: EDIT: Die BaseAdresse der hl.exe ändert sich nicht, von der opengl32.dll jedoch schon -> Opengl32.dll BaseAdresse Nr.1: 0x6DC70000 Opengl32.dll BaseAdresse Nr.2: 0x70580000 Opengl32.dll BaseAdresse Nr.3: 0x6DC70000 Scheint sich immer abzuwechseln... Kleiner Theoretischer Ansatz.. Wenn ich die Baseadresse der Opengl32.dll auslese, dann müsste ich doch.. Opengl32.dll BaseAdresse+Offset = glBegin() machen können oder etwa nicht? Das wäre ziemlich "schöner" als 2 verschiedene Checks an welcher der beiden Speicheradressen die Funktion nun liegt. EDIT 2: Scheint nicht zu klappen, schienen 2 Verschiedene Offsets rauszukommen jenachdem was für eine Speicheradresse -> Opengl32.dll BaseAdresse Nr.1: 0x6DC70000 = 0x6DD0E331 = (0x9E331) Opengl32.dll BaseAdresse Nr.2: 0x70580000 = 0x7167E331 = (0x10FE331) Hmpf.. wie soll ich das hinbekommen :x? EDIT 3: Hatte die geniale (?) Idee nach nem Pointer zu suchen der auf die System32.dll BaseAdresse zeigt, habe 2 gefunden :> Pointer Nr 1: hw.dll+A5D570 Pointer Nr 2: atioglxx.dll+113D0AC Jetzt stellt sich nur die frage ob hw.dll bzw atioglxx.dll Statische BaseAdressen haben. Nachgeschaut -> hw.dll ist Statisch, System32.dll Baseaddy Pointer: 0x04920000 + 0xA5D570 Leider zeigt das ganze dann nicht auf die richtige Adresse.. hmm Könnte mir bitte jemand helfen? Komme leider nicht weiter :( lg RE: CS 1.6 GlBegin() Entrypoint verändert sich? - Acubra - 26.03.2012 Hey, ist der Code unmittelbar um glBegin() immer der gleiche? Wenn ja, dann könntest du das ganz easy mit patternscanning lösen. RE: CS 1.6 GlBegin() Entrypoint verändert sich? - Mydayyy - 26.03.2012 C++? Wenn ja, hier SearchPattern snippets Falls es nur um die BaseAddress geht sollte das hier helfen: Edit: Stimmt, hier wird ja alles Extern gemacht :|, dann zeigt dir der Pattern Snippet immerhin den richtigen weg :P RE: CS 1.6 GlBegin() Entrypoint verändert sich? - Cflash - 26.03.2012 (26.03.2012, 22:17)Mydayyy schrieb: C++? Wenn ja, hier SearchPattern snippets Letzteren Snippet hatte ich schon vorhin versucht als ich die Idee mit BaseAdresse hatte, gab aber beim Compilieren ein Fehler , muss ich mir später nochmal genau anschaun :-/ Und mit Patternscanning Wäre das nicht etwas übertrieben nur um die glBegin zu finden? Weil dann kommt ja auch noch der Detour dazu usw.. :blush: Werde es mir aber dennoch mal anschaun Danke die glBegin sieht folgendermaßen aus (Byte codes) glBegin: Code:
Wenn ich ein parr Bytes davor und danach dazu nehme sollte das mit Patternscanning sicher zu finden sein. RE: CS 1.6 GlBegin() Entrypoint verändert sich? - Acubra - 26.03.2012 (26.03.2012, 22:26)Cflash schrieb: die glBegin sieht folgendermaßen aus (Byte codes) glBegin:Hey, die Idee dahinter ist, dass du Code nach bestimmten Bytes durchforstest. Dabei kannst du ihn auch per ReadProcessMemory einlesen und dann ganz normal das Array, indem der Code gespeichert ist, durchsuchen. |