DLL injection (noob)
-
hallo. ich bin ein noob.

so einen code hab ich gemacht:#include <windows.h> #include <iostream> #include <stdio.h> #define PlayerPointer (0xB6F5F0) #define Offset_Health (0x000540) void FreezeHealth() { DWORD PlayerPrt = *(DWORD*)PlayerPointer; *(float*)(PlayerPrt + Offset_Health) = 100; } void HackThread() { for(;;) { FreezeHealth(); Sleep(200); } } BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) { if(dwReason == DLL_PROCESS_ATTACH) { CreateThread(0, 0, (LPTHREAD_START_ROUTINE)HackThread, 0, 0, 0); } return 1; }das soll folgendes bewirken: man kann in dem spiel gta san andreas kein leben mehr verlieren. das habe ich mit einem programm namens "wineject" zum spiel hinzugefügt. aber es ändert sich ncihts. was mache ich falsch???

-
Noob ist eine sehr beleidigende bezeichnung. Vergiss sie. Verwende lieber "neuling"
-
ok ich bin ein neuling xD
wieso geht das denn nicht
-
BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) { if(dwReason == DLL_PROCESS_ATTACH) { CreateThread(0, 0, (LPTHREAD_START_ROUTINE)HackThread, 0, 0, 0); for (;;) { Sleep(1000); } } return 1; }Gehts so? Eventuell beendet sich das Programm sofort wieder.
-
Dieser Thread wurde von Moderator/in Phoemuex aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
bringt auch nix

-
die Offsets stimmen wohl einfach nicht. Wenn du nämlich wirklich ein "noob" auf dem Gebiet bist, dann hast du die auch net selbst gefunden, nehm ich an.
greetz KN4CK3R
-
Wie wäre denn der folgende Vorschlag: Du programmierst einfach ein Programm, das den Prozess deines Spiels öffnet und mit WriteProcessMemory den Speicher des Spiels manipuliert. Eventuell poste ich dazu gleich mal Code.
MfG, Jochen
-
aus der DllMain dürfen keine threads gestartet werden, wegen internen
deadlocks.
-
@jochen: wäre nett, das ist nämlich etwas zu hoch für mich...
@dosenkekse: hm wie soll ich es dann machen?
-
So, hier ist der Code, den ich noch posten wollte:
#include <windows.h> int main() { HANDLE hProcess; DWORD dwProcessID = 1234; DWORD dwData; LPVOID pHealth = (void*)(0x12345678); hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwProcessID); ReadProcessMemory(hProcess, pHealth, (LPVOID)&dwData, sizeof(DWORD), NULL); while(true) { if(!WriteProcessMemory(hProcess, pHealth, (LPVOID)&dwData, sizeof(DWORD), NULL))break; Sleep(100); } CloseHandle(hProcess); }In zeile 12 wird der Wert, auf den pHealth zeigt, gesichert.
In der Schleife wird der Wert dann kontinuierlich in den Prozess an die stelle geschrieben, auf die pHealth zeigt. Es wird also sozusagen ein "Backup" von dem Leben erstellt.Natürlich muss dwProcessID noch die Prozess-ID des zu manipulierenden Prozesses beinhalten, bevor du OpenProcess aufrufst.
Diese Lösung funktioniert nur, wenn der Zeiger auch an die richtige Stelle verweist. Ob deine Werte gültig sind, weiss ich nicht.
Das Programm muss dann parallel zu dem Spiel laufen, allerdings darf das "Backup" des Lebens erst gemacht werden, wenn das Level gerade beginnt, da in der Regel das Spielerobjekt erst dann erstellt wird.
Ich hoffe, ich konnte dir weiterhelfen.
MfG, Jochen