Home of Gamehacking - Archiv
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)

Seiten: 1 2 3


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 Happy

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
PUSH EBP
MOV EBP,ESP
PUSH ESI
MOV EAX,DWORD PTR FS:[BF0]
MOV EAX,DWORD PTR DS:[EAX+20]
MOV ESI,DWORD PTR DS:[EAX+3E598]
CMP DWORD PTR DS:[ESI+13EC],510
JL SHORT atioglxx.696117AD
MOV EDX,DWORD PTR SS:[EBP+C]
MOV DWORD PTR DS:[ESI+13EC],0AE
MOV DWORD PTR DS:[ESI+13F0],atioglxx.69FE8AF4      ;  ASCII "glPolygonMode"
MOV BYTE PTR DS:[ESI+44050],0
MOV EAX,DWORD PTR DS:[EAX+36B68]
MOV ECX,DWORD PTR DS:[EAX]
MOV EAX,DWORD PTR SS:[EBP+8]
MOV ECX,DWORD PTR DS:[ECX+2C0]
PUSH EDX
PUSH EAX
CALL ECX
MOV BYTE PTR DS:[ESI+44050],0
MOV DWORD PTR DS:[ESI+13EC],510
MOV DWORD PTR DS:[ESI+13F0],0
POP ESI
POP EBP
RETN 8


Wäre über Hilfe sehr Dankbar Smiling

Lg Cflash


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 Wink 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,
wo befindet sich denn der Codeabschnitt? In der hl.exe oder hw.dll? Bzw. ändert sich die BaseAdresse vllt. jedes mal beim Start?

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



Falls es nur um die BaseAddress geht sollte das hier helfen:



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 Huh 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 Smiling

die glBegin sieht folgendermaßen aus (Byte codes) glBegin:

Code:
BYTE glBegin[6] =  {0x64,0xA1,0x18,0x00,0x00,0x00};

Wenn ich ein parr Bytes davor und danach dazu nehme sollte das mit Patternscanning sicher zu finden sein.
Steige nur noch nicht richtig bei der Benutzung des Snippets fürs Patternsearch durch, muss ich dann nicht ne
Dll injekten dazu eigendlich?

lg


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:

Code:
BYTE glBegin[6] =  {0x64,0xA1,0x18,0x00,0x00,0x00};

Wenn ich ein parr Bytes davor und danach dazu nehme sollte das mit Patternscanning sicher zu finden sein.
Steige nur noch nicht richtig bei der Benutzung des Snippets fürs Patternsearch durch, muss ich dann nicht ne
Dll injekten dazu eigendlich?

lg

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.