So Leute ich arbeite an einen DLL Hack für Nos doch da gibt es ein Problem sobald ich Nostale mit der DLL injectiere steht da Nostale.exe funktioniert nichtmehr blablabla ...
Geb mal aus ob deine ImageBase Addresse bzw dein Basepointer richtig ist.
DWORD ImageBase = (DWORD)GetModuleHandle(0);
Das sieht mir bischen eigenartig aus, aber okay.
Da ich "Nos" nicht kenne zähle ich einfach mal alle potentiellen Fehlerquellen auf.
Code:
DWORD BasePointer = 0;
In x64 Prozessen kann das zu Fehlern führen, da dort Arbeitsspeicher mit 8 Byte adressiert wird. Zeigt dein Pointer nun z.B. auf C00000000, dann passt das nicht in die Variable und in ihr steht dann lediglich 0.
Code:
#define Points 0x000009C4
Mal ganz davon abgesehen, dass das absolut unschön ist; bist du dir sicher, dass die Adresse stimmt?
Code:
DWORD WINAPI HackThread(LPVOID unused)
Rückgabewert definiert, aber es wird nichts zurückgegeben. Dass das überhaupt erstellt werden kann wundert mich! Welchen Compiler nutzt du?
dein pointer offset (modul address) ist höchstwahrscheinlich falsch
also das: 0x004E6ABC
weil wenn die adresse falsch ist, erzeugt die dll injection nen overflow und deswegen stürzt nostale ab
Das musst du mir nochmal genauer erklären.
Quote:
willst du mir sagen das du void HackThread(){... machst ? <- ist nähmlich das schlechteste was man tuhen kann
Nein, er will sagen, dass man in einer Funktion, die als DWORD definiert ist, auch einen Wert vom Typ DWORD zurückgeben muss. Ein fehlendes return Statement ist ein Fehler.
Quote:
2.
Code:
DWORD WINAPI HackThread(LPVOID [B]unused[/B])
wie du siehst und man kann auch einen logischen schluss ziehen, verwenden wir den rückgabewert garnicht
Scheiße, wenn man den Unterschied zwischen Parametern und Rückgabewerten nicht kennt.
Scheiße, wenn man den Unterschied zwischen Parametern und Rückgabewerten nicht kennt.
Klar kenn ich den
Man kann aber parameter auch zurück geben, aber nicht immer und nicht jeden ! (paar andere vorraussetzungen spielen da natürlich auch mit..)
ein bsp in java wär:
Code:
public static int method2(String s) throws IllegalArgumentException {
if((s.charAt(0) > 'G') && (s.charAt(s.length() -1) < 'M')) {
throw new IllegalArgumentException("So nicht.");
}
return s.length();
}
Quote:
Originally Posted by MrSm!th
Das musst du mir nochmal genauer erklären.
wenn man in ein spiel injectet und die adressen sind falsch, bekommt das spiel nen dc weil die dll auf irgendeine adresse zeigt etc.
ich hoffe das ich es besser erklärt hab, weil ich kein typ der alles 1a erklären kann
So wie er es benutzt passiert da nichts schlimmes, es wird dann irgendein Wert in deine Variable gesteckt. Das Gleiche passiert, wenn du void als Rückgabetypen wählst. Im eax Register steht dann lediglich das, was vor dem Aufruf der Funktion drinnen stand.
Klar, das ist trotzdem falsch und es kann in x64 Prozessen crashen, aber ich habe das auch so gar nicht gemeint (wie Smith bereits sagte).
Quote:
Originally Posted by XxharCs
2.
Code:
DWORD WINAPI HackThread(LPVOID [B]unused[/B])
wie du siehst und man kann auch einen logischen schluss ziehen, verwenden wir den rückgabewert garnicht
Hier haust du ein paar wirklich fundamentale Dinge durcheinander! Ich rate dir nochmal ein Buch zu nehmen und das Kapitel "Funktionen/Prozeduren" durchzuarbeiten.
Quote:
Originally Posted by XxharCs
noch zum TE:
den code copy&pasten und eigentlich nicht viel ahnung von dieser umgebung zu haben, passt nicht zusammen
Nehm dir ein Beispiel dran. Wenn man keine Ahnung hat, dann sollte man auch keine Tipps geben.
Quote:
Originally Posted by XxharCs
Man kann aber parameter auch zurück geben, aber nicht immer und nicht jeden ! (paar andere vorraussetzungen spielen da natürlich auch mit..)
Man gibt keine Parameter zurück, das ist absoluter Unsinn!
Quote:
Originally Posted by XxharCs
ein bsp in java wär:
Wo genau gibst du da nun einen Parameter zurück? Du gibst in deinem Beispiel die Länge des Parameters "String s" zurück, sofern es den vorrausgegangenen Check übersteht.
Quote:
Originally Posted by XxharCs
wenn man in ein spiel injectet und die adressen sind falsch, bekommt das spiel nen dc weil die dll auf irgendeine adresse zeigt etc.
ich hoffe das ich es besser erklärt hab, weil ich kein typ der alles 1a erklären kann
deswegen sag ich das seine adresse falsch ist
Siehe Punkt 1, das ist kein Overflow.
Man gibt keine Tipps, wenn man nicht weiß wovon man spricht.
Man kann aber parameter auch zurück geben, aber nicht immer und nicht jeden ! (paar andere vorraussetzungen spielen da natürlich auch mit..)
vorraussetzung wär in dem fall das ich die länge zurück gebe(.length), ein weiteres beispiel ist wenn ich zb den parameter * 2 oder was anderes im return mache, ich hoffe du verstehst was ich meine
aber das weitere diskutieren lass ich mal erspart bleiben, willst du sicher auch nicht
nur noch beim:
Quote:
Rückgabewert definiert, aber es wird nichts zurückgegeben.
hab ich deine aussage falsch intepretiert, nimms nicht böse, aber durch Sm!ths post hab ich dich schon verstanden was du meintest
Quote:
Siehe Punkt 1, das ist kein Overflow.
als ich damals logs erstellt habe bei den probs die ich hatte, sagten die logs das es sich um einen overflow handelte da die adresse auf wichtige threads gezeigt hat und ich dann irgendwas verändert hab und deswegen stürzte es ab
aber Zugriffsverletzungen in diesem fall, würd ichs nicht nennen, da bei der zugriffsverletzung schon was anderes passiert
aber Zugriffsverletzungen in diesem fall, würd ichs nicht nennen, da bei der zugriffsverletzung schon was anderes passiert
Du kannst es nennen wie du willst, an einen "bad pointer" zu schreiben bringt dir wahrscheinlich eine Access violation ein.
Was, wenn nicht das hier, sollte sonst eine Access violation auslösen o.0 ?
vorraussetzung wär in dem fall das ich die länge zurück gebe(.length), ein weiteres beispiel ist wenn ich zb den parameter * 2 oder was anderes im return mache, ich hoffe du verstehst was ich meine
aber das weitere diskutieren lass ich mal erspart bleiben, willst du sicher auch nicht
nur noch beim:
hab ich deine aussage falsch intepretiert, nimms nicht böse, aber durch Sm!ths post hab ich dich schon verstanden was du meintest
als ich damals logs erstellt habe bei den probs die ich hatte, sagten die logs das es sich um einen overflow handelte da die adresse auf wichtige threads gezeigt hat und ich dann irgendwas verändert hab und deswegen stürzte es ab
aber Zugriffsverletzungen in diesem fall, würd ichs nicht nennen, da bei der zugriffsverletzung schon was anderes passiert
Darauf lässt sich nur noch
Quote:
Man gibt keine Tipps, wenn man nicht weiß wovon man spricht.