Kann mir jemand diesen Code erklären?

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
Sniffer
User
Beiträge: 4
Registriert: Montag 25. Januar 2016, 18:01

Hey ich hab hier den Python code von einem Buch aus dem ich Python lernen möchte (im gebiet Penetrationstesting), das Buch an sich ist gut aber erklärt nichts über den Code und bevor ich in die nächsten Kapitel vordringe möchte ich das Beherschen.
Ich habe über all ein grünes ? geschrieben wo ich etwas nicht weiß.

#!/usr/bin/python ?
# -*- coding: utf-8 -*- ? Was bringen die beiden Zeilen sind ja auskommentiert
import crypt


def testPass(cryptPass):
salt = cryptPass[0:2] ? Wieso dieses [0:2]
dictFile = open('dictionary.txt', 'r')
for word in dictFile.readlines():
word = word.strip('\n')
cryptWord = crypt.crypt(word, salt)
if cryptWord == cryptPass:
print ("[+] Found Password: " + word + "\n")
return ? Warum return?
print ('[-] Password Not Found.\n')
return ? Und warum hier auch


def main():
passFile = open('passwords.txt')
for line in passFile.readlines():
if ':' in line:
user = line.split(':')[0] ? Wieso das [0]
cryptPass = line.split(':')[1].strip(' ') ? Wieso das [1]
print ('[*] Cracking Password For: ' + user)
testPass(cryptPass)


if __name__ == '__main__': ? Was bringts?
main() ? Was bringts?


Falls jemand länger Zeit hat kann er/sie mir das gerne Zeile für Zeile erklären :3
Herzlichen Dank das ihr euch Zeit dafür nehmt

LG Sniffer
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sniffer: die meisten Deiner Fragen lassen sich durch das Lesen des offiziellen Tutorials beantworten. Die erste Zeile ist die Shebang-Zeile, die angibt, mit welchem Programm das Skript auszuführen ist. Die zweite Zeile gibt das Encoding der Datei an. Da beides nicht Python-Syntax ist, stehen sie in Kommentaren. Die Namensschreibweise hält sich nicht an die Konvention, testPass testet keinen Pass sondern versucht ein Passwort anhand von Wörtern eines Wörterbuchs zu cracken. cryptPass sollte auch nicht so kryptisch abgekürzt werden, sondern besser encrypted_password heißen. dictFile ist keine Datei, sondern ein Dateiobjekt. Das readlines ist unsinnig, da über File-Objekte direkt iteriert werden kann. Die Datei wird übrigens nicht mehr geschlossen. Dass diese "Funktion" nichts zurückliefert, sondern nur Text ausgibt ist auch ein Designfehler, da das so nicht sinnvoll wiederzuverwenden ist. In Python2 ist print keine Funktion, die Klammern also bestenfalls irreführend. Statt Strings mit + zusammenzustückeln sollte man format benutzen. Das erste return will die Funktion beenden, sobald ein Wort gefunden wurde, das zweite return ist überflüssig. passFile ist wieder ein komischer Name, die Datei wird wieder nicht wieder geschlossen, readlines ist überflüsig, line.split wird zweimal aufgerufen. Die letzten beiden Zeilen sorgen dafür, dass main nur aufgerufen wird, wenn das Programm als Skript gestartet wird.
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Die Codebox funktioniert nicht, was Beispielcode ziellos macht oder tritt das Problem aktuell nur bei mir auf, dass ich keinen formatierten Quelltext sehe!?

Ergänzend zu dem Buch ist m. E. auch dieses ergänzende Tutorial sehr wichtig. Bevor Du in deinem Buch weiterliest, solltest du das von mir verlinkte Tutorial lesen, verstehen und verinnerlichen. Danach weißt du, wie du mit dem Buch weiter verfährst. Es gilt für dein Thema als maßgeblich :wink:
Sniffer
User
Beiträge: 4
Registriert: Montag 25. Januar 2016, 18:01

pixewakb hat geschrieben:Die Codebox funktioniert nicht, was Beispielcode ziellos macht oder tritt das Problem aktuell nur bei mir auf, dass ich keinen formatierten Quelltext sehe!?

