CreateRemoteThread failed unter Vista



  • 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.


  • Mod

    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


Anmelden zum Antworten