Programme/Spiele modden/hacken wie?



  • Hallo und guten Morgen.. oder besser noch Nacht.

    Und zwar beschäftige ich mich hobbymäßig mit der Programmierung in C++, habe noch keine riesen Projekte auf die Beine gestellt, aber an sich versteh ich das Programmieren schon (soweit man das so sagen darf).
    Jedenfalls zu meinem Anliegen:
    Ich wunder und frage mich schon seit eh und je, wie das denn funktioniert, dass man mit einem eigenen Programm in z.B. ein Spiel eingreifen kann und dort beispielsweise ein Overlay einblenden lassen kann, welches z.B. bei einem Strategie-Spiel anzeigt, wie schnell man momentan wieviele Einheiten pro Minute bauen kann etc. Also wie funktioniert das, welches Wissen brauch man dafür, um in das Programm/Spiel eingreifen zu können, herauszufinden wo sich die verschiedenen Variablen etc. befinden und überhaupt, wie man soetwas realisiert.

    Andere Beispiele zum Verständnis sind vielleicht solch Sachen wie das "teamspeakoverlay", welches (selbst nicht getestet) die User im Teamspeak in einem Overlay im Spiel anzeigt. Wie setzt man sowas denn um? Wie schafft man es, diese Informationen aus Teamspeak auszulesen?
    Oder keine Ahnung, wie kann man in das Windows-Minesweeper eingreifen und vorweg auslesen, wo sich Minen befinden und das Programm letztendlich automatisch lösen (lassen)?

    Gibt es Lektüre/Tutorials, die sich damit beschäftigt? Ich weiß auch nicht wonach ich da genau zu suchen habe. Also hoffe ich, dass mir hier die ein oder andere kompetente Person weiterhelfen kann.

    MfG. 🙂



  • Zu Windows 95 Zeiten gab es dafür Programme die den Speicher des Spieles überwachten und nach bestimmten Suchmustern, z.b. der aktuelle Punktestand, suchten.
    Als erstes Ergebnis bekam man viele verschiedene Werte.
    Hat man nun aber den Punktestand geändert und noch einmal nachgeguckt, dann waren es schon deutlich weniger Speicheradressen.
    Das hat man solange gemacht, bis man die entsprechende Speicherstelle mit dem Punktestand gefunden hat und dann konnte man da beliebige Werte reinschreiben.

    Da seit Windows NT der Kernel aber den Zugriff auf das RAM sauber von anderen Anwendungen trennt, weiß ich nicht, ob du heute noch so leicht Zugriff auf diese Speicherstellen hast.

    Aber damit fängt man an.

    Overlaysachen sind ein ganz anderes Kaliber, dazu braucht man viel Erfahrung und viele Kenntnisse.



  • das geht unter xp genauso.
    Man muss dem OS nur mitteilen, dass der Prozess, der das machen soll ein debugger ist.
    (Dazu muss man natürlich die nötigen rechte besitzen)

    char * GetErrString(char *str, DWORD errcode)
    {
    	LPVOID lpbuf;
    
    	if(FormatMessage( 
    		FORMAT_MESSAGE_ALLOCATE_BUFFER |
    		FORMAT_MESSAGE_FROM_SYSTEM | 
    		FORMAT_MESSAGE_IGNORE_INSERTS,
    		NULL,
    		errcode,
    		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    		(LPTSTR) &lpbuf,
    		0,
    		NULL
    		))
    	{
    		lstrcpy(str, (char *)lpbuf);
    		LocalFree(lpbuf);
    	}
    
    	return str;
    }
    
    void Error(const char* title)
    {
      char buf[10000];
      GetErrString(buf, GetLastError());
      MessageBox(0, buf, title, MB_ICONERROR);
      return;
    }
    
    bool getDebuggerPrivileges()
    {
        HANDLE token;
      if(! OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token))
      {
        Error("OpenProcessToken");
        return false;
      }
    
      LUID debugPriv;
      if(! LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &debugPriv))
      {
        Error("LookupPrivilegeValue");
        return false;
      }
      TOKEN_PRIVILEGES tp;
      TOKEN_PRIVILEGES oldtp;
      ZeroMemory (&tp, sizeof (tp));
      tp.PrivilegeCount = 1;
      tp.Privileges[0].Luid = debugPriv;
      tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
      DWORD sizeOldtp = sizeof(oldtp);
      /* Adjust Token privileges */
      if (!AdjustTokenPrivileges (token, FALSE, &tp, sizeof (tp), 
                                    &oldtp, &sizeOldtp))
      {
         Error("AdjustTokenPrivileges with new privileges");
         CloseHandle (token);
         return false;
      }
      CloseHandle(token);
      return true;
    }
    


  • Zum Thema Overlay würde ich mal das Stichwort DirectX Hook nennen.
    Für den Rest, such mal nach: OpenProcess, WriteProcessMemory, ReadProcessMemory.



  • vlad_tepesch schrieb:

    das geht unter xp genauso.
    Man muss dem OS nur mitteilen, dass der Prozess, der das machen soll ein debugger ist.

    Und was ist mit den Spielen, die sich nicht debuggen lassen weil sie einen Kopierschutz mit Debuggerkontrolle haben?

    Bei denen kann man dann keinen Punktestand ändern.


Anmelden zum Antworten