Also hab die Adresse (0x14052F8C), die Offset(0x30) und die Value(1). Doch dort muss ich anscheinend keine Adresse einsetzten. Wie soll das ganze denn funktionieren o.O
wie das z.b. :
Code:
unsigned long address2;
unsigned long address1 = 0x14052F8C;
unsigned long offset = 0x30;
int value = 1;
ReadProcessMemory(hProc, (LPCVOID)address1, &address2, sizeof(long), &numBytesRead);
address2 = address2+offset ;
WriteProcessMemory(ProcessHandle,(LPVOID)address2,&value,sizeof(int),NULL);
??????
_________________________
Und was hat es mit dem "int len" auf sich ?
Welcher Wert soll dort zugewiesen werden ? :/
Deine Frage könntest du dir selber beantworten, wenn du dir die Dokumentation zur memcpy() - Funktion betrachten würdest.
DWORD dwOffset ist die Speicheradresse, in der du den Wert kopieren willst, den du als zweiten Parameter angegeben hast. Der dritte Parameter gibt dabei an, wie viele Elemente kopiert werden sollen. Folgendes kleines Beispiel soll das erklären.
Doch es funktioniert immer noch nicht ganz so wie ich will
Das wird wohl noch dauern bis ich des mir zurecht gebastelt habe
So wie du das oben erklärt hast heißt das also
WirteMem(Adresse1, Value von Adresse1 auf Adresse2 schreiben, wv Adressen beschrieben werden sollen)
d.h. es werden die values von einer adresse auf eine andere kopiert. Was ich aber möchte ist, dass die Value von einer Adresse (server.dll+0x0037492C) mit dem Offset(0x14) mit 1 überschrieben werden soll.
Ich gehe davon aus, dass es sich dabei um Code handelt, der via Dll in einen Prozess injiziert wird. Dann brauchst du OpenProcess(), FindWindow() und Co. nicht.
Was ich aber möchte ist, dass die Value von einer Adresse (server.dll+0x0037492C) mit dem Offset(0x14) mit 1 überschrieben werden soll.
Heute 09:23
Dann addiere auf die Adresse das Offset und übergebe die Summe an die Funktion :-/
Dir fehlt es an Grundlagenkenntnisse. Und falls du per Injektion arbeitest, dann nimm dir den Beitrag meines Vorredners zu Herzen und arbeite mit Zeigern. Um einiges schneller.
Au au au, das sollte eigentlich einen Compiler-Fehler geben, du willst du eine Variable vom Typ int (4Bytes groß) in eine Variable vom Typ Byte (1 Byte groß) verschieben, das kannst du natürlich nicht einfach machen.
Ich frage mich sowieso, was das mit dem BYTE Array soll.
Au au au, das sollte eigentlich einen Compiler-Fehler geben, du willst du eine Variable vom Typ int (4Bytes groß) in eine Variable vom Typ Byte (1 Byte groß) verschieben, das kannst du natürlich nicht einfach machen.
Ich frage mich sowieso, was das mit dem BYTE Array soll.
Die Funktion ist vollkommen bescheuert, kein Wunder, dass das in nem Crash endet:
Du brauchst übrigens generell keine Funktionen, wenn du in den Speicher des Prozesses schreiben willst, in dem sich die DLL schon befindet, da nutzt man einfach Pointer.
Nur kann es auch mal sein, dass eben die Code Section, das ist der Teil im Programm, in dem die ausführbaren Daten sind und damit auch die EndScene, welche ja für einen D3D Hook gehookt wird, keinen Schreibzugriff erlaubt und eigentlich nur deshalb sind da die Aufrufe von VirtualProtect.
Um übrigens auf deine Frage im ersten Post zu kommen: Die Namen der Parameter sind doch scheiß egal, mit dwOffset ist in dem Fall die Adresse gemeint!
Hier mal ne bessere Version der Funktion:
Code:
void WriteMem(void *Adresse, void *Quelle, int len)
{
unsigned long Protection;
VirtualProtect(Adresse, len, PAGE_READWRITE, &Protection); //hier stand vorher statt len 1, das ist natürlich Quatsch, da nicht nur das erste Byte auf schreibzugriff gestellt werden muss!
memcpy(Adresse, Quelle, len);
VirtualProtect(Adresse, len, Protection, 0); //hier genauso
}
Und, falls du unbedingt eine Funktion haben möchtest, die den Speicher auf nen gewissen Wert setzt:
Code:
void WriteMem(void *Adresse, int Wert, int len)
{
unsigned long Protection;
VirtualProtect(Adresse, len, PAGE_READWRITE, &Protection);
memset(Adresse, Wert, len);
VirtualProtect(Adresse, len, Protection, 0);
}
Ein kleiner Tipp: du solltest die Sprache vielleicht erstmal richtig lernen.
Die Funktion ist vollkommen bescheuert, kein Wunder, dass das in nem Crash endet:
Du brauchst übrigens generell keine Funktionen, wenn du in den Speicher des Prozesses schreiben willst, in dem sich die DLL schon befindet, da nutzt man einfach Pointer.
Nur kann es auch mal sein, dass eben die Code Section, das ist der Teil im Programm, in dem die ausführbaren Daten sind und damit auch die EndScene, welche ja für einen D3D Hook gehookt wird, keinen Schreibzugriff erlaubt und eigentlich nur deshalb sind da die Aufrufe von VirtualProtect.
Um übrigens auf deine Frage im ersten Post zu kommen: Die Namen der Parameter sind doch scheiß egal, mit dwOffset ist in dem Fall die Adresse gemeint!
Hier mal ne bessere Version der Funktion:
Code:
void WriteMem(void *Adresse, void *Quelle, int len)
{
unsigned long Protection;
VirtualProtect(Adresse, len, PAGE_READWRITE, &Protection); //hier stand vorher statt len 1, das ist natürlich Quatsch, da nicht nur das erste Byte auf schreibzugriff gestellt werden muss!
memcpy(Adresse, Quelle, len);
VirtualProtect(Adresse, len, Protection, 0); //hier genauso
}
Und, falls du unbedingt eine Funktion haben möchtest, die den Speicher auf nen gewissen Wert setzt:
Code:
void WriteMem(void *Adresse, int Wert, int len)
{
unsigned long Protection;
VirtualProtect(Adresse, len, PAGE_READWRITE, &Protection);
memset(Adresse, Wert, len);
VirtualProtect(Adresse, len, Protection, 0);
}
Ein kleiner Tipp: du solltest die Sprache vielleicht erstmal richtig lernen.
Danke, für deine Hilfe, dennoch funktioniert das ganze noch nicht so, wie ich es möchte.
Ich hab die obrige Funktion einwenig umgeändert. Da meine Adressen in DWORD geschrieben sind.
Code:
void WriteMem(DWORD dwAdresse, int Wert, int len)
{
unsigned long Protection;
VirtualProtect((void*)dwAdresse, len, PAGE_READWRITE, &Protection);
memset((void*)dwAdresse, Wert, len);
VirtualProtect((void*)dwAdresse, len, Protection, 0);
}
Bei "len" hab ich erstmal 0 eingesetzt, da bei 1 oder anderen Werten das Spiel abkrazt.
Für dwAdresse habe ich meine fertige Adresse verwendet und bei "Wert" meinen Wert "1" eingetragen.
Wenn ich dann ingame über numpad1 das ganze einschalten möchte, bekomme ich trotzdem noch schaden. Dann hab ich über cheat engine nachgeschaut, ob die Adresse sich auf 1 gesetzt hat. Diese war allerdings immer noch auf 0...
Quote:
Ein kleiner Tipp: du solltest die Sprache vielleicht erstmal richtig lernen.
Du hast recht ich hab nach den wichtigsten basics schon aufgehört, aber es war so interessant mit D3D Hooking anzufangen.
Aber ich wusste auch nicht, dass es so schwer ist eine Value einer bestimmten Adresse zu ändern. :S
[C++]Hook all Recv function Problem 08/21/2010 - C/C++ - 5 Replies Hi Leute
wenn ich send hooke egal welches läuft das alles super nur wenn ich irgendein recv hooke habe ich immer eine Packet size von 1000 bis 10000.
sry das ich schon wieder nerve
#include "WinSock2.h"
#include <cstdio>
#include <ctime>
#include <fstream>
#include <iomanip>
Urban WR D3D Hook PROBLEM!! 06/01/2010 - WarRock - 11 Replies Hi,
Bei dem Urban WR D3D Hook Hack ( http://www.elitepvpers.com/forum/warrock-hacks-bots -cheats-exploits/589000-warrock-urban-wr-d3d-hook- undetected-30-05-2010-a.html ) habe ich ein Problem. Ich habe alles entpackt und
extrahiert aber wenn ich den Injector öffne steht da " Auf das angegebene Gerät , bzw. den Pfad oder die Datei kann nicht zugegriffen werden. Sie verfügen eventuell nicht über ausreichende Berechtigungen, um auf das Element zugreifen zu können" !!!! Ich bin aber Administrator...
C++ hook Problem 10/19/2009 - C/C++ - 15 Replies Also ich habe mir einen Keyboardhook geschrieben und habe das programm gestartet und es wieder beendet ohne den hook unzuhooken und nun geht meine tastatur nicht mehr (auch im bios nicht mehr) tja ich denke ,dass der hook immernoch läuft und ich bräuchte so eine art hook manager .
Oder einfach ein stückcode,das mir alles unhooked .
mein code :
void MsgLoop()
{
MSG message;
BiG problem With hook edx33 07/28/2009 - Silkroad Online - 8 Replies I hook edx33 and now 80 % of my programs no start :rtfm:
and too unhook don't start
im into 64X bit vista windows pls fast reply how to fix them