Hooks - Harware Breakpoints

  • Noch eine andere Detour-Methode: Hardware-Breakpoints
    EInige werden die von Olly und anderen Debuggern schon kennen und werden wissen, dass es nur 4 pro Thread geben kann und man sie auch für jeden Thread setzen muss, in den man hooken möchte. Meistens reicht der Main-Thread.
    Der große Vorteil ist, dass nichts an der .text Section geändert wird. Trotzdem ist ein weiterer Hook von GetThreadContext sinnvoll, um Erkennungen zu vermeiden.



    Den g_dwHook Mist solltet ihr natürlich ersetzen und die Adresse bei OpenThread findet ihr, wenn ihr nach der ThreadID in CheatEngine + Olly sucht.
    Die anderen 3 Breakpoints kann man durch setzen der Bits 2, 4, 6 (von 0 angefangen) und der Register Dr0 - Dr3 aktivieren.


    Das nächste Stück Code ist der Exception-Handler, der die originale Funktion aufruft:



    Wie man sehen kann, werden die argumente vom Stack geholt. Aufpassen, welche Calling-Convention ihr habt! Das EIP-Register wird dann auf die Rücksprung-Adresse gesetzt.


    Die Hooked-Function:

    Code
    1. int WINAPI my_MessageBoxA( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType )
    2. {
    3. lpText = "My Text";
    4. return ( ( int ( WINAPI * )( HWND, LPCSTR, LPCSTR, UINT ) )g_dwHookOrig )( hWnd, lpText, lpCaption, uType );
    5. }


    Viel Spaß, wenn ihr es benutzt, oder ich euch damit helfen konnte. :)


    Credits: Ich weiß es nicht mehr. Der Code stammt zu 100% von mir, aber die Idee nicht. Wer die Idee zuerst hatte, ist eine gleiche Frage, wie die Frage nach dem Menschen, der das Feuer erfunden hat.


    MfG


    PS: Entschuldigt das wirre Zeug (Code + Erklärung). Ich befinde mich zur Zeit in einem Zustand geistiger Diffusion könnte man fast sagen. Und je mehr ich schreibe und mich auf eine Stelle konzentriere, desto schlimmer wird es.