Tobias K.
Erfahrenes Mitglied
moin
Hier ein ganz simples Beispiel.
Dies ist mein "Opfer" Programm bei dem die variable xxx vom "Täter" Programm um eins erhöht werde soll, hab es nochmal Kommentiert:
Nun muss das Programm erstmal gestartet werden um die Adresse zu sehen, sie ist beim starten immer gleich, außer man ändert die Position der exe auf der Festplatte, sprich anderer Ordner.
Nun das Täter Programm:
Hoffe es ist verständlich!
mfg
umbrasaxum
Hier ein ganz simples Beispiel.
Dies ist mein "Opfer" Programm bei dem die variable xxx vom "Täter" Programm um eins erhöht werde soll, hab es nochmal Kommentiert:
Code:
#include <windows.h>
#include <iostream>
int main()
{
int xxx = 5; // Zu ändernde Variable
SetConsoleTitle("cracking opfer"); // Umsicher zu gehen das das Programm auch // wirklich den Fenstertitel hat nach dem wir // suchen
std::cout<< xxx << " " << &xxx << std::endl; // Zeile spricht für sich
Sleep(10000); // Während diesen 10 sek wird das Täter Programm gestartet
std::cout<< xxx << " " << &xxx << std::endl; // Hier kann man den geänderten Wert // von xxx sehen
Sleep(10000);
return 0;
}
Nun muss das Programm erstmal gestartet werden um die Adresse zu sehen, sie ist beim starten immer gleich, außer man ändert die Position der exe auf der Festplatte, sprich anderer Ordner.
Nun das Täter Programm:
Code:
#include <windows.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
HWND hwnd;
DWORD ID;
DWORD rw=0;
HANDLE handle;
int puffer = 0;
unsigned adresse = 0x0012FEE4; // Die Adresse bekommt man durch einen // Probelauf des opfers, wir dbei euch // anders sein
hwnd = FindWindow(NULL, "cracking opfer"); // Fenster suchen
if(!hwnd) // Wenn nciht gefunden gleich raus
{
std::cout<<"Fehler! Konnte Opfer nicht finden";
Sleep(1000);
return 0;
}
GetWindowThreadProcessId(hwnd, &ID); // Nun brauchen wir die ProcessID
// des opfers für die nächste // Funktion
handle = OpenProcess(PROCESS_ALL_ACCESS, false, ID); // Hier holen wir uns
// das handle des // opfers
ReadProcessMemory(handle, (LPCVOID)adresse, &puffer, sizeof(puffer), &rw);
std::cout<< puffer; // Test ob es wirklich der // gesucht Wert xxx ist
WriteProcessMemory(handle, (LPVOID)adresse, &(puffer+=1), sizeof(int), &rw);
// Und nun den Wert überschreiben
Sleep(2000);
CloseHandle(handle); // Extrem wichtig!
return 0;
}
Hoffe es ist verständlich!
mfg
umbrasaxum