ubuntuusers.de

pyo Datei editieren womit oder wie ?

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 22.04 (Jammy Jellyfish)
Antworten |

DocHifi

Avatar von DocHifi

Anmeldungsdatum:
21. Oktober 2008

Beiträge: 1479

Moin

Ich muss eine .pyo Datei editieren und weiß nicht wie oder womit.

Mit uncompyle6 kann ich sie zwar lesen, aber das reicht mir nicht.

Für Tipps bin ich dankbar.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9564

Wohnort: Münster

DocHifi schrieb:

[…] .pyo Datei

Was ist das?

DocHifi

(Themenstarter)
Avatar von DocHifi

Anmeldungsdatum:
21. Oktober 2008

Beiträge: 1479

Was ist das?

Eine Python Datei aus meinen Sat Receiver.

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 4371

Keine Ahnung obs hilft:

Easy Python Decompiler is python bytecode decompiler, decompiles pyc & pyo files.

https://sourceforge.net/projects/easypythondecompiler/

Geht nur bis Python 3.4.

https://sourceforge.net/projects/easypythondecompiler/

Für Python 3.7-3-8

Noch einer: https://github.com/rocky/python-uncompyle6

DocHifi

(Themenstarter)
Avatar von DocHifi

Anmeldungsdatum:
21. Oktober 2008

Beiträge: 1479

Mit einem Decompiler kann man sie aber nicht bearbeiten, siehe Startpost.

Das hab ich ja schon probiert.

Das ist ein Linux Receiver, das muss ja irgendwie möglich sein.

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 4371

Anschließend wieder kompilieren:

https://gist.github.com/ljaraque/66bf3875d39d9b57abdfaa90529c5a0c

Ist aber möglich, dass auf dem Gerät kein Standardcompiler verwendet wurde, um eine Bearbeitung zu erschweren.

DocHifi

(Themenstarter)
Avatar von DocHifi

Anmeldungsdatum:
21. Oktober 2008

Beiträge: 1479

verdooft schrieb:

Anschließend wieder kompilieren:

https://gist.github.com/ljaraque/66bf3875d39d9b57abdfaa90529c5a0c

Ist aber möglich, dass auf dem Gerät kein Standardcompiler verwendet wurde, um eine Bearbeitung zu erschweren.

Muss ich ja nicht auf dem Gerät machen, hab die Datei auf dem Rechner.

Also muss ich den Inhalt aus dem Terminal kopieren als .py speichern und dann wieder kompilieren.

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 4371

Ja, ich meinte, ob die veränderte Datei, die mit dem standardmäßigen Verfahren zu pyo kompiliert wurde, auf dem Gerät funktioniert, das weiß ich nicht. Mir ist nicht bekannt, dass man eine Pyo-Datei direkt bearbeiten kann. Bei Exen unter Windows ging das manchmal eingeschränkt, etwa String/Grafik/Sound-Ressourcen austauschen. Dir wird es wahrscheinlich um eine Änderung des Python-Sources gehen, da kenne ich nur Dekompilieren, ändern, wieder kompilieren.

DocHifi

(Themenstarter)
Avatar von DocHifi

Anmeldungsdatum:
21. Oktober 2008

Beiträge: 1479

Dir wird es wahrscheinlich um eine Änderung des Python-Sources gehen

Keine Ahnung ob das so heißt, ich muss nur einen Zahlenwert in der Datei ändern.

auf dem Gerät funktioniert, das weiß ich nicht.

Tut sie, ein User aus dem VU+ Forum hat es unter Windows 10 gemacht, aber die Zahl muss größer.

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 4371

Selbe Anzahl an Stellen, also z.B. 50 zu 99 und nicht 50 zu 101? Dann könnte man mit einem Hexeditor mal reinschauen, ob es den Zahlwert dort gibt, und den ändern. Hab noch keine pyo-Datei damit geöffnet, drum weiß ich nicht, was im Klartext erhalten bleibt.

DocHifi

(Themenstarter)
Avatar von DocHifi

Anmeldungsdatum:
21. Oktober 2008

Beiträge: 1479

Habe es versucht mit

uncompyle6 channels.pyo > channels.py

Den .py File bearbeitet und dann mit

python3 -OO -m py_compile channels.py

Wieder zu einer .pyo machen wollen, klappt aber nicht, weil:

File "channels.py", line 61
    write(u'<div id="refresh">
          ^
SyntaxError: unterminated string literal (detected at line 61)

Line 61 ist aber identisch.

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 4371

Was da wie geschrieben werden soll, weiß ich nicht.

' scheint nicht geschlossen zu werden, habe ich hier gefunden:

https://www.decodingweb.dev/solved-syntaxerror-unterminated-string-literal-in-python

Keine Ahnung, wo das schließénde ' sinnvoll ist.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4658

Wohnort: Berlin

Zahlen sind da nicht im Klartext drin, das ist ja nicht BASIC aus den 80ern und dann wäre ein kompilieren vielleicht auch nicht so wirklich sinnvoll. 🙂

Ganze Zahlen bis zu einer gewissen Grösse dürfte man als Binärdaten relativ einfach finden. Hab's gerade mal mit print(42) ausprobiert, mit dem Hexeditor nach 2a 00 gesucht und durch ff ff ersetzt, und das Programm gibt dann erwartungsgemäss 65535 aus.

Die Probleme fangen aber schon an wenn es eine Zahl ist, die mehr als einmal im Modulcode verwendet wird. Wenn ich das Programm erweitere zu print(42); print(42 + int(input())), dann findet man die 2a 00 nur einmal im kompilierten Code, und wenn man die Zahl ändert, dann betrifft das beide Stellen im Code wo die 42 verwendet wird. Konstanten werden im Bytecode nur einmal gespeichert, und dann von allen Stellen, die sie verwenden, referenziert.

DocHifi

(Themenstarter)
Avatar von DocHifi

Anmeldungsdatum:
21. Oktober 2008

Beiträge: 1479

Keine Ahnung, wo das schließénde ' sinnvoll ist.

Ich auch nicht, hab auch null Ahnung von Python.

DocHifi

(Themenstarter)
Avatar von DocHifi

Anmeldungsdatum:
21. Oktober 2008

Beiträge: 1479

Zahlen sind da nicht im Klartext drin,

Doch, siehe die Zeile

setTimeout(function() { $("#refresh").load(active_tab_url); }, 60000);

Er bemeckert aber eine Zeile, an der ich nichts geändert habe.

Antworten |