Jetzt kostenlos registrieren
   
News    Board    DBase    Kinoarchiv    Gruppen    Chat    Teamspeak    Wiki    Banner    Regeln    Team Jetzt kostenlos registrieren! 

Willkommen :)
Nachrichten
Neu: n/a
Insg.: n/a
Neue PN schreiben
Mein Profil
Du hast schon einen Account? Hier kannst du dich anmelden.


 



Wir speichern nicht!


Wenn du dich aktiv gegen den Überwachungswahn engagieren möchtest,
klicke hier



 
aka XPerience
Benutzerbild von UnlimitedPower

Registriert seit:
13.04.2007
Alter: 19
Beiträge: 291
Für Beiträge bedankt: 116
Erhielt 117 Danke
für 72 Posts
Rang: 19
UnlimitedPower hat eine strahlende ZukunftUnlimitedPower hat eine strahlende ZukunftUnlimitedPower hat eine strahlende ZukunftUnlimitedPower hat eine strahlende ZukunftUnlimitedPower hat eine strahlende ZukunftUnlimitedPower hat eine strahlende ZukunftUnlimitedPower hat eine strahlende ZukunftUnlimitedPower hat eine strahlende ZukunftUnlimitedPower hat eine strahlende ZukunftUnlimitedPower hat eine strahlende ZukunftUnlimitedPower hat eine strahlende Zukunft
 
Standard #1 (Link) Speichermanipulation [C++] erstellt am: 11.02.2008 um 16:51
Geändert von UnlimitedPower (10.07.2008 um 23:27 Uhr). Grund: -.- Badword List ...

Tutorial Speichermanipulation

Wir werden heute einen simplen Trainer für das Windows Standart Spiel Pinball schreiben. Dafür brauchen wir zusätzlich zu einer IDE noch ein Programm wie z.B. T-Search um den Speicher unseres Zielprogramms nach der Speicheradresse der Variable zu durchsuchen, die wir manipulieren wollen. Das ihr wisst wie ihr mit dem Programm arbeiten müsst setze ich voraus. Das könnte in diesem Fall die Anzahl der verbleibenden Kugeln oder auch die erreichten Punkte sein.

Wir erstellen nun ein neues Win32-Konsolenprogramm und inkludieren iostream und windows.h. Nun legen wir auch gleich den Namespace std fest.
Der Code müsste dann ungefähr so aussehen

Code:
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{

	return 0;
}
Nun brauchen wir als erstes einen Handle auf das Fenster. Den holen wir uns mit der Funktion FindWindow, die als 2ten Parameter den Namen des Window braucht. Der ersten Parameter ist in unserem Fall 0 da uns die Klasse egal ist.

Code:
hWnd = FindWindow(0, TEXT("3D-Pinball für Windows - Space Cadet"));
Nun holen wir uns mithilfe dieses WindowHandles die Prozess Id unseres Opefer Programms.
Dies machen wir mit GetWindowThreadProcessId, das als ersten Parameter den WindowHandle haben möchte und als 2tes einen Pointer auf ein DWORD in dem die Prozess Id gespeichert werden soll.

Code:
GetWindowThreadProcessId(hWnd, &processId);
Jetzt können wir schon fast in den Prozess schreiben, aber eines fehlt noch: wir brauchen einen Handle auf den Prozess mit den Rechten zum Schreiben und Lesen.
OpenProcess verlangt als 1ten Parameter den gewünschten Zugriffrechte, das ist in unserem Fall PROCESS_ALL_ACCESS. Der 2te Parameter ist in unserem Fall nicht sehr wichtig, den er gibt an ob Prozesse die von unserem Prozess gestartet wurden das Handle erben sollen oder nicht. Wir „sagen“ einfach false. Als letzten Parameter muss die Prozess Id übergeben werden.
Jetzt sollte unser Code in etwa so aussehen

Code:
#include <iostream>
#include <windows.h>

using namespace std;



