Pythonprog nur ausführbar machen, wenn Bedingung erfüllt?

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.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Mittwoch 4. März 2009, 18:31

Schau dir mal [mod]shutil[/mod] an, da gibt's sowas.

Über Sinn und Unsinn einer "Art Vorsichtsmaßnahme" will ich mal nicht philosophieren. Wenn du sowas undebingt haben willst, dann kodiere die Pfade mit Base64 oder verschlüssle gleich richtig. Wenn du die Pfade brauchst, dann dekodiere/entschlüssle einfach. Das wäre aber Security by Obscurity; wenn jemand an die Daten ran will, dann kommt er da auch dran.

Gruß,
Manuel
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Mittwoch 4. März 2009, 18:35

ne, soll nur sicherstellen, dass es nur dann läuft, wenn eine bestimmte datei im system vorhanden ist. im prinzip so, als würde es prüfen, ob die lizenz vorhanden ist und damit man die lizenz nicht einfach nimmt und auf ein fremdsystem kopiert, soll man nicht gleich sehen, in welchem ordner die liegt.

das ganze ist kostenlos und ist nur eine vorsichtsmassnahme, weil es in einer definierten hard-/software umgebung laufen muss, weil sonst das ganze system crashen kann.
da die leute aber unbedacht machen was sie wollen, will ich da eine entsprechend schlichte routine einbauen, die guckt, dass die korrekte software drauf ist und die korrekte hardware (anhand der treiberdateien) und nur dann ausführbar ist.

selbst die, die nicht gnz so python bewandert sind kriegen es hin die korrekten dateien in ein fremdsystem zu kopieren, wenn die ganzen links in der .pyc in klarschrift sind. deshalb wärs cool, wenn das nicht der fall wäre.


p.s.: jemand ne lösung, wie ich nicht-leere ordner löschen kann? alternativ, wenn das garnicht geht, muss ich irgendwie in der syntax grad was verraffen, denn ein "os.remove('/blahblah/*')" funktioniert nicht, um alle dateien zu löschen. sprich in python is "*" nicht der gleiche platzhalter wie in shell/bash oder windows. welchen müsste ich da stattdessen nehmen?
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Mittwoch 4. März 2009, 18:40

Ich zitiere mich mal selbst:
Schau dir mal [mod]shutil[/mod] an, da gibt's sowas.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Mittwoch 4. März 2009, 18:46

:D
sorry, stand auf dem schlauch. hab in dem link nach lösungen für mein sicherheitsproblem gesucht.

shutil hab ich jetzt mal importiert und wird halt einfach mit installiert. sehr schön. wieder ein problem weniger.

bleibt nur noch das unlesbarmachen der pfadangaben.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Mittwoch 4. März 2009, 18:55

Für globbing ist das glob-Modul zuständig. Ansonsten könnstest du wahrscheinlich mittels os.walk sowas wie rmtree selbst implementieren.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Mittwoch 4. März 2009, 19:14

hab einfach shutils in mein installationspacket eingebaut und dann rmtree daraus importiert.
darf man doch, oder? ist ja non-kommerziell.
lunar

Beitragvon lunar » Donnerstag 5. März 2009, 09:10

Hyperion hat geschrieben:Gabs da nicht mal die Macke einiger Windoof Editoren, bei utf-8 irgend welche komischen Header-Bytes avor zu setzen? Meine das hier schon mal gelesen zu haben ...

Nennt sich BOM (Byte-Order-Mark) und gehört eigentlich nicht an den Anfang von UTF-8-Dateien, was Windows-Editoren wie Notepad aber nicht daran hindert, sie doch zu schreiben ;)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Donnerstag 5. März 2009, 10:11

mocca hat geschrieben:...bleibt nur noch das unlesbarmachen der pfadangaben.
Base64 wurde Dir doch schon vorgeschlagen.

Code: Alles auswählen

>>> 'TWVpbiBQZmFk'.decode('base64')
'Mein Pfad'
MfG
HWK
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 5. März 2009, 12:16

lunar hat geschrieben:Nennt sich BOM (Byte-Order-Mark) und gehört eigentlich nicht an den Anfang von UTF-8-Dateien, was Windows-Editoren wie Notepad aber nicht daran hindert, sie doch zu schreiben ;)