Ergänzend zu dem Buch ist m. E. auch dieses ergänzende Tutorial sehr wichtig. Bevor Du in deinem Buch weiterliest, solltest du das von mir verlinkte Tutorial lesen, verstehen und verinnerlichen. Danach weißt du, wie du mit dem Buch weiter verfährst. Es gilt für dein Thema als maßgeblich :wink:
Wieso die Verlinkung zum Strafgesetzbuch?
Sniffer
User
Beiträge: 4
Registriert: Montag 25. Januar 2016, 18:01

Sirius3 hat geschrieben:@Sniffer: die meisten Deiner Fragen lassen sich durch das Lesen des offiziellen Tutorials beantworten. Die erste Zeile ist die Shebang-Zeile, die angibt, mit welchem Programm das Skript auszuführen ist. Die zweite Zeile gibt das Encoding der Datei an. Da beides nicht Python-Syntax ist, stehen sie in Kommentaren. Die Namensschreibweise hält sich nicht an die Konvention, testPass testet keinen Pass sondern versucht ein Passwort anhand von Wörtern eines Wörterbuchs zu cracken. cryptPass sollte auch nicht so kryptisch abgekürzt werden, sondern besser encrypted_password heißen. dictFile ist keine Datei, sondern ein Dateiobjekt. Das readlines ist unsinnig, da über File-Objekte direkt iteriert werden kann. Die Datei wird übrigens nicht mehr geschlossen. Dass diese "Funktion" nichts zurückliefert, sondern nur Text ausgibt ist auch ein Designfehler, da das so nicht sinnvoll wiederzuverwenden ist. In Python2 ist print keine Funktion, die Klammern also bestenfalls irreführend. Statt Strings mit + zusammenzustückeln sollte man format benutzen. Das erste return will die Funktion beenden, sobald ein Wort gefunden wurde, das zweite return ist überflüssig. passFile ist wieder ein komischer Name, die Datei wird wieder nicht wieder geschlossen, readlines ist überflüsig, line.split wird zweimal aufgerufen. Die letzten beiden Zeilen sorgen dafür, dass main nur aufgerufen wird, wenn das Programm als Skript gestartet wird.
Mhh, da macht also sogar der Buch autor der Experte für Informationssicherheit beim US-Verteidigungsministerium ist Fehler :D

Kennst du ein Buch das mir Python beibringt halt im IT-Security Genre?
BlackJack

@Sniffer: Das sind zwei verschiedene Themenbereiche die unabhängig voneinander sind. Python kannst Du auch, und wahrscheinlich besser, mit einem allgemeinen Buch oder Tutorial lernen, was eben *Python* als Thema hat. Und IT-Sicherheit ist ein *sehr* weites Feld in dem man noch wesentlich mehr als Python oder *eine* andere Programmiersprache können muss.
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

@Sniffer: Weil das für das, was du machst relevant ist. Wenn du Software schreibst, um damit Passwörter zu knacken, könnte das IMHO - ich bin kein Jurist - schnell grenzwertig werden. In den USA ist viele Literatur zugänglich, die es so in Deutschland - wahrscheinlich auf Grund der Verlinkung - nicht gibt.
Benutzeravatar
miracle173
User
Beiträge: 127
Registriert: Samstag 6. Februar 2016, 00:28

pixewakb hat geschrieben:Die Codebox funktioniert nicht, was Beispielcode ziellos macht oder tritt das Problem aktuell nur bei mir auf, dass ich keinen formatierten Quelltext sehe!?
...
Nein Codebox funktioniert bei mir auch nicht,
Es funktioniert nur

Code: Alles auswählen

 [code]...
[/code]
z.B.

Code: Alles auswählen

# gut
if (i<j):
    print("alles wird gut")
 
oder, vielleicht etwas besser

Code: Alles auswählen

 [code=php]...
[/code]
was zwar nicht ganz richtig ist, aber vermutlich besser als die einfarbige Lösung

Code: Alles auswählen

# besser
if (i<j):
    print("alles wird besser")
Codebox sollte nicht verwendet werden, bringt nichts.
[Codebox=python file=Unbenannt.py]
# schlecht
if (i<j):
    print("alles wird schlecht")
 [/Codebox]
Antworten