[Frage] "Runtime patching" ?

PeterPawn

IPPF-Urgestein
Mitglied seit
10 Mai 2006
Beiträge
15,619
Punkte für Reaktionen
1,947
Punkte
113
Hallo zusammen,

trotz intensiver Suche im Internet bin ich nicht fündig geworden.

Ich suche ein Tool, das es mir ermöglicht, zur Laufzeit eines bestimmten Programms (in diesem Fall der ctlmgr) mit Debugger-Funktionen (ptrace) Änderungen im "Datensegment" vorzunehmen.

Da es nur eine Instanz des ctlmgr (mit 3 ständig aktiven Threads nach meinen Untersuchungen) gibt, stört es auch nicht weiter, wenn anschließend der entsprechende Memory-Bereich nicht mehr "shared" ist.

Ich will unbedingt den im ctlmgr enthaltenen String zur Auswahl der Cipher-Suites für HTTPS-Verbindungen ändern, um wieder eine für mich akzeptable Verschlüsselung zu verwenden.

Eine Modifikation des Binary per bspatch (also nach /var kopieren, dort mit bspatch ändern, ctlmgr stoppen, remount mit bind-Option, ctlmgr starten) habe ich auch schon erwogen, das ist mir aber etwas zu umständlich.
Scripting des gdb (mit attach/detach) wäre eine weitere Option, aber gdb ist mit seinem Memory-Footprint von über 7 MB (auch wenn nur temporär) und 3,5 MB im Filesystem (noch ohne Libs) schon ein mächtiger "Brummer" für so eine simple Funktion.

Ich will auch das Copyright von AVM nicht verletzen, indem ich die Datei mit dem Binärcode *dauerhaft* verändere. Da das Vervielfältigen in den Speicher per se lizensiert ist, würde eine Modifikation im Speicher auch kein Problem darstellen.

Kennt jemand vielleicht doch ein Tool mit dem o.a. Funktionsumfang (dann am liebsten noch mit regex-Suche nach der zu modifizierenden Stelle :-)) oder muß ich selbst ran ?
 
Die Frage hat mit Freetz nichts zu tun.
Eine Modifikation des Binary per bspatch (also nach /var kopieren, dort mit bspatch ändern, ctlmgr stoppen, remount mit bind-Option, ctlmgr starten) habe ich auch schon erwogen, das ist mir aber etwas zu umständlich.
Das Programm zu ändern ist Dir umständlich im Vergleich dazu, im laufenden Programm den Speicher zu modifizieren?
 
Die Frage hat mit Freetz nichts zu tun.
Sorry. Vordergründig vielleicht nicht, aber ich würde daraus gerne (neben dem reinen Eigenbedarf, der straflos ist) u.a. einen optionalen Patch für Freetz machen, um dem Nutzer die Möglichkeit zu geben, wieder DHE-RSA-AES128-SHA und DHE-RSA-AES256-SHA für den AVM-Webserver zu verwenden. Dazu muß nur in dem entsprechenden String im ctlmgr ein NUL-Byte etwas weiter nach vorne verschoben werden. Der AVM-SSL-Stack kann nämlich nach wie vor DHE (erst recht, seit er auf OpenSSL 1.0.1g zurückgreift), es wird nur explizit von AVM per Cipher-Select-String ausgeschlossen.

Das Programm zu ändern ist Dir umständlich im Vergleich dazu, im laufenden Programm den Speicher zu modifizieren?
Stark verkürzt ... ja.

Warum ?

1. bspatch existiert(e) meines Wissens ohnehin nur in Multi-Annex-Images, im Moment finde ich es aber nicht einmal mehr in einer 7390i.

2. Die diff-Datei für bspatch ist nicht so ohne weiteres "on-the-fly" per Script zu bauen. Selbst wenn man z.B. mit sfk die richtige Stelle lokalisiert, ist der Aufwand immens, da man ja nicht wirklich zwei Dateien mit bsdiff vergleichen lassen kann. Mit sfk zur Laufzeit auf der Box in /var zu patchen, ist auch eine riesige Kanone für einen eher winzigen Spatzen ... ob das die sfk-Lizenz zuließe, habe ich noch nicht geprüft.

3. Eine "feste" bsdiff-Datei wäre wenig flexibel, d.h. für jede winzige Verschiebung im Datensegment vom ctlmgr braucht man eine eigene bsdiff-Datei. Von einer modellübergreifenden einheitlichen Vorgehensweise ist da nur zu träumen.

