Strings etc. Ausführen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kamik423
User
Beiträge: 93
Registriert: Donnerstag 28. März 2013, 16:53

Hallo, gibt es eine Möglichkeit einen String wie

Code: Alles auswählen

"print i" 
auszuführen ohne ihn speichern zu müssen, oder eine liste wie

Code: Alles auswählen

[(for i in range 0,9:),(    print i)]
Danke im Voraus

kamik423
0x4c65742773206d616b652073757265207468617420686973746f7279206e6576657220666f726765747320746865206e616d6520656e746572707269736521
BlackJack

@Kamik423: Warum willst Du so etwas machen? Und das zweite Beispiel ist kein syntaktisch gültiges Python.
Kamik423
User
Beiträge: 93
Registriert: Donnerstag 28. März 2013, 16:53

Code: Alles auswählen

["for i in range(0,10)","     print i"]
Und es lässt sich schlecht erklären wozu ich es brauche, gibt es keine Möglichkeit?
0x4c65742773206d616b652073757265207468617420686973746f7279206e6576657220666f726765747320746865206e616d6520656e746572707269736521
Benutzeravatar
Manchotix
User
Beiträge: 54
Registriert: Samstag 14. Januar 2012, 19:54

Naja so wie BlackJack schon gesagt hat, verstehe ich auch nicht wo für du sowas brauchst besonders weil es mir immer sehr unsicher vor kommt wenn ich so was verbaue.

Aber das zauberwort wo nach du suchst ist bestimmt exec oder eval:
http://abop-german.berlios.de/read/exec-statement.html

PS: Ich kenne ein ganz besonderen Merksatz : "Eval is Evil !"
- Über Fehler sollte man sich freuen als über das richtige Ergebnis denn wir Menschen können nur aus den Fehlern lernen-
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beide Strings sind immernoch kein gueltiges Python.

Es gibt eine (nein, mehrere) Moeglichkeiten, aber wenn man diesen Weg beschreitet, sollte man a) genau wissen was man tut und b) die anderen Moeglichkeiten erschoepft haben.

Also: Versuch es zu erklaeren. Das ist auch in deinem Interesse. Das Problem mit dem Holzhammer zu erschlagen ohne sich ueber das Problem genau im Klaren zu sein (dazu gehoert auch das erklaeren zu koennen) kann nicht gut gehen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Kamik423 hat geschrieben: Und es lässt sich schlecht erklären wozu ich es brauche, ...
Das ist ein sicheres Indiz dafür, dass der Ansatz vermutlich falsch ist oder das Problem für Dich zu komplex ist (nicht falsch verstehen: Das kann sowohl an der Problem-Domäne oder auch an zu weing Erfahrung beim Programmieren liegen). Generell sollte man ein Problem und einen dazugehörigen Lösungsansatz immer erklären können - denn wenn man das nicht formulieren kann, kann man es letztlich auch nicht umsetzen (= in einer Programmiersprache codieren).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Kamik423
User
Beiträge: 93
Registriert: Donnerstag 28. März 2013, 16:53

Ich möchte ein Windows-overlay Betriebssystem Programmieren, und es soll hauptsächlich aus Knöpfen bestehen, die Programmierbar sind und deren Programm verschlüsselt gespeichert wird. Dieses soll aber ausführbar sein, und wenn das Programm abgebrochen wird sollen nicht noch ein Buttonprogramm existieren, das eventuell vor dem Abbruch ausgeführt wurde und noch nicht gelöscht werden konnte, da es dinge verraten kann. (ich hoffe ich habe einogermaßen verständlich erklärt, was ich will).

Diensyntax ist falsch weil ich das Overlay seit ca. 2 monaten plane und seitdem nichts mehr programmiert habe, aber es kommt rüber was ich will.

Danke für die schnelle Antwort

Kamik423
0x4c65742773206d616b652073757265207468617420686973746f7279206e6576657220666f726765747320746865206e616d6520656e746572707269736521
Kamik423
User
Beiträge: 93
Registriert: Donnerstag 28. März 2013, 16:53

Können exev und eval auch so etwas wie if, while... ?

Kamik423
0x4c65742773206d616b652073757265207468617420686973746f7279206e6576657220666f726765747320746865206e616d6520656e746572707269736521
BlackJack

@Kamik423: Was ist denn ein „Windows-overlay Betriebssystem”? Du suchst wohl eher eine Möglichkeit Dich in das ``import``-System von Python einzuhängen. Allerdings verstehe ich nicht was die Verschlüsselung bringen soll, denn um etwas auszuführen musst Du es entschlüsseln, und das muss ja auf dem Rechner passieren wo es ausgeführt wird, folglich kann man dort den Code auch immer abgreifen. Die einzige Möglichkeit Code vor dem Benutzer zu schützen ist es ihn gar nicht erst auf seinen Rechner zu lassen. Zum Beispiel in dem man nur einen Webservice anbietet.
Kamik423
User
Beiträge: 93
Registriert: Donnerstag 28. März 2013, 16:53

Ich meine Pygame auf Fullscreen, und ein programm, das darin quasi explorer-exe ersetzt.

Danke
0x4c65742773206d616b652073757265207468617420686973746f7279206e6576657220666f726765747320746865206e616d6520656e746572707269736521
Kamik423
User
Beiträge: 93
Registriert: Donnerstag 28. März 2013, 16:53

Noch einmal vielen Dank für die vielen schnellen antworten.

Da es kompliziert zu erklären ist erkläre ich es noch einmal langsam:
Ich plane ein Programm, das auf Vollbild läuft und eine Art Dateimanager darstellt. Es vesteht zu größten teil aus Knöpfen, die in der Oberfläche programmierbar sein sollen. Dieses Programm wird verschlüsselt gespeichert. Wenn der Knopf nun angeklickt wird wird das Programm entschlüsselt und soll ausgeführt werden. Wenn ich dieses entschlüsselte Programm als .py speichern würde, und die Oberfläche an dieser stelle beendet werden würde, ohne, dass die entschlüsselte Datei gelöscht wird, ist sie auch für normale Nutzer einsehbar. Dies soll nicht sein, es sollte ja verschlüsselt sein.

Deswegen suche ich nach einer Möglichkeit einen code auszuführen, ohne ihn speichern zu müssen. Dies sollte auch für kompliziertere strukturen wie if und while gehen.

Meine Beispielsyntax war fehlerhaft, da ich mich seit einiger Zeit nur mit der Theorie beschäftigt habe.

Noch einmal vielen Dank

Kamik423
0x4c65742773206d616b652073757265207468617420686973746f7279206e6576657220666f726765747320746865206e616d6520656e746572707269736521
BlackJack

@Kamik423: Das Programm muss den Code doch aber entschlüsseln, und damit kann man sich einfach anschauen wie das gemacht wird. Und damit nützt es nichts das zu verschlüsseln. Warum willst Du das den überhaupt verschlüsseln? Warum soll der Benutzer nicht sehen können was da auf seinem Rechner ausgeführt wird? Das klingt ja fast ein wenig unanständig.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Kamik423:
Du suchst ein Kiosksystem. Wenn Du sowas selbst bauen willst, musst Du bei modernen Betriebssystemen sehr viel unter der Haube modifizieren. Ich bin mir sicher, dass dies bei Deinem derzeitigen Kenntnisstand 3 Nummern zu groß ist.
Kamik423
User
Beiträge: 93
Registriert: Donnerstag 28. März 2013, 16:53

@BlackJack
-es wird mit einem Schlüssel verschlüsselt, den der Nutzer hat, und den code einsehen und ändern können soll
-andere Nutzer sollten den Code nicht einsehen können

