CreateRemoteThread failed unter Vista
-
Sephy schrieb:
ich denke mal ein EndScene hook, (mein Arbeitgeber erklärt mir das noch!)
aber darum geht es hier nicht. Es ist nahezu unmöglich, dass ich den Fehler finde, wenn ich nicht mal Windows Vista besitze. Eventuell würde sich jemand mit Vista bereit erklären den Code durch den Compiler laufen zu lassen und schaun wo es crashed. Eventuell gegen ein kleines Entgelt.Lade Dir den Windows 7 RC herunter und installiere ihn in einer VM (VMWare, Virtual PC, ....). Alternativ geht auch der Windows Server 2008, der besitzt den gleichen Kernel wie Vista. Dann kannst Du Dir das in Ruhe anschauen.
Download Windows 7 RC: http://www.microsoft.com/germany/windows/windows-7/download.aspx
Download Server 2008: http://www.microsoft.com/windowsserver2008/en/us/trial-software.aspx
-
danke man, wusste gar nicht dass Windows Server 2008 den Vista kernel hat. Lade mir die x86 standard version.
-
warum steht bei deinem Link Download the Windows Server 2008 Enterprise (x64) evaluation direction and try it free for 60 days (extendable to 240 days).
ich habe 32bit
-
Martin Richter schrieb:
Wo speichert bitte ein "normales Programm" "FPS" (Frames per Second)?
Was willst Du da auslesen?zb EndScene bei DirectX hooken ?
-
hab ich doch oben schon geschrieben
-
Sephy schrieb:
hab ich doch oben schon geschrieben
Nicht gelesen, sorry, zu schnell auf Antworten gedrückt

Thema DLL-Injection kann ich dir was empfehlen, schaus dir mal:
http://69.10.233.10/KB/threads/completeinject.aspx
Schon ein schönerer Code, bis auf das Manko dass er bei Fehler ExitProcess() aufruft, kann man aber leicht besser lösen.
-
Sephy schrieb:
Es ist nahezu unmöglich, dass ich den Fehler finde, wenn ich nicht mal Windows Vista besitze. Eventuell würde sich jemand mit Vista bereit erklären den Code durch den Compiler laufen zu lassen und schaun wo es crashed. Eventuell gegen ein kleines Entgelt.
Dazu braucht man keinen Debugger. ASLR ist kein Bug, sondern ein Feature.
INJECTSTRUCT is; (...) is.GetProcAddress = (fpGetProcAddress) GetProcAddress(hDll, "GetProcAddress"); (...)Die geposteten Codebeispiele gehen davon aus, daß die Adresse von z.B. GetProcAddress in jedem Prozess gleich ist.
Das ist aber unter Vista nicht mehr der Fall.

Lösung : Finde einen Weg die Adresse im Zielprozess zu ermitteln.
P.S.:
Das kleine Entgelt soll an den Forenbetreiber gehen.
-
Aber gerade durch "GetProcAddress(hDll, "GetProcAddress");" bekommt man doch die Adresse von GetProcAddress?!
Aber wozu braucht man das eigentlich?Verwende CreateRemoteThread(), um einen Thread im Zielprozess zu starten, welcher LoadLibrary() aufruft, um deine .dll zu laden (Die läuft dann im Hauptthread, oder? Also DllMain()...).
Dann hat man auch keine Probleme mit ASLR, oder?Achja, und noch eine Frage:
Wikipedia schrieb:
Microsoft's Windows Vista and Windows Server 2008 have ASLR enabled by default, although only for executables and dynamic link libraries which are specifically linked to be ASLR-enabled.
Heißt das, damit ASLR eintritt, muss die .exe/.dll speziell gelinkt werden?
-
+gjm+ schrieb:
Die geposteten Codebeispiele gehen davon aus, daß die Adresse von z.B. GetProcAddress in jedem Prozess gleich ist.
Das ist aber unter Vista nicht mehr der Fall.

Bei Prozessen(Exe\Dll) die ASLR nutzen wird der Stack, Heap und Systemstrukturen (z.B. PEB) bei jeder Programmausführung „randomized“ . Die Basisadressen der Module ändern sich nur durch einen Systemneustart, nicht von Prozess zu Prozess. Soll heißen, dass die Basisadresse von z.B. kernel32 bei jedem Systemstart wo anders liegt, aber in allen Prozessen an der gleichen Adresse.
-
MomentMal schrieb:
Heißt das, damit ASLR eintritt, muss die .exe/.dll speziell gelinkt werden?
Dafür gibt es seit VS-2005 SP1 einen neuen Linker mit der Option /dynamicbase
http://blogs.msdn.com/michael_howard/archive/2006/12/16/aslr-and-the-new-linker.aspx
-
@Martin
Also ältere Programme, die zB. noch unter XP kompiliert wurden, haben keine ASLR?Was passiert bei ASLR nun eigentlich alles? Ich hab es immer noch nicht ganz kapiert.
Also die Basisadressen der geladenen Module eines Prozesses wechseln pro reboot? Sonst noch irgendwas?MfG