4. Es wird ein ganzer "bunter Strauß" an Tools für diese Vorgehensweise benötigt. Im Idealfall kommt man aber mit nur einem Tool aus, event. noch eine Konfigurationsdatei dazu.

5. Eine Änderung des ctlmgr schon vor dem Packen des SquashFS könnte als Verstoß gegen Urheberrechte gewertet werden, dann wäre auch ein dafür gedachter Patch rechtswidrig.

6. Eine nachträgliche dynamische Änderung in /var mit einem remount macht einen Neustart des ctlmgr erforderlich.

Die Frage hat mit Freetz nichts zu tun.
An welches Unterforum sollte ich mich mit der Frage besser wenden ?
 
Bleib bei den Thread hier, bevor die Diskussion auf mehrere verteilt wird. Vielleicht verschiebt ihn ein Moderator, vielleicht ist doch Freetz die Lösung.

Was ist also das konkrete Problem? AVM hat früher DHE unterstützt und jetzt nicht mehr? Hast Du schon mal nachgefragt, warum das so ist?

Ich vermute mal, es geht um diesen String:
Code:
HIGH:MEDIUM:!EXP:!ADH:!EDH-RSA-DES-CBC-SHA:!EDH-RSA-DES-CBC3-SHA:!DES-CBC3-SHA:!AES128-SHA:!AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA
Dieses String lässt sich mit sed einfach von DHE nach HDX umsetzen, sofern sich OpenSSL nicht daran stört, wenn man nicht existierende Kombinationen verbietet. Auch wenn das nicht geht, werden sich Strings finden lassen, die von der Länge her gleich bleiben.
Code:
sed -i -e s/:!DHE-RSA/:!DHX-RSA/g /tmp/ctlmgr

Um den String im Speicher zu ändern ist vermutlich ein eigens dazu erstelltes Programm der einfachste Weg. Die Frage ist aber, ob das etwas bringt. Vermutlich ist zu dem Zeitpunkt OpenSSL bereits initialisiert und der String wird danach gar nicht mehr verwendet. Ich gehe zumindest nicht davon aus, dass OpenSSL bei jeder neuen Verbindung neu den String untersucht.
 
Was ist also das konkrete Problem? AVM hat früher DHE unterstützt und jetzt nicht mehr? Hast Du schon mal nachgefragt, warum das so ist?
Mehrfach ... seit November 2013 eigentlich regelmäßig bis zum Februar diesen Jahres.

Warum sie seit Herbst 2013 systematisch alle stärkeren Verfahren als RC4-SHA und RC4-MD5 aus allen neuen Versionen (zumindest für die Modelle, auf die ich Zugriff habe) ausgebaut haben, habe ich aber nie erfahren - offenbar genauso wenig wie Jürgen Schmidt von heise Security.

Also kann man nur spekulieren und testen, ob DHE gegen andere Implementierungen funktioniert (das sagt noch nichts über die Qualität der Verschlüsselung). Dazu muß es aber erst einmal laufen ...

Ich vermute mal, es geht um diesen String:
Im Prinzip ja, in den Laborversionen mit ECDHE-Unterstützung und OpenSSL 1.0.1g ist er etwas länger geworden.

sofern sich OpenSSL nicht daran stört, wenn man nicht existierende Kombinationen verbietet. Auch wenn das nicht geht, werden sich Strings finden lassen, die von der Länge her gleich bleiben.
OpenSSL stört sich an syntaktisch falschen Cipher-Selects.

Aber das ist auch nicht der Punkt, es gäbe da ja auch einen Binärmodus beim sed und dann kann man den String mit einem NUL-Byte per sed "abschneiden". Wenn der sed in der busybox das nicht kann, nimmt man eben ein anderes Tool.

Der Einsatz von "normalen" sed-Anweisungen für eine Binärdatei ist - nach meinen Erfahrungen - eher nicht zu empfehlen. Und ich will ja (Copyright) permanente Änderungen vermeiden ...

Die grundsätzliche Funktion der Idee habe ich selbstverständlich bei mir selbst schon vor längerer Zeit mit einem per Hexeditor geänderten ctlmgr getestet, vor kurzem auch für die neue Laborversion der 7490.

Das erfordert dann aber eben entweder eine Modifikation des ctlmgr schon im SquashFS oder einen zusätzlichen Neustart des ctlmgr nach remount mit bind-Option.

Da der ctlmgr gerade beim Booten der Box aber ordentlich zu tun hat, um die verschiedenen Aktivitäten unter einen Hut zu bringen, ist es keine sehr gute Idee, ihn zu früh abzuschießen und man muß die Box erst "settlen" lassen. Das ist in meinen Augen zwar für die private Bastelei gut genug, bringt aber über verschiedene Modelle mit ggf. verschiedenen vom ctlmgr abhängigen Diensten eher mehr Probleme, als durch die "Wiederauferstehung" von DHE gelöst werden.

Um den String im Speicher zu ändern ist vermutlich ein eigens dazu erstelltes Programm der einfachste Weg.
Die Frage zielte ja darauf ab, ob jemand so ein Tool kennt oder selbst eines geschrieben hat. Wenn die Antwort auch nach etwas Warten nur "nein" lautet, werfe ich meinen Editor an.

Die Frage ist aber, ob das etwas bringt. Vermutlich ist zu dem Zeitpunkt OpenSSL bereits initialisiert und der String wird danach gar nicht mehr verwendet. Ich gehe zumindest nicht davon aus, dass OpenSSL bei jeder neuen Verbindung neu den String untersucht.
Das weiß ich allerdings auch noch nicht so genau. Bei der "alten" Version verhielt sich der ctlmgr beim Aufbau einer HTTPS-Verbindung noch ähnlich wie z.B. der inetd. Er nahm die TCP-Verbindung an, initialisierte den Tunnel und reichte die Daten aus dem Tunnel quasi unverschlüsselt an sich selbst durch. Eine Änderung der Cipher-Suites mit gdb wurde berücksichtigt.

Ob das jetzt bei der neuen Möglichkeit mit dem ständig laufenden HTTPS-Listener (es geht ja jetzt auch HTTPS von innen, ohne daß man dafür externes HTTPS auch zulassen müßte) anders ist, teste ich einfach später. Ich glaube im Moment fest daran, daß - nach Patchen im Datensegment - der ctlmgr auch unterhalb der Reizschwelle eines Neustarts irgendwie über IPC-Mechanismen (vielleicht per "msgsend dsld reconnect_button" ?) zu einer Reinitialisierung des SSL-Stacks überredet werden kann, wenn das nötig sein sollte. Allerdings kann ich es für die neuen Laborversionen ja wirklich noch einmal testen ...

Zwar kann man beim Erzeugen eines neuen SSL_CTX (immer auf OpenSSL bezogen) generell die Protokollversion festlegen (SSLv2/v3/TLS), aber die zu verwendenden Cipher-Suites kommen eigentlich erst nach einem SSL_accept ins Spiel, wenn der Handshake ansteht. Solange AVM da jetzt nicht eine Kopie des Strings aus dem Datensegment irgendwo auf den Stack legt (wozu sollten sie das machen), dürfte die Änderung im Datensegment für künftige Verbindungen berücksichtigt werden.

AVM hat früher DHE unterstützt und jetzt nicht mehr? Hast Du schon mal nachgefragt, warum das so ist?
Wenn AVM das DHE wirklich wegen Implementierungsfehlern abgeschaltet haben sollte, dann sollten sie in meinen Augen auch ganz klar "die Hosen runterlassen". Schließlich wurden mit diesen Verfahren lange genug auch vertrauliche Daten übertragen und der Kunde sollte schon das Recht haben, wenigstens nachträglich über dabei (potentiell) entstandenen Schaden informiert zu werden.

Wenn ich mir aber dann wieder ansehe, daß für den Einsatz von ECDHE-Verfahren (in OpenSSL seit 1.x enthalten) die bisher genutzte OpenSSL-Version 0.9.8irgendwas_fürchterlich_altes gegen eine Version 1.0.1g ausgetauscht wurde, dann verleitet mich das irgendwie zu der Annahme, daß AVM auch vorher auf die Funktionen in der libssl.so gesetzt hat und nur eigene Wrapper dafür verwendete.

Definitiv OT: Wurde das Thema AVM und SSL-Stack jemals wirklich bis zum Ende aufgeklärt ? Es gab ja mal Bestrebungen, die AVM-eigene libssl durch eine "native" openssl-Lib zu ersetzen. War da nicht mal etwas mit einem "Freetz"-Wrapper dafür ? Ist das irgendwann einmal "stable" geworden ? Ich gebe zu, das habe ich nicht weiter verfolgt ...

