Generelle Frage

Dieses Thema im Forum "Support & Discussion" wurde erstellt von masterholdy, 13. September 2017.

  1. masterholdy

    masterholdy New Member

    Registriert seit:
    4. Juli 2017
    Beiträge:
    7
    Zustimmungen:
    3
    Punkte für Erfolge:
    3
    Hi Leute,

    ich hätte mal eine generelle Frage. Wie man Werte ausliest um z.B. einen Bot zu erstellen in Online Spielen ist mir bewusst, jedoch ist mir nicht bewusst wie man Sachen wie z.B. schießen / bewegen Automatisiert. Ich habe noch nichts geplannt zu programmieren, jedoch hat mich die ganze Materie schon längerer interessiert.

    MFG
     
  2. Mastodon

    Mastodon New Member

    Registriert seit:
    1. Juli 2017
    Beiträge:
    12
    Zustimmungen:
    16
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Es gibt mehrere Wege.
    Bei WoW 1.12.1 konnte man einfach die Koordinaten ändern und der Bot lief hin.

    Bei anderen Spielen kann man einfach eine weitere Verbindung zum Server aufbauen und die Pakete senden.

    Aber das ist warscheinlich nicht das, was du gesucht hast! ;)

    Das was du willst ist zum Beispiel eine Code Injection.

    Kurze Antwort:
    Du schreibst ein Programm, welches im Zielprozess (zum Beispiel ein Spiel) Code in den Speicher schreibt und diesen ausführt.
    Zum Beispiel eine Funktion zum Bewegen deines Charakters.

    Lange Antwort:
    Ich habe hier ein stark vereinfachtes Beispiel für ein Spiel ohne Pointer:
    Code (Text):

    //victim.c
    #include <stdio.h>
    #include <string.h>
    #include <windows.h>

    int shoot(int x, int y)
    {
       printf("You shot at %d:%d\n",x,y);
        if(x==51 && y==49)
            return 1;
        return 0;
    }

    int main()
    {
        SetConsoleTitle("Hunting Simulator!");
        printf("Hunting Simulator!\n");
        while(1)
        {
            getchar();
            if(shoot(10,10))
               printf("You hit!\n");
            else
               printf("You didn't hit!\n");
        };
        return 0;
    }
     
    Wenn du eine Taste drückst, kommt die Nachricht, dass du auf die Koordinaten 10:10 geschossen hast.

    Wenn ich das Programm disassembliere bekomme ich diesen Code:

    [​IMG]
    Der blaue Teil ist die Funktion int shoot(int x, int y).

    Der gelbe Teil der größte von der main Funktion.

    Der türkise Teil ist der Aufruf von shoot(int x, int y).


    Wir müssen also ein Programm schreiben, welches den "shoot"-Befehl im Spiel aufruft.
    Dieser Code ist in der Variable lpBuffer gespeichert.
    Code (Text):

    //inject.c
    #include <Windows.h>

    int main() {          
        //Funktionsaufruf von shoot(int x, int y).
        //Adressen sollten beim Einsatz von diesen Code mittels lpMemory berechnet werden.
        BYTE lpBuffer[] = {
                        0xC7, 0x44, 0x24, 0x04, 0x31, 0x00,0x00,0x00, //MOV DWORD PTR SS:[ESP+4],31
                        0xC7, 0x04, 0x24, 0x33, 0x00, 0x00,0x00, //MOV DWORD PTR SS:[ESP],33
                        0xE8, 0x4C, 0x14, 0x3E, 0x00, //CALL 00401460
                        0xE9, 0xCB, 0x14, 0x3E, 0x00 //JMP 004014E4
                        };

        DWORD lpdwProcessId, lpNumberOfBytesWritten;
        HWND hWnd = FindWindowA(NULL, "Hunting Simulator!");
        if (hWnd) {
            GetWindowThreadProcessId(hWnd, &lpdwProcessId);
            HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, lpdwProcessId);
            if (hProcess) {
                LPVOID lpMemory = VirtualAllocEx(hProcess, NULL, 25, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
                WriteProcessMemory(hProcess, lpMemory, lpBuffer, 25, &lpNumberOfBytesWritten);
                HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)lpMemory, NULL, NULL, NULL);
                WaitForSingleObject(hThread, INFINITE);
                VirtualFreeEx(hProcess, lpMemory, 0, MEM_RELEASE);
                CloseHandle(hThread);
                CloseHandle(hProcess);
            }
        }
        return 0;
    }
     
    Zuerst starten wir das "Spiel" und dann mit Administratorrechten den "Bot":
    [​IMG]

    Nun haben wir eine Funktion in einen Spiel aufgerufen.
    In einen echten Spiel kann man das zum Beispiel zum Angreifen oder zum Bewegen des Charakters verwenden.

    Ein wenig Material zum Thema:
    https://web.archive.org/web/2016110...n/index.php/Entry/199-Remote-Function-Calling
    http://resources.infosecinstitute.com/using-createremotethread-for-dll-injection-on-windows/
     

Diese Seite empfehlen

Die Seite wird geladen...