int main()
{
	HWND hWnd;
	DWORD processId;
	HANDLE hGame;
	hWnd = FindWindow(0, TEXT("3D-Pinball für Windows - Space Cadet"));
	if(!hWnd)
	{
		cout << "Pinball nicht gefunden" << endl;
		system("pause");
		return 1;
	}
	GetWindowThreadProcessId(hWnd, &processId); //ProcessId über das WindowHandle bekommen
hGame = OpenProcess(PROCESS_ALL_ACCESS, false, processId); //Handle auf den Process(das Spiel) bekommen
	if(!hGame)
	{
		cout << "Konnte Handle nicht erstellen: " << GetLastError() << endl;
		system("pause");
	return 1;
}
return 0;
}
So jetzt ist es soweit wir haben Zugriff auf den Speicher und können nach belieben darin herumwerkeln. Aber Vorsicht wenn ihr aus Versehen oder evtl. auch beabsichtig Programmcode überschreibt kann der Zielprozess abstürzen. Nun aber genug geredet, suchen wir nach der Speicheradresse wo im Code der Punktestand gespeichert wird. Bei mir konnte ich die Variable an der Adresse bereits nach dem 2ten Durchlauf bei 0xBBAEBA lokalisieren.
Nun soll der Trainer in Spee bei jedem Druck auf F5 den Punktestand um 1.000.000 erhöhen.
Dafür brauchen wir die GetAsyncKeyState Funktion die als Parameter den virtuellen KeyCode der taste haben möchte.
Eine Liste der virtuellen KeyCodes findet ihr
Links sind  nur für registrierte Mitglieder sichtbar.
INFO: Die Registrierung dauert nur ein paar Sekunden. 

 
.
Wenn das LSB des Rückgabewertes gesetzt ist, dann wurde die Taste seit dem letzten Aufruf von GetAsyncKeyState gedrückt wurde.
Also schreiben wir:

Code:
	if(GetAsyncKeyState(VK_F5) & 1)
	{
Nun lesen wir jedes Mal als erstes den aktuellen Score aus um ihn anschließend um 10^6
zu erhöhen.
ReadProcessMemory und WriteProcessMemory verlangen beide exakt die gleichen Parameter.
Als 1ten muss ein Handle auf den Prozess übergeben werden, danach die Speicheradresse die nach LPVOID gecastet werden muss. Jetzt noch ein Pointer auf die Variable die den Wert enthält/enthalten soll, die Größe dieser Variable und als allerletzten Parameter noch ein Pointer auf ein DWORD das die tatsächlich gelesen Bytes enthält. Der letzte Parameter kann 0 enthalten.

Code:
if(GetAsyncKeyState(VK_F5) & 1) 
	{
		ReadProcessMemory(hGame, (LPVOID) 0xBBAEBA, &value, sizeof(value), 0);
		value += 1000000;
		WriteProcessMemory(hGame, (LPVOID) 0xBBAEBA, &value, sizeof(value), 0);
	}
Nun setzen wir diesen Code in eine Schleife damit wir ihn mehr als 1 mal benutzen können.
Ein Sleep(100); sollten wir ebenfalls in die Schleife setzten damit das Programm nicht den Rechner vollkommen auslastet.
Kleine Anmerkung:
Wenn ein Handle nicht mehr benötigt wird sollte man ihn immer mit CloseHandle(hHandle);
freigeben. In diesem Fall ist das nicht so unbedingt nötig da es sich um ein kleines Programm handelt bei dem es nicht eine so große Rolle spielt.

Nun ist der Trainer in seinen Grundzügen fertig. Jetzt könnt ihr noch zusätzliche Verbesserungen/Funktionen einbauen wie z.B. die Möglichkeit unbegrenzt Bälle zu haben.
Abschließend noch einmal der gesamte Code:

Code:
#include <iostream>
#include <windows.h>

using namespace std;


int main()
{
	HWND hWnd;
	DWORD processId;
	HANDLE hGame;
	int value = 0;
	hWnd = FindWindow(0, TEXT("3D-Pinball für Windows - Space Cadet"));
	if(!hWnd)
	{
		cout << "Pinball nicht gefunden" << endl;
		system("pause");
		return 1;
	}
	GetWindowThreadProcessId(hWnd, &processId); //ProcessId über das Window Handle bekommen
	hGame = OpenProcess(PROCESS_ALL_ACCESS, false, processId); //Handle auf den Process(das Spiel) bekommen
	if(hGame == 0)
	{
		cout << "Konnte Handle nicht erstellen: " << GetLastError() << endl;
		system("pause");
		return 1;
	}
	cout << "Bitte F5 druecken" << endl;
	while(1)
	{
		if(GetAsyncKeyState(VK_F5) & 1) //das LSB ist gesetzt wenn seit dem letzen Aufruf die Taste gedrückt wurde
		{
			ReadProcessMemory(hGame, (LPVOID) 0xBBAEBA, &value, sizeof(value), 0);
			value += 1000000;
			WriteProcessMemory(hGame, (LPVOID) 0xBBAEBA, &value, sizeof(value), 0);
		}
	}
	return 0;
}

PS.
Falls ihr häufiger folgende Ausgabe bekommen solltet: „Konnte Handle nicht erstellen: 5“, meldet euch.

Edit:
der Übersichtlichkeit wegen hab ich mal die Links zum Fehler 5 beheben nach vorne geholt:
Links sind  nur für registrierte Mitglieder sichtbar.
INFO: Die Registrierung dauert nur ein paar Sekunden. 

 

Links sind  nur für registrierte Mitglieder sichtbar.
INFO: Die Registrierung dauert nur ein paar Sekunden. 

 




Tutorial by UnlimitedPower 4 ddl-board.com

"Non vitae, sed scholae discimus."
Nicht für das Leben, sondern für die Schule lernen wir.
Seneca, Epistulae morales 106,12
UnlimitedPower ist gerade online Mit Zitat antworten Antwort
 
DDLB-Elly
treue Memberin


Registriert seit:
26.06.2007
Beiträge:
228

Für Beiträge
bedankt:
326
Erhielt 194 Danke
für 79 Posts
Rang:
91

knoob sorgt für eine eindrucksvolle Atmosphäreknoob sorgt für eine eindrucksvolle Atmosphäreknoob sorgt für eine eindrucksvolle Atmosphäreknoob sorgt für eine eindrucksvolle Atmosphäreknoob sorgt für eine eindrucksvolle Atmosphäreknoob sorgt für eine eindrucksvolle Atmosphäreknoob sorgt für eine eindrucksvolle Atmosphäreknoob sorgt für eine eindrucksvolle Atmosphäre
knoob sorgt für eine eindrucksvolle Atmosphäre
Standard erstellt am: Gestern um 19:02

Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen.
Albert Einstein


6 User haben sich bedankt.

 
Member

Registriert seit:
19.02.2007
Ort: NRW
Beiträge: 13
Für Beiträge bedankt: 32
Erhielt 49 Danke
für 2 Posts
Rang: 0
enco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblick
 
Standard #2 (Link) erstellt am: 22.03.2008 um 13:42
Ich bekomme ständig nur die Ausgabe: „Konnte Handle nicht erstellen: 5“
Woran liegt das, und wie kann ichs beheben?

MfG, enco
enco ist offline Mit Zitat antworten Antwort
 

 
Bieroholiker
Benutzerbild von Schildkröte

Registriert seit:
27.06.2007
Beiträge: 825
Für Beiträge bedankt: 146
Erhielt 290 Danke
für 190 Posts
Rang: 45
Schildkröte genießt hohes AnsehenSchildkröte genießt hohes AnsehenSchildkröte genießt hohes AnsehenSchildkröte genießt hohes AnsehenSchildkröte genießt hohes AnsehenSchildkröte genießt hohes AnsehenSchildkröte genießt hohes AnsehenSchildkröte genießt hohes AnsehenSchildkröte genießt hohes AnsehenSchildkröte genießt hohes AnsehenSchildkröte genießt hohes Ansehen
Schildkröte eine Nachricht über ICQ schicken
 
Standard #3 (Link) erstellt am: 22.03.2008 um 13:55
Sehr gutes Tutorial für Anfänger.
Btw: Habs mal kompilliert und es geht perfekt.

Cheers
Schildkröte ist offline Mit Zitat antworten Antwort
 

 
Member

Registriert seit:
19.02.2007
Ort: NRW
Beiträge: 13
Für Beiträge bedankt: 32
Erhielt 49 Danke
für 2 Posts
Rang: 0
enco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblick
 
Standard #4 (Link) erstellt am: 22.03.2008 um 14:01
Geändert von enco (22.03.2008 um 14:51 Uhr).

In Visual C++ 6 lässt es sich ohne probleme kompilieren, in Visual C++ 2008 muss die Lösung unten benutzt werden.

Anstatt
Code:
PROCESS_ALL_ACCESS
müsst ihr bei dem Fehler einfach
Code:
PROCESS_VM_WRITE
benutzen, wenn ihr nur schreiben wollt.
Eine Liste mit den rechten gibts hier:
Links sind  nur für registrierte Mitglieder sichtbar.
INFO: Die Registrierung dauert nur ein paar Sekunden. 

 
enco ist offline Mit Zitat antworten Antwort
 

 
treuer Member
Benutzerbild von lalelu

Registriert seit:
20.04.2007
Beiträge: 476
Für Beiträge bedankt: 251
Erhielt 204 Danke
für 125 Posts
Rang: 32
lalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehen
 
Standard #5 (Link) erstellt am: 22.03.2008 um 18:29
hi
erstmal thx für das tut.
habe kein plan von c++ und gerade aus langeweile das mal ausprobiert nur leider funktioniert das schreiben in den speicher nicht... was mach ich falsch?
ich nutze visual c++ 2008 express
gruß L.
Code:
#include <iostream>
#include <windows.h>

using namespace std;


int main(){	
	HWND hWnd;
	DWORD processId;
	HANDLE hGame_w,hGame_r;
	int value = 0;
	hWnd = FindWindow(0, TEXT("3D-Pinball für Windows - Space Cadet"));
	if(!hWnd){
		cout << "Pinball nicht gefunden" << endl;
		system("pause");
		return 1;
	}
	GetWindowThreadProcessId(hWnd, &processId); 
	hGame_w = OpenProcess(PROCESS_VM_WRITE && PROCESS_VM_OPERATION, false, processId); 
	hGame_r = OpenProcess(PROCESS_VM_READ, false, processId);
	cout << "Bitte F5 druecken" << endl;
	while(1){
		if(GetAsyncKeyState(VK_F5) & 1){
			ReadProcessMemory(hGame_r, (LPVOID) 0xC1AEBA, &value, sizeof(value), 0);
			value+=10000;
			WriteProcessMemory(hGame_w, (LPVOID) 0xC1AEBA, &value, sizeof(value), 0);
			cout << "val: " << value << endl;
		}
		if(GetAsyncKeyState(VK_ESCAPE) & 1){
			break;
		}
	}
	return 0;
}

veni, vidi, vici
lalelu ist offline Mit Zitat antworten Antwort
 

 
Member

Registriert seit:
19.02.2007
Ort: NRW
Beiträge: 13
Für Beiträge bedankt: 32
Erhielt 49 Danke
für 2 Posts
Rang: 0
enco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblick
 
Standard #6 (Link) erstellt am: 22.03.2008 um 18:43
Geändert von enco (22.03.2008 um 18:45 Uhr).

Laut
Links sind  nur für registrierte Mitglieder sichtbar.
INFO: Die Registrierung dauert nur ein paar Sekunden. 

 
brauchst du noch eine zweite Adresse im Speicher: 00AC3F6C

Bei mir stehen die Punkte in 2 Adressen, 00C3AEBA und 00AC3F6C
Aber nicht in 00C1AEBA wie im Tutorial benutzt.

Ich versuch es damit glech auch noch mal.
enco ist offline Mit Zitat antworten Antwort
 

 
treuer Member
Benutzerbild von lalelu

Registriert seit:
20.04.2007
Beiträge: 476
Für Beiträge bedankt: 251
Erhielt 204 Danke
für 125 Posts
Rang: 32
lalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehen
 
Standard #7 (Link) erstellt am: 22.03.2008 um 18:46
Geändert von lalelu (22.03.2008 um 18:49 Uhr).

das dürfte eigentlich egal sein.
außerdem ändert es nichts an meinem problem, da ich noch nichtmal an der einen adresse den wert geändert bekomme

edit: beim tut ist es BBAEBA bei mir steht auf jeden fall in C1ABEA die punktzahl...

veni, vidi, vici
lalelu ist offline Mit Zitat antworten Antwort
 

 
Member

Registriert seit:
19.02.2007
Ort: NRW
Beiträge: 13
Für Beiträge bedankt: 32
Erhielt 49 Danke
für 2 Posts
Rang: 0
enco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblick
 
Standard #8 (Link) erstellt am: 22.03.2008 um 18:51
Wenn ich die Adressen manuell in Cheatengine verändern will muss ich beide ändern.
Wenn ich nur eine änder dann wirkt sich das nicht auf den Punktestand aus.

Änder ich beide dann funktioniert es.

Nur das ganze will im Programm nicht so recht.
enco ist offline Mit Zitat antworten Antwort
 

 
treuer Member
Benutzerbild von lalelu

Registriert seit:
20.04.2007
Beiträge: 476
Für Beiträge bedankt: 251
Erhielt 204 Danke
für 125 Posts
Rang: 32
lalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehenlalelu genießt hohes Ansehen
 
Standard #9 (Link) erstellt am: 22.03.2008 um 18:57
habe auch zwei adressen in den es steht...
wenn ich die eine ändere tut sich nichts und wenn ich die C1... änder dann funzt es aber wie gesagt das eigentliche problem ist ja dass ich mit c++ nichts rein geschrieben bekomme.

veni, vidi, vici
lalelu ist offline Mit Zitat antworten Antwort
 

 
Member

Registriert seit:
19.02.2007
Ort: NRW
Beiträge: 13
Für Beiträge bedankt: 32
Erhielt 49 Danke
für 2 Posts
Rang: 0
enco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblickenco ist ein wunderbarer Anblick
 
Standard #10 (Link) erstellt am: 22.03.2008 um 19:02
Geändert von enco (22.03.2008 um 19:27 Uhr).

Das Problem hab ich ja auch und ich kanns mir nicht erklären.
Gerade weil ich vorhin noch mithilfe dieses Tutorials ein Trainer fpr ein anderes Spiel geschrieben hab - Der funktioniert!

Code:
/*
TRAINER:
Game:	strike2Death 0.30
Date:	03-22-2008
*/

#include <iostream>
#include <windows.h>

using namespace std;


int main()
{
	HWND hWnd;
	DWORD processId;
	HANDLE hGame;
	int value = 0;
	hWnd = FindWindow(0, TEXT("strike2Death 0.30"));
	if(!hWnd)
	{
		cout << "Pinball nicht gefunden" << endl;
		system("pause");
		return 1;
	}
	GetWindowThreadProcessId(hWnd, &processId); //ProcessId über das Window Handle bekommen
	hGame = OpenProcess(PROCESS_ALL_ACCESS, false, processId); //Handle auf den Process(das Spiel) bekommen
	if(hGame == 0)
	{
		cout << "Konnte Handle nicht erstellen: " << GetLastError() << endl;
		system("pause");
		return 1;
	}
	cout << "Bitte F5 druecken" << endl;
	while(1)
	{
		if(GetAsyncKeyState(VK_F5) & 1) //das LSB ist gesetzt wenn seit dem letzen Aufruf die Taste gedrückt wurde
		{
			ReadProcessMemory(hGame, (LPVOID) 0x00091810, &value, sizeof(value), 0);

			cout << value << endl;

			value = 999;

			WriteProcessMemory(hGame, (LPVOID) 0x00091810, &value, sizeof(value), 0);

			cout << value << endl;
		}
	}
	return 0;
}
----------------------------------------------------------------------------------

So der Code hier schreibt nur inden Speicher, benutzt also nicht den voherigen Wert und erhöht die Punkte.
Die Punkte werden auf die Maximalpunktzhal gesetzt.

Code:
#include <iostream>
#include <windows.h>

using namespace std;


int main(){	
	int value  = 999999;
	
	HWND hWnd;
	hWnd = FindWindow(0, TEXT("3D-Pinball für Windows - Space Cadet"));
	
	if(!hWnd){
		cout << "Pinball nicht gefunden" << endl;
		system("pause");
		return 1;
	}

	DWORD processId;
	GetWindowThreadProcessId(hWnd, &processId); 
	
	HANDLE hGame;
	hGame = OpenProcess(PROCESS_ALL_ACCESS, false, processId); 

	cout << "Bitte F5 druecken" << endl;
	while(1){
		if(GetAsyncKeyState(VK_F5) & 1){

			WriteProcessMemory(hGame, (LPVOID) 0x00C3AEBA, &value, sizeof(value), 0);
			WriteProcessMemory(hGame, (LPVOID) 0x00AC3F6C, &value, sizeof(value), 0);

		}
		if(GetAsyncKeyState(VK_ESCAPE) & 1){
			break;
		}
	}
	return 0;
}
----------------------------------------------------------------------------------
ENDLICH FUNKTIONIERT ES!
So das Problem war, dass die werte zu spät ausgelsen wurden (oder so ähnlich).
Naja auf jeden Fall funktioniert es jetzt und ich bin Glücklich xD

Code:
#include <iostream>
#include <windows.h>

using namespace std;


int main(){		
	HWND hWnd;
	hWnd = FindWindow(0, TEXT("3D-Pinball für Windows - Space Cadet"));
	
	if(!hWnd){
		cout << "Pinball nicht gefunden" << endl;
		system("pause");
		return 1;
	}

	DWORD processId;
	GetWindowThreadProcessId(hWnd, &processId); 
	
	HANDLE hGame;
	hGame = OpenProcess(PROCESS_ALL_ACCESS, false, processId);

	int value1, value2;
	ReadProcessMemory(hGame, (LPVOID) 0x00C3AEBA, &value1, sizeof(value1), 0);
	ReadProcessMemory(hGame, (LPVOID) 0x00AC3F6C, &value2, sizeof(value2), 0);

	cout << "Val1 " << value1 << endl;
	cout << "Val2 " << value2 << endl;

	int newValue; 
	newValue = value1 + 50000;

	cout << "Bitte F5 druecken" << endl;
	while(1){
		if(GetAsyncKeyState(VK_F5) & 1){

			WriteProcessMemory(hGame, (LPVOID) 0x00C3AEBA, &newValue, sizeof(newValue), 0);
			WriteProcessMemory(hGame, (LPVOID) 0x00AC3F6C, &newValue, sizeof(newValue), 0);

			newValue = newValue + 50000;

		}
		if(GetAsyncKeyState(VK_ESCAPE) & 1){
			break;
		}
	}
	return 0;
}
enco ist offline Mit Zitat antworten Antwort
 



News   |   Board    |   Chat    |   Teamspeak    |   Team   |   Stuff    |   Partner   |   Archive

SEO by vBSEO 3.2.0


Umbau läuft (v4)