Variablen-Wert mit CreateRemoteThread und Zeiger verändern



  • System_Shutdown schrieb:

    kann mir jemand diese Ausgabe erklären?

    Du hast nicht beachtet, daß ein Remotethread im "Kontext" von "hProc" ausgeführt wird.
    Ist es eine gute Idee, den Remotethread bei "(LPTHREAD_START_ROUTINE)ThreadFunc" auszuführen? 🙂

    Zur Ausgabe:

    Der Remotethread ist in die "main()" vom ersten Programm reingebrezelt, hat die Adresse von "i" (lokal -> stack!) ausgegeben und rödelt nun fröhlich zusammen mit dem Mainthread in der while-Schleife herum (darum die i.e. doppelt so schnelle Ausgabe).



  • ahh okay.. stimmt daran habe ich garnicht gedacht, dass der gesamte Remote Thread genau an diese Speicheraddresse geschrieben wird.

    sehr anschaulich beschrieben 😉 👍

    hm okay das bedeutet also das ich mir speicher im fremden Prozess reservieren muss?

    VirtualAllocEx(...) ??? 😕



  • omg

    da muss ich ja gleich ne ganze DLL-Injection machen um den effekt zu erzielen -.-



  • Richtig. 7 Zeilen Code.



  • 7 Zeilen?? oO



  • dann nochmal eine frage zu diesem Code vom HaBo-Wiki über DLL-Injection:

    #include <windows.h>
    #include <cstdio>
    
    typedef HINSTANCE (*fpLoadLibrary)(char*);
    typedef LPVOID (*fpGetProcAddress)(HINSTANCE, char*);
    typedef void (*fpFunktion)(void);
    
    struct INJECTSTRUCT
    {
           fpLoadLibrary LoadLibrary;
           fpGetProcAddress GetProcAddress;
           char path[255];
           char func[255];
    };
    
    DWORD WINAPI threadstart(LPVOID addr)
    {
    	HINSTANCE hDll;
    	fpFunktion funktion;
    	INJECTSTRUCT * is = (INJECTSTRUCT*)addr;       
    	hDll = is->LoadLibrary(is->path);
    	funktion = (fpFunktion)is->GetProcAddress(hDll, is->func);
    	funktion();
    	return 0;
    }
    void threadend()
    {
    }
    
    int main()
    {
        HANDLE hProc;
        LPVOID start, thread;
        DWORD funcsize, written;
        HINSTANCE hDll;
        INJECTSTRUCT is;
        DWORD id;
    
        hDll = LoadLibrary("KERNEL32");
        is.LoadLibrary = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA");
        is.GetProcAddress = (fpGetProcAddress)GetProcAddress(hDll, "GetProcAddress");
        strcpy(is.path, "C:\\DLL.dll");
        strcpy(is.func, "Funktion");
    
    	funcsize = (DWORD)threadend-(DWORD)threadstart;
    
    	printf("ID: ");
    	scanf("%d", &id);
    
        hProc = OpenProcess(PROCESS_ALL_ACCESS, false, id);
        printf("Prozess Handle:       %x\n", hProc);
    
    	start = VirtualAllocEx(hProc, 0, funcsize+sizeof(INJECTSTRUCT), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    	printf("Memory:               %x\n", start);
    
    	WriteProcessMemory(hProc, start, (LPVOID)&is, sizeof(INJECTSTRUCT), NULL);
    
    	thread = (LPVOID)((DWORD)start+sizeof(INJECTSTRUCT));
    
    	WriteProcessMemory(hProc, thread, (LPVOID)threadstart, funcsize, NULL);
    
    	CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)thread, start, 0, 0);
        CloseHandle(hProc);
     	return 0;
    }
    

    Warum stürzen alle Programme ab, in die man versucht zu injecten? (DLL ist in C:\ und auch 100% korrekt)

    bin mitlerweile echt ratlos -.-



  • Zeig doch mal den Dll Code her.
    Ansonsten Rückgabewerte checken, GetLastError aufrufen und Debugger benutzen.



  • Der DLL-Code:

    #include <windows.h>
    
    extern "C" void __declspec(dllexport) Funktion()
    {
        Beep(1000, 1000);
    }
    
    BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
    {
       return TRUE;
    }
    

    Hm kann ich versuchen, aber ich vermute mal der Fehler hat nichts mit den Funtkionen an sich zu tun sondern ist eher wieder i.ein speicher-problem.



  • Vergiss die Frickelkacke 🙂
    Also, ich geb dir nen Tipp:

    1. Funktion: VirtualAllocEx
    2. Funktion: WriteProcessMemory
    3. Funktion: GetProcAddress
    4. Funktion: CreateRemoteThread
    5. Funktion: WaitForSingleObject
    6. Funktion: CloseHandle
    7. Funktion: VirtualFreeEx

    Processhandle vorausgesetzt.



  • kay kay werds versuchen ^^

    soll ich den injector-code dann mal posten? (wenn ich's fertig hab)


Anmelden zum Antworten