Jedenfalls wäre dann (bei richtiger Initialisierung des PRNG, das muß bei Embedded Devices aber nicht immer der Fall sein) gegen die grundsätzliche Implementierung der DHE-Verfahren nicht einzuwenden gewesen bzw. jetzt bei der 1.0.1g nichts mehr einzuwenden. Eine mangelnde Entropie des PRNG würde ja genauso die ECDHE-Verfahren betreffen, wie die DHE-Verfahren ... und diese Blöße gibt sich AVM hoffentlich nicht.

Du siehst, einiges ist spekulativ, einiges getestet ... eine Antwort/Stellungnahme von AVM zu den Beweggründen für die - genau genommen - Abschaffung der HTTPS-Verschlüsselung seit Herbst 2013 und die jetzt in den Laborversionen stattfindende zaghafte Wiedereinführung sinnvoller Verfahren, würde da ungemein helfen. So werden Verschwörungstheorien jedenfalls nicht entkräftet ...

Und ECDHE ist eben - je nachdem, wen man fragt und wem man glaubt - nicht immer das Gelbe vom Ei, dafür aber schneller als DHE.

Die wenigsten werden "das Problem der Berechnung des diskreten Logarithmus in elliptischen Kurven" nachvollziehen können, ich definitiv auch nicht ... aber dafür gibt es international anerkannte - und unabhängige - Crypto-Experten. Und wenn diese zu dem Schluß kommen, bestimmte standardisierte Kurven (beschrieben durch ihre Parametersätze) könnten so augewählt worden sein, daß einigen Organisationen "kürzere" Wege zur Lösung des zugrunde liegenden mathematischen Problems bekannt sind, dann bin ich bereit, diesen Glauben zu schenken ... besonders dann, wenn sie nachweislich Einblick in eigentlich geheime Dokumente hatten.

Sorry, wird immer mehr OT, habe mich mal wieder hinreißen lassen ... ich habe fertig.
 
Zuletzt bearbeitet:
Warum sie seit Herbst 2013 systematisch alle stärkeren Verfahren als RC4-SHA und RC4-MD5 aus allen neuen Versionen (zumindest für die Modelle, auf die ich Zugriff habe) ausgebaut haben, habe ich aber nie erfahren - offenbar genauso wenig wie Jürgen Schmidt von heise Security.
Dann sollte c't mal nachfragen, bzw. einen Bericht darüber bringen.
Aber das ist auch nicht der Punkt, es gäbe da ja auch einen Binärmodus beim sed und dann kann man den String mit einem NUL-Byte per sed "abschneiden".
Ich weiß nicht, der Binärmodus von sed das tut, was Du Dir darunter vorstellst. jedenfalls kann man mit GNU sed ein 0 Byte ersetzen, mit Busybox sed habe ich keinen Weg dafür gefunden.
Wurde das Thema AVM und SSL-Stack jemals wirklich bis zum Ende aufgeklärt ? Es gab ja mal Bestrebungen, die AVM-eigene libssl durch eine "native" openssl-Lib zu ersetzen. War da nicht mal etwas mit einem "Freetz"-Wrapper dafür ? Ist das irgendwann einmal "stable" geworden ? Ich gebe zu, das habe ich nicht weiter verfolgt ...
Nicht dass ich wüsste. Die libssl von AVM hat einige Funktionen umbenannt, ohne erkennbaren Grund. Die Quellen für die geänderte Library gibt es von AVM nicht, weil sie nicht dazu verpflichtet sind, auch wenn ihnen davon kein Zacken aus der Krone fallen würde. Es gab dann Probleme mit AVM Funktionen mit gleichem Namen, die aber nicht genau das Gleiche getan haben, und Funktionen für vermutlich das Gleiche aber anderem Namen, die von AVM Programmen erwartet worden sind. Jedenfalls schien es mehr Arbeit als Nutzen zu sein, dem nachzugehen, zumal man nie weiß, ob es in der nächsten Version noch immer so ist.
 
Dann sollte c't mal nachfragen, bzw. einen Bericht darüber bringen.
Das würde ich sehr begrüßen. Ich hatte - nachdem AVM nicht reagierte - erst "dz" und dann "ju" per E-Mail darauf aufmerksam gemacht und letzterer konnte es dann auch nachvollziehen, wie er mir schrieb (das war Anfang November 2013). Er wollte bei AVM dazu nachfragen ...

Drei weitere Nachfragen meinerseits (immer im Abstand von ca. 4 Wochen, also sicherlich nicht zu penetrant), ob er von AVM dazu etwas erfahren hat, blieben aber auch von ihm unbeantwortet.

In heise-Foren wurde - allerdings mehr im Zusammenhang mit der anfangs eher zögerlichen Berichterstattung zum Fritz!Box-Hack - mal etwas von "ADAC-Syndrom" geschrieben.:confused:

Gerade weil heise.de ja auch mit eigenen, kostenpflichtigen Workshops auf die "RC4-geknackt"-Welle aufgesprungen ist, hätte ich da etwas mehr "Biss" erwartet ... aber im IPPF waren die Reaktionen Ende Oktober/Anfang November (bis auf wenige Ausnahmen) ja auch spärlich. Es interessiert offenbar zu wenige ...
 
Das ist schade, speziell wenn man bedenkt, dass es in c't einen größeren Artikel zu SSL bei Email Providern gab und dort das Fehlen von Forward Security bemängelt wurde.
Hier im Forum habe ich dazu bisher nichts mitbekommen, aber vielleicht deswegen, weil die die Labor Versionen nicht so genau verfolge.
 
@PeterPawn: mache doch einfach eine Library analog libctlmgr oder erweitere sogar direkt diese. "Überlade" die Funktion, der der String als Parameter übergeben wird und statt den AVM-Wert reiche den von Dir gewünschten Wert an die OpenSSL-Library weiter. Sofern Du Dich für die eigene Library entscheidest, musst Du noch einen ctlmgr-Wrapper mit dem entsprechenden LD_PRELOAD basteln (s. 105-add_ctlmgr-wrapper.sh).
 
mache doch einfach eine Library
Danke für den Vorschlag.

Wenn ich die Idee richtig verstehe, wäre das eine weitere Möglichkeit ... so umgeht man das Problem mit dem Copyright ja auch durch eine Änderung zur Laufzeit.

Wenn ich aber eine Library erstelle, kann ich ja auch das gesuchte Tool schreiben ... das wäre dann - nach meinem Empfinden - schnörkelloser und hätte mehr Freiheiten.

Show-Stopper für das "Tool" wäre nur ein Kernel ohne ptrace-Unterstützung ...

Und ich sehe im Moment auch nicht, wie eine Library mein Problem löst, wenn ich folgende Rahmenbedingungen (die bei Freetz-only sicherlich nicht zu berücksichtigen sind und wir sind hier ja eigentlich im Freetz-Forum, also sorry) gleichzeitig erfüllen will:

1. Die Lösung soll mit und ohne Flashen eines "nicht-AVM"-Images funktionieren. Das hatte ich wahrscheinlich nicht deutlich genug zum Ausdruck gebracht.

2. Wenn es irgendwie möglich ist, will ich den nachträglichen Neustart des ctlmgr vermeiden. Dabei werden bei einigen Boxen andere Dienste (z.B. CapiOverTCP) praktisch mit abgeschossen. Die sollten allerdings auch wieder vom ctlmgr gestartet werden ... aber man muß ja kein unnötiges "Risiko" eingehen.

Wenn ich 1. erfülle - meinetwegen durch Laden der Dateien vom USB-Stick nach /var, läßt sich 2. nicht erfüllen, da ich definitiv zu spät zum Zuge komme.

Wenn ich 2. erfüllen will, brauche ich - in meinen Augen zwingend - ein neues Image mit einem entsprechenden SquashFS.

Das Kopieren aller eigenen Bibliotheken (oder was für Files auch immer zusätzlich notwendig sind beim nachträglichen Laden) müßte auch zwingend "direkt in die Box" erfolgen - nicht einmal nach /var/media/ftp reicht i.d.R., damit beim Herunterfahren die gemounteten Filesysteme sauber ausgehangen werden können. Meines Wissens ist der ctlmgr bis knapp vor dem "echten" Reboot aktiv.

Das von mir gesuchte "Tool" hätte den Vorteil des "One-Time-Shots" ... wenn es einmal ausgeführt ist, kann es sich wieder spurlos beenden. Solange der ctlmgr nicht erneut gestartet wird, bliebe die Modifikation erhalten. Auch spielt der genaue Zeitpunkt der Ausführung dann keine Rolle ... ab der Änderung sind neue Verbindungen dann eben - wenn der Client es unterstützt - sicherer.

Selbst wenn aus irgendeinem unerfindlichen Grund der betroffene Speicherbereich mal ausgelagert werden müßte, sollte das gesetzte "shared-dirty"-Flag dafür sorgen, daß er auch wirklich mit dem aktuellen Stand aus- und eingelagert wird, anstatt nur wieder auf das Original im SquashFS gemappt zu werden. Wenn die Speicherverwaltung aus dem "shared" beim Ändern ein "private" macht, ist das auch kein Beinbruch, Hauptsache der Inhalt bleibt erhalten. Und aus der Sicht des Systems ist das Datensegment ohnehin read/write ...

Code:
# cat /proc/$(pidof ctlmgr)/maps
00400000-004b4000 r-xp 00000000 1f:00 4571       /usr/bin/ctlmgr
004c4000-004ca000 rw-p 000b4000 1f:00 4571       /usr/bin/ctlmgr
004ca000-004d3000 rwxp 004ca000 00:00 0          [heap]
...

Wie man dann event. wirklich einen Neustart des ctlmgr abfängt (kommt so etwas im laufenden Betrieb der Box überhaupt vor ?), überlege ich mir noch in Ruhe ... am einfachsten wäre wahrscheinlich eine "polling"-Lösung oder man findet doch noch einen Hook, wo man sich dranhängen kann. Wenn das Tool dann "sophisticated" genug ist, um auch einen mehrfachen Aufruf schadlos zu überstehen, sollte man fast alle Möglichkeiten abgedeckt haben.

Habe ich irgendetwas Essentielles nicht berücksichtigt ?

Ich stelle mir das in etwa so vor:

Code:
patch_process <patch_command_file>

patch_command_file:
procname = ctlmgr
filename = /usr/bin/ctlmgr
locate = 3A214448452D5253412D4145533132382D5348413A214448452D5253412D4145533235362D534841 <= das ist ":!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA"
replace = 00 <= überschreiben von n Bytes ab Beginn von 'locate'
Zuerst die PID des Prozesses (ctlmgr) ermitteln, über das Mapping die Startadresse des Datensegments für das File (/usr/bin/ctlmgr) ermitteln, mit ptrace(PTRACE_ATTACH) an den Prozess anhängen (ggf. vorher mit SIGSTOP anhalten), mit ptrace(PTRACE_PEEKDATA) die richtige Stelle suchen und mit ptrace(PTRACE_POKEDATA) dann dort ändern. Anschließend noch ein ptrace(PTRACE_DETACH) und wenn erforderlich ein SIGCONT ... und die Welt sollte wieder in Ordnung sein.

Entsprechend flexibel gestaltet, könnte man damit m.E. noch weitere Fälle erschlagen ... obwohl die meisten davon sicherlich in einem Freetz-Image gar nicht notwendig wären, wie z.B. das "Umleiten" von "system"- oder "execvpe"-Calls in AVM-Binaries auf eigene Wrapper-Skripte.

Deshalb war ich auch sehr erstaunt, als ich bei einer Suche nach einem derartigen Tool im Netz nicht fündig wurde ... und so suche ich eigentlich eher nach Gegenargumenten, warum das so nicht funktionieren könnte. Nur so kann ich mir erklären, daß es noch kein Tool gibt ... wenn ich nicht nur zu blöd für eine Internet-Recherche bin.
 
Und aus der Sicht des Systems ist das Datensegment ohnehin read/write ...
Der String steht aber nicht im Datensegment. Du müsstest prüfen, ob das von Bedeutung ist.

Zuerst die PID des Prozesses (ctlmgr) ermitteln, über das Mapping die Startadresse des Datensegments für das File (/usr/bin/ctlmgr) ermitteln, mit ptrace(PTRACE_ATTACH) an den Prozess anhängen (ggf. vorher mit SIGSTOP anhalten), mit ptrace(PTRACE_PEEKDATA) die richtige Stelle suchen und mit ptrace(PTRACE_POKEDATA) dann dort ändern. Anschließend noch ein ptrace(PTRACE_DETACH) und wenn erforderlich ein SIGCONT ... und die Welt sollte wieder in Ordnung sein.

ptrace soll recht langsam sein, zumal die Boxen sowieso nicht sonderlich schnell sind. Den ganzen Adressraum zu durchsuchen kann dauern. Besser ist es, in der Datei die Adresse zu suchen und dann direkt zu ändern.
 
Kostenlos!

Statistik des Forums

Themen
248,853
Beiträge
2,302,887
Mitglieder
378,501
Neuestes Mitglied
Dalle85