Code:
#include <Windows.h>
#include <stdio.h>
#pragma warning(disable: 4312)
[COLOR="Red"]void Hack()[/COLOR]
{
int Addy = 0x00AA678;
int t = 300;
[COLOR="DarkOrange"]memcpy((void*)Addy,&t,1);[/COLOR]
}
int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
{
[COLOR="DarkOrange"]if(reason==DLL_PROCESS_ATTACH)
{
MessageBoxA(NULL, "Erfolgreich!", "Injection by ;D", MB_OK);
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Hack, NULL, NULL, NULL);
}[/COLOR]
return true;
}
Rotes ist falsch, orangenes nicht ganz in Ordnung:
Statt memcpy kannst du für Werte, die die Größe von vier Bytes nicht überschreiten, einfach Pointer nutzen:
Ein Thread hat den Typ DWORD WINAPI und nicht void.
solltest du also nicht nutzen, um einen Thread zu erstellen.
Wenn du einen Thread beim injecten erstellst, solltest du ihm beim ejecten wieder beenden, damit das Programm nicht crasht. (Falls man die Möglichkeit haben soll, die Dll wieder rauszuholen; außerdem ist es für Tests der Dll auch praktisch, wenn man nicht immer das Programm neustarten muss, weil ejecten nicht möglich ist.)
Schlussendlich eine Antwort auf deine letzte Frage:
Quote:
|
Nächste Frage : wenn meine addy char ist kann ich dann auch int addy nehmen oder muss ich da char/connest char* nehmen.
|
1. heißt es const char, was Moeps Post untermauert, dass du die Sprache nichtmal kannst (das ist nicht das einzige, was seinen Post belegt)
2. Eine Adresse kann nicht int oder sonst was sein, eine Adresse ist eine Adresse. Was an dieser Adresse steht, ist dem Compiler scheißegal.
Du kannst also so etwas machen:
Code:
int x;
char *z = (char*)&x;
*z = 10;
Danach wird x den Wert 10 haben, als hättest du es x direkt zugewiesen oder einen int Pointer benutzt.
Die Datentypen sind nur für den Programmierer wichtig, damit er nicht durcheinander kommt, Pointer haben aber generell die gleiche Größe und es ist demnach völlig egal, welchen Typ die Variable eigentlich haben sollte, auf die er zeigt, die Wirkung am Ende im Programm ist die gleiche.
Der Compiler unterscheidet da nur, damit du nicht aus Versehen int Werte in Strings schreibst o.Ä..