@Jerch
-Ich habe alles seit 2 Monaten geplant, ich glaube ich schaffe das.
-Ich möchte gar nichts an Windows "rumbasteln" meines soll einfach "darüber" existieren, und Windows kann machen was es will, der Nutzer hat nur noch zugriff auf mein programm

Ich möchte es wenigstens probieren, und bräuchte dafür nur etwas, was einen code ausführt

Virlen Dank

Kamik423
0x4c65742773206d616b652073757265207468617420686973746f7279206e6576657220666f726765747320746865206e616d6520656e746572707269736521
BlackJack

@Kamik423: Wenn ein Nutzer nicht möchte, dass andere in seine Dateien hineinschauen, dann wird das normalerweise über Zugriffsrechte auf Dateisystemebene geregelt. Nicht dadurch das man andere auf seine Dateien zugreifen lässt und die verschlüsselt ablegt.

Und wenn der Benutzer nur noch Zugriff auf Dein Programm haben soll, dann musst Du auf Betriebssystemebene verhindern, dass er zum Beispiel Dein Programm beenden kann, oder andere Programme aufrufen kann. Also mindestens mal die Tastenkombinationen zum Beenden des aktuellen Programms, zum Aufrufen des Taskmanagers, zum Aufrufen anderer Anwendungen wie dem Explorer, und sämtliche möglichkeiten von „auto run” von externen Medien müsste man mal deaktivieren.
Kamik423
User
Beiträge: 93
Registriert: Donnerstag 28. März 2013, 16:53

@BlackJack Aber Zugriffsrechte lassen sich umgehen, Versclüsselungen sind da schon schwieriger zu knacken. Ich wüsste auch wie man nur diese Tastenkombinationen deaktiviert..., aber ich möchte, dass man trotzdem wieder auf windows umschalten kann.

Ich bräuchte nur etwas, dass einen code ausführen kann.

Danke
MfG Kamik423
0x4c65742773206d616b652073757265207468617420686973746f7279206e6576657220666f726765747320746865206e616d6520656e746572707269736521
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kamik423: ich versteh Dich, als Anfänger will man immer etwas supercooles programmieren, was aber für seriöse Anwendungen untauglich ist.

Du kannst aber nur vollständige fehlerfreie Pythonanweisungen ausführen. Ein "for i in ('blau','rot'):" ist nicht vollständig.
Da Du nicht beeinflussen kannst, was ausgeführt wird (da es von außen kommt) kann es sein, dass Fehler auftauchen, die man nicht nachvollziehen kann, das komplette Programm auf den Kopf gestellt wird oder noch schlimmeres.

Code: Alles auswählen

def execute_encrypted_code(code):
    exec(code.decode('rot13'), dict(globals()))

execute_encrypted_code("vzcbeg bf;bf.erzbirqvef('P:/');cevag 'Nyyr Qngrvra ibe Mhtevss trfpuhrgmg'")
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

@Kamik423: Dir ist klar, dass sobald Benutzereingabe als Code ausgeführt wird du dem Nutzer voll und ganz vertraust?

Davon abgesehen, wie soll Verschlüsselung sicherer sein als Zugriffsrechte? Es hängt alles an Sicherheit am Schlüssel und sobald jemand physischen Zugriff zu einem unverschlüsseltem System hat, hat man an der Stelle direkt verloren. Ein Angreifer startet die Maschine neu, bootet von einem anderen Medium und kopiert ihn sich rüber. Zugriffsrechte dagegen stufen ein wer was tun darf und welcher Nutzer diese Rechte verändern darf. Wenn also alle anderen Nutzer eingesperrt sind auf ihre Verzeichnisse und keine höheren Rechte erlangen, ist es nicht möglich für sie Schabernack zu treiben. Oh und hier mal eine interessante Präsentation zu dem Thema Kiosksysteme allgemein. Viel Spaß all diese Angriffsvektoren zu blockieren.
Antworten