• 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 2 3 4 5 ... 8 Weiter »
Best Practise C++

Seiten (2): 1 2 Weiter »
Ansichts-Optionen
Best Practise C++
Prototype Offline
Junior Member
**
Beiträge: 15
Themen: 3
Registriert seit: Jul 2013
Bewertung: 0
#1
21.10.2013, 23:43
Moin,

nach längerem Probieren habe ich glaube ich mein Lieblingsweg gefunden Adressen zu überschreiben bzw. zu benutzen. Meistens springe ich mit Code caves an die Stelle, in der meine gewollte Speicheradresse liegt und kopiere sie mir dann aus dem Register. Wie geh ich nun am besten vor.

Mein Code Cave befindet sich in einer .dll. Ein RemoteThread injected ein Thread in den Prozess und führt mein Code aus.

Hier mal meine Funktion die mir die Adresse des Highscores liefert.

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
__declspec(naked) void GetHighscorePointer(void)
{

		__asm
	{
		// The first thing we must do in our codecave is save the return address from the top of the stack
		pop ExtractScoreRetAddr

		
		PUSHAD
		PUSHFD
	}
	


	__asm 
	{
		// Restore everything to how it was before
		POPFD
		POPAD

		
		
	
	//code which was overidden 
		CMP EDX, 0x3B9ACA00
		//eax holds the adress to the current score 
		mov adressPointer,eax
		// The last thing we must do in our codecave is push the return address back onto the stack and then RET back
		push ExtractScoreRetAddr
		ret
	

		}
	
}


Die Adresse steht jetzt in einem DWORD (unsigned int). Was ist der beste Weg die Adresse einem DWORD Pointer zu geben? Soll meine GUI später den Pointer bekommen oder eine Methode der DLL aufrufen um an den richtigen Wert zu kommen?

Suchen
Antworten
Acubra Offline
Trainermaker
****
Beiträge: 904
Themen: 127
Registriert seit: Oct 2010
Bewertung: 6
#2
22.10.2013, 16:01
Hey,
da du schon mit der dll im Prozess bist, kannst du die Werte der Adressen auch direkt von der dll aus manipulieren.
Die Adresse übergibst du am Besten folgendermaßen:

Code:
DWORD adressPointer = 0x1234 //fiktive Adresse
//Wir brauchen zunächst einen Pointer der auf den Wert von adressPointer zeigt (0x1234) und dann einen, der auf den Wert zeigt, den die Adresse enthält. Also einen Pointer auf einen Pointer
DWORD** dwPointer = (DWORD**)&adressPointer;
//Neuen wert schreiben
**dwPointer = 90; //90d== 5a hex

"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
[Bild: hoglogo_smalpxga.jpg]
Homepage Suchen
Antworten
Prototype Offline
Junior Member
**
Beiträge: 15
Themen: 3
Registriert seit: Jul 2013
Bewertung: 0
#3
22.10.2013, 17:47 (Dieser Beitrag wurde zuletzt bearbeitet: 22.10.2013, 17:55 von Prototype.)
Ah interessant. Wenn ich das richtig verstehe deutest du auf einen Pointer der wiederum auf den Wert zeigt.

Da stinkt natürlich memcpy gegen ab Happy

Edit:

Vielleicht noch eine kleine eher unwichtige Frage, baut ihr für euren Trainer einen Loader, sprich das Spiel startet mit dem Trainer oder hängt ihr euch in den laufenden Prozess? Letztes ist denke ich vor allem bei Code caves eher suboptimal
Suchen
Antworten
Acubra Offline
Trainermaker
****
Beiträge: 904
Themen: 127
Registriert seit: Oct 2010
Bewertung: 6
#4
22.10.2013, 18:04
Hey,
bei uns läuft alles extern. Ich alloziiere zunächst Speicher im Spielprozess und schreibe dahin dann per WriteProcessMemory meine Cheats (in ASM). Anschließend wird der Sprung zur jeweiligen "Cave" geschrieben. Manchmal reicht es ja auch einzelne Befehle zu "noppen".
Manchmal suche ich auch Pointer für bestimmte Adressen und arbeite dann mit diesen (also per ReadProcessMemory die Pointer + Offsets auslesen bis man bei der gewünschten Adresse ist).
Ich habe auch ne Trainerbase als .dll geschrieben, die dann immer injiziert werden müsste, hat mir aber nicht gefallen.
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
[Bild: hoglogo_smalpxga.jpg]
Homepage Suchen
Antworten
iNvIcTUs oRCuS Offline
Super Moderator
****
Beiträge: 2.688
Themen: 529
Registriert seit: Aug 2010
Bewertung: 19
#5
22.10.2013, 18:15
In der Regel funktionieren unsere Trainer, und Trainer anderer Groups, nachdem Prinzip das diese die laufenden Prozesse überwachen.
Überwachen aber nur in sofern das darauf gewartet wird bis der Spieleprozess gestartet wurde.
Schau mal in die MSDN und die API CreateToolHelp32Snapshot, dann sollte dir das schnell klar werden.
Im Prinzip ist es dann unwichtig ob zuerst der Trainer oder das Spiel gestartet wurde.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!

Traineranfragen per PM werden prinzipiell gelöscht...

[Bild: signatur6akm7.gif]
Suchen
Antworten
Prototype Offline
Junior Member
**
Beiträge: 15
Themen: 3
Registriert seit: Jul 2013
Bewertung: 0
#6
22.10.2013, 18:24
Okay, okay. Ich denke die Basis habe ich schon langsam.

Eine eher theoretische Frage. Kann eine Anti cheat engine eine injizierte Dll erkennen? Wenn ja wäre es eigentlich immer besser memory in dem Prozess zu allozieren und da seinen cave rein zu laden.
Suchen
Antworten
Acubra Offline
Trainermaker
****
Beiträge: 904
Themen: 127
Registriert seit: Oct 2010
Bewertung: 6
#7
22.10.2013, 18:33
Hey,
die guten AntiCheats erkennen heutzutage beide Methoden. Da muss man sich schon mehr einfallen lassen, um das AntiCheat auszutrixen.
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
[Bild: hoglogo_smalpxga.jpg]
Homepage Suchen
Antworten
iNvIcTUs oRCuS Offline
Super Moderator
****
Beiträge: 2.688
Themen: 529
Registriert seit: Aug 2010
Bewertung: 19
#8
22.10.2013, 18:36 (Dieser Beitrag wurde zuletzt bearbeitet: 22.10.2013, 18:37 von iNvIcTUs oRCuS.)
Die meisten Anti Cheat Systeme basieren unter anderem darauf das der eigene Spieleprozess oder einzelne Dateien entweder mit nem simplen CR Check versehen sind, oder der Speicher des Spiels auf Manipulationen überwacht wird.
Bestes Beispiel hierfür ist XLive. Oder auch Crysis 3 hat einen ausgefeilten, aber nicht unüberwindbaren Cheat Schutz. Wobei man aber auch strikt zwichen Cheat Schutz und Kopierschutz unterscheiden solle.
Bei Onlinegames dürfte das ganze schwieriger sein. Serverseitiger Datenabgleich/speicherung...
Aber cheaten in Online Games wird hier (von uns) ohnehin nicht toleriert.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!

Traineranfragen per PM werden prinzipiell gelöscht...

[Bild: signatur6akm7.gif]
Suchen
Antworten
Prototype Offline
Junior Member
**
Beiträge: 15
Themen: 3
Registriert seit: Jul 2013
Bewertung: 0
#9
22.10.2013, 18:45
Gibt es irgendwo vielleicht den src einer trivialen anti cheat engine? Bzw. eine Beschreibung? Das ganze kann eigentlich nur überwacht werden, wenn bestimmte win api funktionen gehooked werden. Und das auf einem möglichst lowen Level. So ein tutorial speziell für anti cheat engines ist da bestimmt interessant
Suchen
Antworten
iNvIcTUs oRCuS Offline
Super Moderator
****
Beiträge: 2.688
Themen: 529
Registriert seit: Aug 2010
Bewertung: 19
#10
22.10.2013, 18:51
Da allerdings in Singleplayermodi von nahezu jedem Spiel nie eine Anti Cheat Routine auftaucht, würde ich behaupten das Du für solche Zwecke eher in einem Forum für Online Cheats fündig werden könntest.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!

Traineranfragen per PM werden prinzipiell gelöscht...

[Bild: signatur6akm7.gif]
Suchen
Antworten
Share Thread:            
Seiten (2): 1 2 Weiter »


  • Druckversion anzeigen
  • Thema abonnieren


Benutzer, die gerade dieses Thema anschauen:

  • 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