• Trainer
  • Forums
  • Suche
  • Members
  • Kalender
  • Hilfe
  • Extras
Forum stats
Show team
Neue Beiträge ansehen
Heutige Beiträge ansehen
Home of Gamehacking - Archiv
Login to account Create an account
Login
Benutzername:
Passwort: Passwort vergessen?
 



  Home of Gamehacking - Archiv Gamehacking Gamehacking
« Zurück 1 ... 4 5 6 7 8 Weiter »
CS 1.6 GlBegin() Entrypoint verändert sich?

Seiten (3): 1 2 3 Weiter »
Ansichts-Optionen
CS 1.6 GlBegin() Entrypoint verändert sich?
Cflash Offline
Junior Member
**
Beiträge: 9
Themen: 1
Registriert seit: Mar 2012
Bewertung: 0
#1
26.03.2012, 20:01 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2012, 21:02 von Cflash.)
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

Suchen
Antworten
iNvIcTUs oRCuS Offline
Super Moderator
****
Beiträge: 2.688
Themen: 529
Registriert seit: Aug 2010
Bewertung: 19
#2
26.03.2012, 20:46
Ich nehme an Du versuchst nen Wall-Hack zu coden???
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!

Traineranfragen per PM werden prinzipiell gelöscht...

[Bild: signatur6akm7.gif]
Suchen
Antworten
Cflash Offline
Junior Member
**
Beiträge: 9
Themen: 1
Registriert seit: Mar 2012
Bewertung: 0
#3
26.03.2012, 20:51 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2012, 20:54 von Cflash.)
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^^
Suchen
Antworten
iNvIcTUs oRCuS Offline
Super Moderator
****
Beiträge: 2.688
Themen: 529
Registriert seit: Aug 2010
Bewertung: 19
#4
26.03.2012, 20:57
Ich frage nur nach...
Ansonsten hätte sich dieses Thema bereits erledigt.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!

Traineranfragen per PM werden prinzipiell gelöscht...

[Bild: signatur6akm7.gif]
Suchen
Antworten
Acubra Offline
Trainermaker
****
Beiträge: 904
Themen: 127
Registriert seit: Oct 2010
Bewertung: 6
#5
26.03.2012, 21:25
Hey,
wo befindet sich denn der Codeabschnitt? In der hl.exe oder hw.dll? Bzw. ändert sich die BaseAdresse vllt. jedes mal beim Start?
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
[Bild: hoglogo_smalpxga.jpg]
Homepage Suchen
Antworten
Cflash Offline
Junior Member
**
Beiträge: 9
Themen: 1
Registriert seit: Mar 2012
Bewertung: 0
#6
26.03.2012, 21:34 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2012, 22:23 von Cflash.)
(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
Suchen
Antworten
Acubra Offline
Trainermaker
****
Beiträge: 904
Themen: 127
Registriert seit: Oct 2010
Bewertung: 6
#7
26.03.2012, 22:05
Hey,
ist der Code unmittelbar um glBegin() immer der gleiche? Wenn ja, dann könntest du das ganz easy mit patternscanning lösen.
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
[Bild: hoglogo_smalpxga.jpg]
Homepage Suchen
Antworten
Mydayyy Offline
Junior Member
**
Beiträge: 7
Themen: 1
Registriert seit: Nov 2011
Bewertung: 0
#8
26.03.2012, 22:17 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2012, 23:00 von Mydayyy.)
C++? Wenn ja, hier SearchPattern snippets





Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool DataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask) 
{ 
	for(;*szMask;++szMask,++pData,++bMask) 
	{ 
		if(*szMask=='x' && *pData!=*bMask ) 
		{ 
			return false; 
		}
	}
	return (*szMask) == NULL; 
}
DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask) 
{ 
	for(DWORD i=0; i < dwLen; i++) 
	{ 
		if( DataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) ) 
		{ 
			return (DWORD)(dwAddress+i); 
		} 
	} return 0; 
}



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





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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
DWORD GetModuleBaseExternW(const wchar_t* process, const wchar_t* dll)
{
	PROCESSENTRY32 pe32 = {0};
	pe32.dwSize = sizeof(PROCESSENTRY32);
 
	while(1)
	{
		HANDLE hModule = CreateToolhelp32Snapshot(0x2, 0);
		if(!hModule || hModule == (HANDLE)-1)
			return 0;
		if(!Process32First(hModule, &pe32))
		{
			CloseHandle(hModule);
			return 0;
		}
 
		do 
		{
			if(_wcsicmp(pe32.szExeFile, process) == 0)
			{
				MODULEENTRY32 me32 = {0};
				me32.dwSize = sizeof(MODULEENTRY32);
				hModule = CreateToolhelp32Snapshot(0x8, pe32.th32ProcessID);
				if(!Module32First(hModule, &me32))
				{
					CloseHandle(hModule);
					return 0;
				}
				do 
				{
					if(_wcsicmp(me32.szModule, dll) == 0)
					{
						return (DWORD)me32.modBaseAddr;
					}
				} while (Module32Next(hModule, &me32));
 
			}
			Sleep(5);
		} while (Process32Next(hModule, &pe32));
	}
}




Edit: Stimmt, hier wird ja alles Extern gemacht :|, dann zeigt dir der Pattern Snippet immerhin den richtigen weg :P
Suchen
Antworten
Cflash Offline
Junior Member
**
Beiträge: 9
Themen: 1
Registriert seit: Mar 2012
Bewertung: 0
#9
26.03.2012, 22:26 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2012, 22:32 von Cflash.)
(26.03.2012, 22:17)Mydayyy schrieb: C++? Wenn ja, hier SearchPattern snippets





Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool DataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask) 
{ 
	for(;*szMask;++szMask,++pData,++bMask) 
	{ 
		if(*szMask=='x' && *pData!=*bMask ) 
		{ 
			return false; 
		}
	}
	return (*szMask) == NULL; 
}
DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask) 
{ 
	for(DWORD i=0; i < dwLen; i++) 
	{ 
		if( DataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) ) 
		{ 
			return (DWORD)(dwAddress+i); 
		} 
	} return 0; 
}



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





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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
DWORD GetModuleBaseExternW(const wchar_t* process, const wchar_t* dll)
{
	PROCESSENTRY32 pe32 = {0};
	pe32.dwSize = sizeof(PROCESSENTRY32);
 
	while(1)
	{
		HANDLE hModule = CreateToolhelp32Snapshot(0x2, 0);
		if(!hModule || hModule == (HANDLE)-1)
			return 0;
		if(!Process32First(hModule, &pe32))
		{
			CloseHandle(hModule);
			return 0;
		}
 
		do 
		{
			if(_wcsicmp(pe32.szExeFile, process) == 0)
			{
				MODULEENTRY32 me32 = {0};
				me32.dwSize = sizeof(MODULEENTRY32);
				hModule = CreateToolhelp32Snapshot(0x8, pe32.th32ProcessID);
				if(!Module32First(hModule, &me32))
				{
					CloseHandle(hModule);
					return 0;
				}
				do 
				{
					if(_wcsicmp(me32.szModule, dll) == 0)
					{
						return (DWORD)me32.modBaseAddr;
					}
				} while (Module32Next(hModule, &me32));
 
			}
			Sleep(5);
		} while (Process32Next(hModule, &pe32));
	}
}



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

Suchen
Antworten
Acubra Offline
Trainermaker
****
Beiträge: 904
Themen: 127
Registriert seit: Oct 2010
Bewertung: 6
#10
26.03.2012, 22:43
(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.

"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
[Bild: hoglogo_smalpxga.jpg]
Homepage Suchen
Antworten
Share Thread:            
Seiten (3): 1 2 3 Weiter »


  • Druckversion anzeigen
  • Thema abonnieren


Benutzer, die gerade dieses Thema anschauen:
1 Gast/Gäste

  • Kontakt
  • Forum team
  • Forum stats
  • Nach oben
 
  • RSS-Synchronisation
  • Lite mode
  • Home of Gamehacking - Archiv
  • Help
 
Forum software by © MyBB - Theme © iAndrew 2014



Linearer Modus
Baumstrukturmodus