Mein Problem ist , dass das Programm sofort abstürzt wenn ich die Endscene hooke.
Bezogen von diesem TuT :
Es muss aber aufjedenfall an meiner eigenen Endscene liegen , denn wenn ich die gefundene Endscene auf sich selbst leite , entsteht eine endlosschleife
Meine eigene Endscene wird nur einmal aufgerufen und dann stürzt das Programm ab (Getestet mit 5 verschiedenen DirectX Testprogrammen)
gerade bei mir im ms dx9 sampleprogramm MultiAnimation ausprobiert, funktioniert einwandfrei.
vllt solltest du aber nicht Beep in endscene benutzen, die funktion hängt nämlich, vllt hat das spiel probleme damit.
Habs auf "PAGE_EXECUTE_READWRITE" gesetzt aber trotzdem gleicher Fehler
Ich versuchs auch im MS Sampleprogramm aber das stürzt sofort ab
Das Beep war nur zum testen drinne ob der überhaupt in die gehookte Funktion geht
Evtl liegts daran , dass ich Win8 x64 nutze
hmm gute frage.
hab leider kein windoof 8 zum testen, kompilierst du als 32 bit und im release modus?
injector als admin gestartet, die release dll ausgewählt und zielprozess auch 32 bit programm?
DLL : Find ich grad keine Option zum einstellen der ZielCPU
Realese Mode : Nein
Admin : *** alles als Admin
Ziel : 32Bit DirectX Sample (im 64Bit Sample wird nichts ausgelöst mit der DLL auch kein Absturz bzw. veränderung wenn ich ein Rechteck zeichnen lasse)
Edit:
Aber unterschied machts nich zwischen Debug/Release Mode stürzen beide ab ^^
DLL : Find ich grad keine Option zum einstellen der ZielCPU
Realese Mode : Nein
Admin : *** alles als Admin
Ziel : 32Bit DirectX Sample (im 64Bit Sample wird nichts ausgelöst mit der DLL auch kein Absturz bzw. veränderung wenn ich ein Rechteck zeichnen lasse)
Edit:
Aber unterschied machts nich zwischen Debug/Release Mode stürzen beide ab ^^
dann mal debugger nehmen und gucken wo/was schiefgeht :P
Ist doch richtig wenn ich Olly an die exe hänge und dann injecte oder ?
Edit: Fehler laut Olly nach Häufigkeit (immer gleiche Bedingungen)
1. "Access violation when writing to [Address]"
2. "Access violation when reading [Address]"
3. Iwas mit Priveligiert (erst einmal aufgetreten)
lad mal deine kompilierte dll hoch.
kannst auch mal konsole attachen und mit cout/printf mal adressen ausgeben lassen von endscene etc., auf nen tastendruck warten und erst danach hooken.
in der zwischenzeit kannst du olly/cheatengine attachen, auf endscene nen breakpoint machen und gucken ob dein hook korrekt installiert wird, also ersten 5 bytes mit nem e9 <adresse> überschrieben werden, ob evtl. schon vorher ein hook/relative adresse an der adresse stand, ob der jump zu deiner funktion führt, ob deine funktion korrekt das trampolin callt, ob im trampolin die 5 bytes aus der origfunktion sind, ob die 5 bytes ein sinnvoller befehl ohne relative adresse ist, etc.
Als erstes würde ich vorschlagen mit etwas leichterem anzufangen. Du hast da einen wahnsinnig schlechten Aufbau und Stil auch wenns nur die paar Zeilen sind.
Danach auf jeden Fall von der Detours Funktion verabschieden und am besten eine eigene machen (ansonsten tuts auch MS Detours 3.0 - threadsicher).
Falls du eine eigene Detours Funktion machen möchtest brauchst du erst mal einen Längendisassembler damit du dein Trampolin zum Rücksprung richtig aufsetzen kannst. Für das Trampolin empfiehlt sich HeapAlloc auf einem Heap der mit HEAP_CREATE_ENABLE_EXECUTE erstellt wurde.
Um das ganze noch Threadsicher zu machen kannst du dann noch alle Threads suspendieren und mal schauen ob gerade einer über der Instruktion verweilt, auf die du deinen Detour setzen willst. Mache das momentan so:
Code:
const auto &lstThreads = threadGrabber.threads();
std::list<std::shared_ptr<Thread>> lstCriticalThreads;
_detourSuspendThreads(lstThreads);
do {
lstCriticalThreads = _threadExecutingInstruction(lstThreads, dwAddress, uSize);
for (const auto& thread: lstCriticalThreads) {
if (thread->open(thread->access() | THREAD_SUSPEND_RESUME)) {
thread->resume();
Sleep(rand() % 10); // give him some time to move along... :D
thread->suspend();
}
}
}
while (!lstCriticalThreads.empty());
ByteBuffer jump(uSize, 0xCC);
jump << byte(0xE9);
jump << reinterpret_cast<DWORD_PTR>(pRedirect) - (dwAddress + 5);
WriteMemory_Safe(dwAddress, jump);
_detourResumeThreads(lstThreads);
Um rauszufinden, wo ein Thread gerade ist kannst du EIP (Extended Instruction Pointer) auslesen.
Selling - VMT Hook + Includded HS ByPass + for DIP - EndScene - Etc Etc 05/07/2012 - WarRock Hacks, Bots, Cheats & Exploits - 10 Replies VMT Hooks + HS BYPASS
Working To Any OS Windows XP,Vista/Windows7 32/64 BIT
Selling Full Way Undetected with VMT Hook , for hooking EndScene/Present/DIP/SetTransformer
On VMT Hook is Includded HS BYPASS For hackshield , with that they wont detect VMT Hooks + Also is includded another addy for didnt detect STRING of your dll or detecting your dll after some day !! also you can use packer to protect your dll because with this address they wont detect packer/string/dll/
or if they do...
D3D EndScene Hook Tutorial Frage 10/03/2011 - General Coding - 5 Replies Hey, ich habe mir das Tutorial von purple.d1amond angeschaut, und habe als Test ( da ich noch nie ne D3D Funktion gehooked habe ) mal den Source aus dem Tut abgetippt und wollte ihn testen. Ich habe die .dll anschließend mit Winject in den Prozess von wow injected. Doch es passiert nichts, da wo eigentlich ein Rechteck sein sollte ( oben Rechts ) ist nichts :D )
Habe ich was falsch gemacht ? :
#include "stdafx.h"
#include <windows.h>
#include <cstdio>
#include <d3d9.h>
#include...
[C++]EndScene hook 01/04/2011 - C/C++ - 7 Replies Hallo Community,
ich habe ein Problem mit dem Thema 'EndScene' hooking.
Ich habe eine DLL geschrieben (Source unten).
Wenn ich diese in z.b. Css injecte um zu gucken ob bis jetzt alles richtig ist,
sprich ob das game crasht oder nicht.
Jedoch sagt Winject beim injecten der DLL "Both injection methods failed, target is protectet?".
Wenn ich jedoch eine DLL injecte, die einfach nur ne MSGBOX ausgibt, klappt es wunderbar.
Nun ist meine Frage, liegt der Fehler im Source meiner DLL oder ist...
D3D Hook Frage (Endscene) 10/18/2010 - General Coding - 9 Replies Hallo,
Hab mir mal ein Tutorial zu dem Thema angeschaut. Scheint alles relativ einfach zu sein.
Allerdings finde ich in meiner D3D9.dll kein Endscene usw.
Ich bin scheinbar nicht der einzige mit dem Problem? :confused: Zumindest wenn ich mir das Forum anschau woher das Tutorial kommt. Aber dort kennt scheinbar auch niemand eine Lösung.
Woran liegt das?
Oder hat mir jemand ein paar neuere Tutorials zu dem Thema? (Gerne auch englisch).
Grüße.