***Injection***

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
joggel

***Injection***

Beitrag von joggel »

Hallo Kinder der Sonne,

könnt ihr mir ein paar Schlagwörter zu werfen über die ich suchen kann?

Es geht um Daten-Einschleusen in ein bestehendes Programm.
Man kann über eine ini-Datei einen Text eingeben, der dann angezeigt wird.
Aber leider nicht dynamisch, sondern nur einmal pro Sitzung.
Nun dachte ich mir, wenn man den Text dynamisch ändern möchte, müsste das ja rein theoretisch auch gehen.

Mir fehlen hier aber die Suchwörter oder allgemein Information wie so etwas funktioniert.

Habt ihr da paar Schlagwörter oder so?

Gruß
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: ***Injection***

Beitrag von xq »

FileSystemWatcher unter .NET , um die INI-Datei zu überwachen und bei Änderungen neu zu laden. Ansonsten ein Reload-Button wäre natürlich auch eine gegebene Option.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
joggel

Re: ***Injection***

Beitrag von joggel »

Huhu,

okay...ich glaube ich habe mich etwas unverständlich ausgedrückt.

Ich will versuchen in einem bestehenden laufenden Programm, bei dem mir nur die EXE vorliegt, einen String zu injizieren, der dann angezeigt wird.
Normaler Weise benutzt dieses Programm dazu eine Config.ini, in der man den anzuzeigenden Text einträgt.
Nachteil:
Man muß das Programm immer wieder neustarten damit die änderung aktiv wird.

Nun dachte ich mir folgendes:
Wenn es da eine Funktion in diesem Programm gibt ("printMessage" oder was auch immer) die den String aus der Config.ini nimmt und darstellt, dann kann man doch bestimmt diesen String zur Laufzeit ändern. Oder? Also, ich denke es wird viel aufwand machen....aber so rein interessehalber würde mich das schon mal vom Prinzip her interessieren wie man das umsetzen würde

Sowas ist ja möglich, nur habe ich keine Ahnung wonach ich da google muss....
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: ***Injection***

Beitrag von Krishty »

Wie wird der String denn angezeigt? Falls es in einem Fenster ist (WinAPI, kein WPF oder Qt etc.), kann man sowas oft via PostMessage(WM_SETTEXT) lösen, indem man sich durch die Fensterhierarchie hangelt.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
joggel

Re: ***Injection***

Beitrag von joggel »

Der String wird in einem VideoStream angezeigt; welcher auch abgespeichert wird.

Ich merke gerade, dass das doch einen enormen "hackaufwand" benötigen würde.
Aber dieses ganze Thema der Injection finde ich auch irgendwie sehr interessant...
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: ***Injection***

Beitrag von Krishty »

Wenn du den String vorher kennst: Speicher danach durchsuchen.

Wenn du ihn gefunden hast und der neue String kürzer ist: Einfach mit dem neuen überschreiben. Falls der neue länger ist: Adresse merken und den Speicher nach der Adresse durchsuchen. Neue Adresse für neuen String reservieren; alte Adresse überall durch neue austauschen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
joggel

Re: ***Injection***

Beitrag von joggel »

Ah, okay. Danke.

Und was für ein Tool würdest für sowas empfehlen?
Also, erstmal zum suchen des Strings.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: ***Injection***

Beitrag von Krishty »

Willst du das von Hand machen oder automatisiert?

Automatisiert hängst du dich via PID oder Fenster-Handle an den Prozess, liest via ReadProcessMemory() den Speicher aus, und schreibst auch wieder via WriteProcessMemory().

Manuell kannst du HxD benutzen, dort kann man Prozessspeicher öffnen und wie eine Hex-Datei durchsuchen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
joggel

Re: ***Injection***

Beitrag von joggel »

Na ich wollte erstmal testen wie das funktioniert, also per Hand am anfang.

Wenn es dann funktioniert, evtl automatisch.
Also die Funktionsnamen sind schonmal nützlich.
Danke
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: ***Injection***

Beitrag von xq »

CheatEngine ist dein Tool der Wahl, um Speicheraddressen rauszufinden und im Zweifel Dinge live (mit Assembler!) zu patchen. Du kannst damit auch rausfinden, an welcher Stelle der String gelesen oder geschrieben wird.

Aber mal ne Frage auf einem Level höher: Um welches Tool geht es denn hier?
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
joggel

Re: ***Injection***

Beitrag von joggel »

