"Overlay" wie Steam Overlay

  • VB.NET
  • .NET (FX) 4.0

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von fsoftware.

    "Overlay" wie Steam Overlay

    Hallo, Ich habe mich gefragt ob es eine Möglichkeit gibt wie Steam ein Overlay zu erstellen.
    Da ich nicht genau weiß wie sie es machen frage ich hier ob vielleicht jemand eine Idee hat.

    Müssen die Spieleentwickler das Overlay mit einem Code irgendwie einbinden oder greift Steam auf den Spieleprozess zu und overlayed ein Programm bzw. ein "GDI" gemaltes Overlay?

    Vorzüglich wäre VB.Net ansonsten C#.

    Mfg
    Kenne mich mit steam überhaupt nicht aus. Kenne jedoch terraria und weiß auch was die steam_api.dll in diesem Fall macht. Und solange du das überprüfen ob der Benutzer in steam angemeldet ist nicht als Overlay bezeichnest, hat das rein gar nichts mit einem Overlay zu tun. Dort wird lediglich überprüft: Läuft Steam und ist man angemeldet? Wenn nein, dann wird Terraria einfach nicht gestartet. Das sind exakt zwei Funktionen. Einmal zum Starten (oben beschrieben) und einmal beim Beenden.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    @thefiloe
    beim steamoverlay hast du das komplette steamfenster ingame. couter strike,(battlefild,)call of duty,sims,simcity können das alle. das fenster wird dabei irgentwie über das game gelegt. wie das genau funktioniert würde ich auch mal gerne wissen.
    das komische an dem steamoverlay ist auch das spiele die es bei steam garnich gibt (oder sehr alte) auch dieses steamoverlay benutzen können.

    hier ein steamoverlay von couterstrike (glaube ich)
    chip.de/ii/8/0/3/8/8/7/6/169bbdfe4e598aed.png
    hier ein anderes game mit steamoverlay wo der webbrowser an ist
    img22.imageshack.us/img22/7402/steamoverlay.jpg
    static.giantbomb.com/uploads/o…e_screenshots_overlay.jpg

    du kannst also ingame mit deinen leuten schreiben, die nachrichten werden sogar ingame angezeigt und du kannst dein ganzes steam direkt ingame verwalten wenn es dich nervt. für gamer richtig genial und benutze ich auch tagtäglich

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MVN050“ ()

    Nun es geht darum. Nehmen wir irgendein beliebiges Spiel wie Arma 2 oder Sims 3.
    Jetzt interessiert mich ob ich ohne den Entwickler zu fragen ein "eigenes" Overlay erstellen kann? D.H könnte man eine .dll schreiben welche auf den Prozess zugreift und auf einem bestimmten Tastendruck dieses "selbstgemachte" Overlay auflegt und wieder entfernt?

    So wie als wäre das Spiel ein Panel und ich lege in diesem Panel z.B einen Button sobald der User z.B F9 drückt.
    In der Spielewelt gibt es keine Panels oder Buttons, das ist alles selbst gezeichnet.

    ​Jetzt interessiert mich ob ich ohne den Entwickler zu fragen


    Fraglich, VAC dürfte dich bannen wenn du dich in DX einhooks. Somit kann man nämlich auch einfach Cheats/Spielhilfen erstellen.
    Alles jetzt rein theoretisch gesprochen: Eine Anwendung kann nicht erkennen, ob eine andere injectet wurde. Das ist das Stichwort das du brauchst: Code Injection.
    Warum kann man das nicht erkennen, oder wenn, nur seeehr schwerlich? Ein Prozess wird dadurch ausgemacht, dass er Speicher reserviert und benutzt. Wenn du ein Programm startest, wird quasi eine Kopie in den Arbeitsspeicher geladen (du kannst beispielsweise ein Programm von einem USB-Stick starten und den Stick rausziehen. Das Programm wird noch weiterlaufen). Besonders Spiele neigen dazu stark schwankende RAM-Auslastungen zu haben. Nächstes Beispiel: Du bist im Hauptmenü und die RAM-Auslastung ist relativ gering, jetzt lädst du aber ein Level und sie steigt.
    Jetzt möchte ich mal den Programmierer sehen, der es schafft, seinen eigenen Prozess dauerhaft zu untersuchen (ohne die Leistung zu trüben) und alle Daten filtert, ob das auch ja seine sind.
    Beweisen lässt sich das auch schnell: Man kann in Steam jedes Spiel basierend auf DirectX das Overlay verpassen. Wurde einer von euch schon gebannt? Oder Teamspeak bietet inzwischen auch ein Overlay an. Und wurde auch nur ein User gebannt, weil er Teamspeak an hatte?

    Wie es genau funktioniert, kann ich nicht sagen. Ich fürchte aber, dass du das mit den .NET nicht schaffst.


    Mfg.
    SAR

    SAR-71 schrieb:

    Alles jetzt rein theoretisch gesprochen: Eine Anwendung kann nicht erkennen, ob eine andere injectet wurde.

    Theoretisch aber falsch gesprochen.

    SAR-71 schrieb:

    Jetzt möchte ich mal den Programmierer sehen, der es schafft, seinen eigenen Prozess dauerhaft zu untersuchen (ohne die Leistung zu trüben) und alle Daten filtert, ob das auch ja seine sind.

    Deine Art und Weise wie du dir das vorstellst ist komplett falsch. Kein Mensch durchsucht seinen RAM. Dies würde schon nicht funktionieren, da du nicht weißt wie der Speicher angelegt wird. Gerade in Hochsprachen wie z.B. C# haste keine Chance zu wissen wo die Runtime Speicher reserviert.
    Jedoch laden sich dlls auch nicht mal einfach durch Magie in deinen Speicher. Und genau dort setzt man an. Natürlich ist das immer ein Katz- und Mausspiel. Jedoch wenn man das geschickt anstellt und verschiedene Strategien miteinander kombiniert, dann bekommt du rein relativ sicheres System. Und gerade bei Overlays welche nicht auf ein spezielles Spiel zugeschnitten sind, ist es nahezu unmöglich die Schutzeinrichtungen von jedem Spiel zu umgehen.
    Es ist fast immer möglich jegliche Sicherheitsvorkehrungen zu umgehen. Jedoch ist das schwierig und bedeutet gleichzeitig, dass man das Ziel genau kennen muss. In diesem Fall musst du wissen wie das Spiel arbeitet und dort ein Schlupfloch finden wie du das austricksen kannst. Doch selbst da erfordert das sehr viel Erfahrung (Spieleentwickler sind auch nicht auf den Kopf gefallen), was der TE zu 100% nicht mitbringt.
    Und selbst wenn du noch ein erfahrener Programmierer mit entsprechenden Erfahrungen bist, dann wirst du nie 100% der Spiele abdecken können.

    Weiterführende Links:
    social.msdn.microsoft.com/Foru…f1/blocking-dll-injection
    reverseengineering.stackexchan…dll-injection-be-detected
    reverseengineering.stackexchan…t-used-for-reversing?lq=1
    stackoverflow.com/questions/12…-reflective-dll-injection


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Laut offiziellen Quellen des Steamforums, wird durch Injection VAC getriggert, womit du deinen Account vergessen kannst. Der einzige Weg ein Overlay zu erzeugen ist das Steam overlay, und dies läuft über die steam_api.dll ab. Diese kann man theoretisch mit C# anzapfen - was auch erlaubt ist.
    @ThuCommix
    ich glaube der TE will ein eigenes overlay bauen und nicht das von steam benutzen.
    und ich glaube auch nicht das er cheats und hacks bauen will sondern vermutlich will er teile von seinem programm in seinem game haben.

    ich zumindest möchte gerne den chatverlauf von meinem chat in games anzeigen. ich habe nur bilder von Steam gepostet weil steam das perfekt hinbekommt. mehr nicht.
    Ich habe mir mal für ein Game eine kleine Hilfe gebastelt: Die suchte sich den laufenden Prozess des Programmes aus, holte sich das MainWindowHandle und zeichnete dann mit GDI drüber - war ziemlich hässlich gelöst :S . Aber es hat geklappt und gebannt wurde ich dort nicht, obwohl es irgendeine Anticheat-Software am laufen hatte. Ich denke, das war so, weil ich nur direkt auf das Fenster gezeichnet habe und sonst nirgend herumgepfuscht habe.
    Wie meinst du du hast das ziemlich hässlich gelöst? Aber es hat so funktioniert?

    Zu anderen, ich möchte keine Cheats/Hacks etc. erstellen sondern einfach nur ein Overlay für ein Spiel erstellen wo ich derzeit einen Mod erstelle. Der Mod greift viel auf's Internet zu und ein Overlay würde den Spieler nutzen nicht jedesmal aus dem Spiel auf das "CP" auszutabben um dort irgendwas zu machen - so hätte er die einfache Möglichkeit einfach mit einem Overlay zu arbeiten.
    Das Game zeichnete sich ständig neu, also liess ich das Zeichnen in einem Neben-Task mit einer Do-Loop-Schleife erledigen(GDI: Graphic-Objekt über den Hauptfensterhandle holen). In einem weiteren Task wurde ebenfalls mit einer Schleife ständig geprüft, ob bestimmte Knöpfe gedrückt wurden(damals kannte ich nur GetAsyncKeyState) und rechnete nach denen Eingaben bestimmte Parameter im Hauptthread, die dann beim Zeichnen miteinflossen.
    Ich sagte ja, dass es hässlich gelöst wurde. <X

    Also mit GDI kommst du glaube ich nicht weit, da das fröhlich vor sich hinflackert. ;)

    Higlav schrieb:

    Also mit GDI kommst du glaube ich nicht weit, da das fröhlich vor sich hinflackert.

    Und im Vollbildmodus gekonnt ignoriert wird.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    aber mich würde es mal intressieren wie so etwas genau funktioniert.
    steam ist ja das beste beispiel das es geht. mann kann sogar in steam "steam fremde spiele" hinzufügen und mit bissle glück haben die auch dieses overlay. (oftmals aber nicht alle)

    ich würde schon gerne mit einem knopfdruck meinen chat in einem game haben ;)
    steam startet jedes game im vollbildmodus. aber sobald das overlay an ist kann man imgame nix mehr machen. also wenn es 2 ebenen gäbe. man muss das overlay wieder beenden um zum game zurückzukehren. allerdings ist das overlay transparent und man sieht das game im hintergrund.