[Detour] BitBlt



  • Tag Jungs und Mädels,

    Da ich mich nun seit geraumer Zeit mit Detours beschäftige wollte ich mich mal an die Funktion BitBlt setzen.
    Der Erste Detour war ein Versuch mit Sleep, was auch alles super geklappt hat.
    Nun habe ich alles genau so übernommen, doch er will einfach nicht injecten(egal welcher prozess).

    typedef BOOL (WINAPI* BitBlt_t)(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop);
    BitBlt_t pBitBlt = NULL;
    DWORD dwBitBlt;
    
    BOOL WINAPI BitBlt_hook(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop)
    {
        MessageBox(0, L"LOLz!11 SCREENSHOT", 0, 0);
    
        return pBitBlt(hdcDest,nXDest,nYDest,nWidth,nHeight,hdcSrc,nXSrc,nYSrc,dwRop);
    }
    
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
    					  )
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    	dwBitBlt = (DWORD)GetProcAddress(GetModuleHandle((LPCWSTR)"gdi32.dll"), "BitBlt");
    	pBitBlt = (BitBlt_t)DetourFunction((PBYTE)dwBitBlt, (PBYTE)BitBlt_hook);
    	break;
    
    	case DLL_PROCESS_DETACH:
    	DetourRemove((PBYTE)dwBitBlt, (PBYTE)BitBlt_hook);
    	break;
    	}
    	return TRUE;
    }
    
    //
    

    PS: Injecte mit "Winject" (er vesucht es mit 2 Metoden [RemoteLoadLibary u. DetourInjecting])



  • hallo!

    woran merkst du,dass er "nicht injecten will"?

    an deiner stelle würde ich mir einen prozess suchen,der sicher bitblt benutzt,deine dll injecten(eventl vorher debug privilegien setzen) und dann ollydbg an den prozess attachen -> alt + e -> module liste anschauen ,ob dein modul dort auftaucht(vorrausgesetzt du unlinkst dein modul nicht(peb hiding) oder benutzt manuelles mapping)

    falls es auftaucht ist es auch geladen,nächster schritt ist dann zu checken ob dein hook gesetzt ist:

    strg + g -> BitBlt -> schaun welche opcodes an der adresse sind,ein gewöhnlicher jmp detour schreibt einen E9 opcode...

    falls dein modul erst gar nicht geladen ist würde ich selbst einen loader schreiben und mit minimalcode testen (zb. einfach MsgBox in DLLMAIN),ist ja keine große sache 🙂



  • Dieser Thread wurde von Moderator/in Phoemuex aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten