.titleBar { margin-bottom: 5px!important; }

Binärdatei per Konsole editieren

Dieses Thema im Forum "FRITZ!Box Fon: Modifikationen" wurde erstellt von Shaitan, 9 Feb. 2009.

  1. Shaitan

    Shaitan Neuer User

    Registriert seit:
    25 Mai 2006
    Beiträge:
    16
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #1 Shaitan, 9 Feb. 2009
    Zuletzt bearbeitet: 11 Feb. 2009
    Hallo,

    wie kann ich denn per Konsolenbefehl in eine Binärdatei an eine bestimmte Adresse einen bestimmten Wert schreiben?

    Ich möchte die Rufumleitung auf meiner Fritzbox per MidpSSH auf dem Handy konfigurieren können. Da ich kein ISDN habe sondern nur analog habe, hat bei mir leider die Lösung mit Capidivert nicht funktioniert.

    Nun bin ich das Thema mal wieder angegangen und habe herausgefunden, dass die Informationen über die Weiterleitung in der Datei /var/flash/fx_conf gespeichert sind:

    Die Rufnummer an die weitergeleitet wird ist an der Adresse 0x4878 - 0x488C asciicodiert gespeichert. Zur Deaktivierung der Rufumleitung wird an die Adresse 0x4878 ein 0xD0 gespeichert. Nach dem Ändern ist ein Reboot nötig, damit die Fritzbox die Änderung übernimmt.

    Ich habe es jetzt hinbekommen, dass ich die Umleitung an und abschalten kann, allerdings auf sehr umständliche art auf die ich jetzt nicht näher eingehen will.

    Sehr schön wäre es wenn ich die Nummer direkt eintragen könnte, weil ich dann auch auch andere Nummern verwenden könnte.
     
  2. Takhpah

    Takhpah Neuer User

    Registriert seit:
    13 Jan. 2009
    Beiträge:
    17
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    Coder.
    Hi,

    spontan fallen mir 2 Möglichkeiten ein; für beide braucht man aber einen USB-Stick.

    1. cat <dateiname> > /path/to/usb-stick/dateiname
    2. über die Freigabe die Datei auf eine Workstation ziehen
    3. dort den Wert in einem Hexeditor ändern
    4. Datei zurückspielen auf den USB-Stick
    5. per cat <datei> > /var/flash/<dein Dateiname> die Datei neu schreiben.

    OOODER:

    Du baust Dir via Toolchain einen kompletten mc (midnight commander), legst den auf den USB-Stick, schließt den Stick an.
    dann:
    1. cat <datei> > /pfad/zum/usbstick/<dateiname>
    2. mc
    3. datei auswählen
    4. F3 (View)
    5. F4 (Hex)
    6. F2 (Edit) (jetzt bist Du im Hexeditiermodus)
    7. ändern und mit F10 und bestätigen speichern und beenden
    8. per cat die Datei in /var/flash/ überschreiben.

    Ich weiß ja nicht, wie gut Dein ssh-Client für's Händie ist; unter Umständen könnte es schmerzhaft für die Augen werden, einen mc auf einem Telefon betrachten zu müssen; da der mc aber auf der Box läuft, müsste es (theoretisch) klappen.

    Takhpah
     
  3. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Erstens solltest Du den Thread-Titel anpassen. Wie schon aus Deinem ersten Satz zu lesen ist, weißt Du selbst, daß man Dateien nicht mit SSH ändert, sondern daß SSH der Zugang zur Kommandozeile ist.

    In Deinem konkreten Fall scheint es, daß Du nicht beliebige Änderungen durchführen möchtest, sondern zwischen wenigen verschiedenen Einstellungen wechseln willst. Das Einfachste ist also, Du legst Dir Dateien mit den Zuständen an, sowie ein Skript (oder mehrere), das diese Änderung anwendet. Dieses kannst Du dann bequem von der Kommandozeile aufrufen.

    Das Skript könnte ungefähr so aussehen (vorher Einstellungen sichern):
    Code:
    SRC=/var/tmp/fx_conf_1
    CFG=/var/flash/fx_conf
    TMP=/var/tmp/fx_conf
    OFS=$((0x4878))
    LEN=$((0x488C - 0x4878 + 1))
    
    cat "$CFG" > "$TMP"
    dd if="$SRC" of="$TMP" bs=1 count="$LEN" seek="$OFS" conv=notrunc
    cat "$TMP" > "$CFG"
    
    OFS und LEN kann man auch selbst ausrechnen, falls die Shell auf der Box das nicht unterstützt.

    Wenn Du beliebige Nummern verwenden willst, diese aber als ASCII abgespeichert sind, dann kannst Du diese Nummer vorher in die Datei schreiben, die nachher in die fx_conf eingefügt wird.
     
  4. Shaitan

    Shaitan Neuer User

    Registriert seit:
    25 Mai 2006
    Beiträge:
    16
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi,

    dd wäre eigentlich schon genau das was ich bräuchte, denn ich könnte das gesamte skript direkt als Makro ins Handy speichern und müsste bei Bedarf nur die Nummer verändern.

    Leider scheint dd nicht auf der Fritzbox vorhanden zu sein:
    -sh: dd: not found

    Momentan kann ich die Weiterleitung aufs Handy an/abschalten indem ich zwei verschiedene Dateien (mit und ohne Weiterschaltung) auf einem Webspace liegen habe, die bei jedem Fritzbox-Neustart ins Ram geladen werden. Per Makro kann ich dann mit dem Handy die Originaldatei mit der gewünschten Datei überschreiben. Diese Variante ist aber sehr unflexibel.

    Wie kann ich denn den Titel ändern?
     
  5. Shaitan

    Shaitan Neuer User

    Registriert seit:
    25 Mai 2006
    Beiträge:
    16
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Gibts vielleicht irgendwo im Netz ein passendes binary von dd für die Fritzbox?

    Oder kann ich es womöglich selber kompilieren? Allerdings habe ich weder die source von dd gefunden, noch weiß ich nicht wie ich an den passenden Compiler komme.

    Vielleicht hat ja jemand einen Tip für mich.
     
  6. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Im Ersten Beitrag auf "Ändern", dann "Erweitert".

    dd ist Bestandteil der Busybox, wenn diese entsprechend konfiguriert wurde. Eine einfache Möglichkeit ist, mit Freetz eine Busybox zu erstellen, die dd enthält, und diese auf die Box zu kopieren.
     
  7. Shaitan

    Shaitan Neuer User

    Registriert seit:
    25 Mai 2006
    Beiträge:
    16
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Irgendwie klappt es immer noch nicht. Ich habe jetzt mit Freetz eine Busybox gebaut. DD stand nicht explizit zur Auswahl aber ich habe alles angeklickt was zur Auswahl stand.

    Ich kann dd immer noch nicht aufrufen. Funktioniert der Aufruf anders wenn ich ihn aus der Busybox aufrufe?