Okay, CheatEngine werd ich mir auch mal anschauen.
Aber mal ne Frage auf einem Level höher: Um welches Tool geht es denn hier?
Eigentlich ist das eher ne Frage die mich aus Neugier interessiert. Aber was mich zu der Frage eben führt:
Wir haben hier ne Software, die nimmt einen VideoStream auf, die Kamera ist auf nen ferngesteuerten Wagen...eigentlich recht "billig".
Jetzt hätten wir gerne die Möglichkeit, dass wir zu einem bestimmten Zeitpunkt ein "Textfeld" in den Videostream einblenden, welcher dann auch gespeichert werden sollte.
Also zB. bei derr 3. Minute wird ein Text eingeblendet mit einer bestimmten Information eben...

Die Software die wir verwenden bietet zwar die Möglichkeit einen Text einzublenden, aber eben nur statisch.
Und so kam ich zu der Überlegung, ob man das nicht irgendwie ändern kann.

Aber so einfach wird das wahrscheinlich nicht gehen. Da ich mir denke, der Text wird zum Programmstart geladen und dann die ganze Zeit über angezeigt.
Also falls ich den Text irgendwie dynamisch ändern kann, dann muß er ja noch für den VideoStream ge-updated werden.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: ***Injection***

Beitrag von xq »

und eine Nachbearbeitung kommt nicht in Frage? Oder MUSS das live passieren?
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
joggel

Re: ***Injection***

Beitrag von joggel »

Wäre auch möglich. Aber das können wir den Anwendern ja nicht zumuten. Die wollen da nur ihren Wagen steuern, und live irgendwelche Notizen in dem Video machen...
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: ***Injection***

Beitrag von xq »

Von der Injection würde ich aber auch abraten. Eine andere Software für den Videostream gibts nicht?
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
joggel

Re: ***Injection***

Beitrag von joggel »

Wieso würdes du davon abraten?
Naja...eine andere SW gibt es da nicht...glaube ich.

Aber zu dieser CheatEngine:
Cooles Spielzeug!! Da sieht man ja auch richtig die Funktionsnamen zu denen gesprungen wird. Muss ich mich mal etwas damit beschäftigen....wenn ich zeit habe :/
sfxon
Beiträge: 48
Registriert: 03.08.2011, 10:49

Re: ***Injection***

Beitrag von sfxon »

Also ich würde auch die Software wechseln.
Da gibts doch heutzutage auch gute Open Source oder Web-Lösungen.
Schau nur mal die ganzen Youtuber und Streamer an..
Schau doch mal bei unserem Online-Quiz vorbei: http://quizzn.de
joggel

Re: ***Injection***

Beitrag von joggel »

Ja, stimmt schon. Recht habt ihr...

Aber mich interessiert dieses Thema auch aus rein "sportlichen" gründen ;)

Nachtrag:
Außerdem geht es ja darum, dass das dekodieren (zB als mp4) ja Lizenz-Kosten verursacht. und da gibt es wohl(??) keine OpenSource-lösung
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: ***Injection***

Beitrag von xq »

Kommt ganz auf den Codec an. Wenn du Theora/Vorbis nimmst, hast du afaik keine Kosten oder Lizenzprobleme
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
joggel

Re: ***Injection***

Beitrag von joggel »

Ja, vorbis schon. Aber wie sich das als schön angepasste und etablierte Firma gehört, verwenden wir mp4 :roll:
Benutzeravatar
Jonathan
Establishment
Beiträge: 2352
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: ***Injection***

Beitrag von Jonathan »

Also mit ffmpeg bzw. libavcodec bin ich bis jetzt noch immer zurecht gekommen. Wenn man eine Firma ist, das Videolösungen anbietet muss man da evtl. aufpassen, aber da würde sich dann die entsprechende Rechtsabteilung drum kümmern, denke ich.

Das mit dem Injection hört sich zwar spannend an, aber auch nach der so ziemlich unsaubersten Lösung. Wenn man nicht genau weiß, wie das intern gehandhabt wird, und einfach irgendwelche Daten überschreibt, könnten schlimme Dinge geschehen (im Sinne von: Es ist wahnsinnig unstabil und stürzt in lustigen Momenten ab). Ich mag es immer, wenn man gute Gründe dafür hat, warum Software robust laufen müsste, und das hier ist eher ein guter Grund dagegen.

Aber Textoverlays sind ja wirklich etwas gängiges. Ich meine, im Zweifelsfalle könnte man das sogar über eine Untertitelspur lösen, die man dann noch mit in den Container schreibt. Dafür müsste man nicht einmal irgendetwas umcodieren und der Nutzer könnte den Text sogar noch ein- und ausblenden.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten