Seite 1 von 1

***Injection***

Verfasst: 23.01.2017, 10:31
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ß

Re: ***Injection***

Verfasst: 23.01.2017, 13:12
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.

Re: ***Injection***

Verfasst: 23.01.2017, 13:29
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....

Re: ***Injection***

Verfasst: 23.01.2017, 13:57
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.

Re: ***Injection***

Verfasst: 23.01.2017, 14:03
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...

Re: ***Injection***

Verfasst: 23.01.2017, 14:09
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.

Re: ***Injection***

Verfasst: 23.01.2017, 14:23
von joggel
Ah, okay. Danke.

Und was für ein Tool würdest für sowas empfehlen?
Also, erstmal zum suchen des Strings.

Re: ***Injection***

Verfasst: 23.01.2017, 14:53
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.

Re: ***Injection***

Verfasst: 23.01.2017, 15:13
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

Re: ***Injection***

Verfasst: 23.01.2017, 16:54
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?

Re: ***Injection***

Verfasst: 24.01.2017, 07:57
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.

Re: ***Injection***

Verfasst: 24.01.2017, 08:09
von xq
und eine Nachbearbeitung kommt nicht in Frage? Oder MUSS das live passieren?

Re: ***Injection***

Verfasst: 24.01.2017, 08:26
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...

Re: ***Injection***

Verfasst: 24.01.2017, 09:24
von xq
Von der Injection würde ich aber auch abraten. Eine andere Software für den Videostream gibts nicht?

Re: ***Injection***

Verfasst: 24.01.2017, 09:30
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 :/

Re: ***Injection***

Verfasst: 24.01.2017, 09:30
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..

Re: ***Injection***

Verfasst: 24.01.2017, 09:31
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

Re: ***Injection***

Verfasst: 24.01.2017, 09:37
von xq
Kommt ganz auf den Codec an. Wenn du Theora/Vorbis nimmst, hast du afaik keine Kosten oder Lizenzprobleme

Re: ***Injection***

Verfasst: 24.01.2017, 09:40
von joggel
Ja, vorbis schon. Aber wie sich das als schön angepasste und etablierte Firma gehört, verwenden wir mp4 :roll:

Re: ***Injection***

Verfasst: 29.01.2017, 10:28
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.