Erscheinen einer Message-Box abfragen???



  • Danke, für den Tipp, das Beispiel hatte ich noch nicht gefunden...
    🙂 🙂



  • Ich hätte letztens gleich das Beispiel des Links von CodeProject probiert. Bin jedoch gescheitert. Ich wolle den Code einfach in den MFC-DLL-Anwendungsassistenten einbinden.

    Was ich letztlendlich erhielt war dieser Fehlercode:

    ker-Vorgang läuft...
    LIBCD.lib(wincrt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _WinMain@16
    Debug/test4.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    

    Ich weis, man könnte sich den Sourcecode downloden wenn man sich registriert.
    Es kann aber ja nicht so schwer sein, dieses Beispiel selbst zu Erstellen. Hätte wer Tipps für mich??



  • ok, du hast also den kompletten code von codeproject kopiert, ohne annähernd zu verstehen wie/was/warum funktioniert?

    schau dir mal an was WinMain() ist.



  • Ok, ich habe ohne viel darüber nachzudenken darauf losgelegt. (Fehler von mir -> Man muss eine Win32 DLL erstelle, oder)
    Nur, was ich immmer noch nicht kapiert habe an diesem tollem Beispiel, ist, wie man dann mit diese DLL anwendet!!!!
    Muss ich mir da noch ein eigenes Programm schreiben, oder wie geht das sonst 😕 😕



  • Versuchs doch erst mal mit Breakpoints im Debugger.
    Du hast absolut keine Ahnung von dem was du machst und so kommst du ohne weitere Kenntnisse nicht auf einen grünen Zweig.



  • Ja,ja, ich versteh, dich schon was du meinst.
    Ich, hab jetzt mit diesem Code

    #include <windows.h>
    
    #define SIZE 6
    
    typedef int (WINAPI *pMessageBoxW)(HWND, LPCWSTR, LPCWSTR, UINT);
    int WINAPI MyMessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT);
    
    void BeginRedirect(LPVOID);
    
    pMessageBoxW pOrigMBAddress = NULL;
    BYTE oldBytes[SIZE] = {0};
    BYTE JMP[SIZE] = {0};
    DWORD oldProtect, myProtect = PAGE_EXECUTE_READWRITE;
    
    INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved)
    {
        switch(Reason)
        {
        case DLL_PROCESS_ATTACH:
            pOrigMBAddress = (pMessageBoxW)
                GetProcAddress(GetModuleHandle("user32.dll"), 
                               "MessageBoxW");
            if(pOrigMBAddress != NULL)
                BeginRedirect(MyMessageBoxW);    
            break;
        case DLL_PROCESS_DETACH:
            memcpy(pOrigMBAddress, oldBytes, SIZE);
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
            break;
        }
        return TRUE;
    }
    
    void BeginRedirect(LPVOID newFunction)
    {
        BYTE tempJMP[SIZE] = {0xE9, 0x90, 0x90, 0x90, 0x90, 0xC3};
        memcpy(JMP, tempJMP, SIZE);
        DWORD JMPSize = ((DWORD)newFunction - (DWORD)pOrigMBAddress - 5);
        VirtualProtect((LPVOID)pOrigMBAddress, SIZE, 
                        PAGE_EXECUTE_READWRITE, &oldProtect);
        memcpy(oldBytes, pOrigMBAddress, SIZE);
        memcpy(&JMP[1], &JMPSize, 4);
        memcpy(pOrigMBAddress, JMP, SIZE);
        VirtualProtect((LPVOID)pOrigMBAddress, SIZE, oldProtect, NULL);
    }
    
    int  WINAPI MyMessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uiType)
    {
        VirtualProtect((LPVOID)pOrigMBAddress, SIZE, myProtect, NULL);
        memcpy(pOrigMBAddress, oldBytes, SIZE);
        int retValue = MessageBoxW(hWnd, lpText, lpCaption, uiType);
        memcpy(pOrigMBAddress, JMP, SIZE);
        VirtualProtect((LPVOID)pOrigMBAddress, SIZE, oldProtect, NULL);
        return retValue;
    }
    

    von http://www.codeproject.com/KB/DLL/funapihook.aspx
    eine DLL erstellt.
    Nur wie kann wie sie anwenden ??? - Brauch ich dazu ein eigenes C++ Programm dazu oder??



  • Hallo Leute!
    Ist diese Aufgabe so schwierig, oder so einfach, dass mir einfach keiner dazu helfen dann. Ich bin mit diesen Dlls noch ein richtiger Anfänger...
    (Muss man sich ein Programm schreiben dass diese Dll dauernd ausführt vielleicht, oder so?)



  • Du musst die dll in den anderen Prozessraum mappen. Google nach Dll injection.



  • Warum sollte man jemandem helfen der den Artikel, aus dem er kopiert, nichtmal halb gelesen hat?
    Sonst hättest du gelesen:

    4. DLL Injection

    I’ve done a lot of talking about DLL injection in this article. The DLLs with the API hooks in them have to be injected into the address space of the process in order for them to work. DLL injection involves somehow loading a DLL that is not normally loaded by the process. There are multitudes of ways to do this. A very common one is to use the SetWindowsHookEx(…) with a dummy hook procedure. Another common one is to use the CreateRemoteThread(…) API. It’s possible to even hardcode a CodeCave stub to load a DLL (I did this in the Solitaire article). The approach that I will be taking and explaining in this article will be the CreateRemoteThread one. It is extremely easy, and relatively efficient. Before starting though, it is important to actually find the process to inject into.



  • Ich war so auf den zweiten Punkt "Getting Started" konzentriert, und am Ende des Punktes von dem Bild mit der hooked Messagegbox geblöfft. (Ich war halt der Meinung sollte schon funktionieren......)


Anmelden zum Antworten