Adresse neu mappen?



  • Hat die Windows api eine Möglichkeit, eine Adresse neu zu mappen, so dass beliebiger Code an der Stelle ausgwführt wird?

    Interessant ist es für mich zum einen Null Pointer Zugriffe aufzubphren, dass ich diese vor dem Crash protokollieren kann und zum anderen würd ich gerne bestimmte Funktionen im Code, auf die ich sonst nicht zugreifen kann adressenweise zu überladen.
    Ich will damit erreichen, das wenn ich eine bestimmte Funktion einer externen DLL aufrufe, ich anstatt diese Funktion eine Wrapperfunktion aufrufe, die mir den Aufruf protokolliert und dann die eigentliche Methode aufruft. Ich habe kein Zugang zu der DLL und habe Probleme deren Funktionalität nachzuvollziehen.
    Mein Problem ist nur, dass ich den Befehl nicht finden kann, mit dem man das remapping durchführen kann. Bei google findet man entweder immer etwas über std::map oder wenn man das filtert nur noch müll



  • das neu mappen einer addresse geht so nicht (abgesehen von paging), aber das
    ist auch garnicht nötig.

    um einen nullpointerzugriff zu erkennen, kannst du entweder den debugger nutzen,
    oder die stelle mit einem try/catch block umgeben.

    das "umleiten" einer funktion ist auch ganz einfach, stichwort "inline hooking",
    dabei werden die ersten 5 codebytes der funktion (achtung, du darfst dabei keinen
    befehl auseinanderreißen, notfalls disassember-library nutzen) in einem "trampolin"
    gespeichert, sowie ein jump zurück zur funktion. die ersten 5 bytes der originalfunktion
    werden wiederrum mit einem sprung zu deiner umleitfunktion überschrieben.

    ist etwas aufwändig und erfordert etwas asm-wissen.

    es gibt auch noch die microsoft detours library, die genau das für dich macht,
    ist vllt einfacher am anfang.

    MfG cookiebox 😉


Anmelden zum Antworten