DIe exaktere Formulierung lautet:
Wikipedia hat geschrieben:While UTF-8 does not have byte order issues, a BOM encoded in UTF-8 may nonetheless be encountered, though the Unicode standard does not recommend using it

D.h. also UTF-8-BOM ist irgendwie schon gültig, nur eben eine schlechte Idee. Python kann mit dem ``utf-8-sig``-Codec automatisch solche BOMs verwerfen.

Und Base64 hilft ja auch nichts, spätestens wenn man ``strace`` verwendet, weiß man genau auf welche Dateien zugegeriffen wird. So Verschleierungsversuche funktionieren eben nicht Trundle hat in diesem Thread aus einer "kompilierten" Datei den Salt ausgelesen und damit die Absicherung überwunden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Donnerstag 5. März 2009, 12:44

könntet ihr mir nochmal was helfen?
ich wollte mehrere dateien überprüfen lassen statt nur einer mit diesem code

Code: Alles auswählen

if os.access(['/usr/Plugins/Extensions/nel', '/usr/local/Dark', '/bin/mmfe', '/usr/lib/ma2/python/', '/usr/lib/ma2/python/Plugins', '/usr/AF', '/usr/f.ttf', '/var/etc/.en.cfg' ], os.F_OK): print ""; print "prüfung erfolgreich"; print "";


dann kriege ich aber folgenden fehler:
TypeError: coercing to Unicode: need string or buffer, list found
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Donnerstag 5. März 2009, 12:51

Dass Base64 u.ä. keine komplette Verschleierung ermöglichen, ist doch klar. Einen pfiffigen Hacker wird man sowieso nicht aufhalten können. Ich kann aber moccas Argumente nachvollziehen, dass er es Laien erschweren will, das Sytem zum Absturz zu bringen. Und dafür sollte Base64 doch reichen. :)
MfG
HWK
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Donnerstag 5. März 2009, 12:52

Wie kommst du darauf, dass die access-Funktion eine Liste akzeptiert? Sie kann nur mir einzelnen Pfaden umgehen.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Donnerstag 5. März 2009, 12:56

@mocca: Die Verwendung von all und map hatte Dir doch bereits helduel gezeigt.
MfG
HWK
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Donnerstag 5. März 2009, 13:18

naja, ich "kam" nicht direkt drauf, dass es bei os.access geht, ich dachte nur, dass es vermutlich geht. wusste nur, dass man normalerweise so mehrere zu prüfende dateien angibt.

und sorry, ja, das mit all(map( hatte ich gesehen, aber nicht gewusst, dass das die korrekte vorgehensweise für meinen versuch gewesen wäre.

und man muss dann os.path.exists nehmen, richtig? denn wenn ich

Code: Alles auswählen

all(map(os.access(['deded', 'edwdewe'], F_OK))
nehme kriege ich trotzdem die list-fehlermeldung

Code: Alles auswählen

if all(map(os.path.exists, ['/usr/Plugins/Extensions/nel', '/usr/local/Dark', '/bin/mmfe', '/usr/lib/ma2/python/', '/usr/lib/ma2/python/Plugins', '/usr/AF', '/usr/f.ttf', '/var/etc/.en.cfg' ])): print ""; print "prüfung erfolgreich"; print "";


das funktioniert! hatte erst nen tippfehler in einer der files, deshalb hat er dann immer mit else weitergemacht.
peinlich. dreimal kontrolliert und doch was übersehen!
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Donnerstag 5. März 2009, 15:01

Moin,

ein Pfad ist ein Pfad - egal ob Ordner oder Datei. Einfach mal ausprobieren. Ist ja dank Python-Interpreter einfach möglich.

Zu deinem all/map/access-Teil: Das kann so nicht funktionieren. Du übergibst die Liste der access-Funktion und nicht der map-Funktion (die soll ja damit was anstellen). Außerdem hast du das Problem, dass du der access-Funktion einen weiteren Parameter übergeben willst/musst. Da musst du ein klein wenig anders vorgehen. Z.B. so (ungetestet):

Code: Alles auswählen

all(map(lambda p: os.access(p, os.F_OK), ['deded', 'edwdewe']))
# oder aber
all([os.access(path, os.F_OK) for path in ['deded', 'edwdewe']])

Es gäbe da auch noch die Möglichkeit das via partial zu machen.

Gruß,
Manuel

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder