Suche Hilfe bei Quelltextverbesserung

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
durzah
User
Beiträge: 5
Registriert: Donnerstag 29. Oktober 2015, 08:33

Hallo Leute!

Ich habe gerade neu angefangen mit Python habe vorher nur in der Schule kleinere Spiele programmiert wie z.b Frogger oder 4 gewinnt.
Jetzt will ich mich intensiver mit Python befassen und habe mir als 1. Aufgabe gesetzt ein Programm zu schreiben das durch ausprobieren ein Passwort knacken kann (hier KeePass).

Folgend ist der Quelltext.
Meine Frage dazu ist einmal was kann ich verbessern? brauche keine fertigen quelltexte sondern nur Themen mit denen ich mich beschäftigen sollte um meinen Text zu verbessern.
Und zweitens wie bekomme ich jetzt hin, dass nachdem die Zahlen 1-0 ausprobiert wurden, die zahlen 10-99 folgen oder bzw bis ins unendliche oder das Passwort gefunden wurde.

Code: Alles auswählen



import time
import win32com.client
import os

#einfache Liste möglicher Eingaben länge 88

Liste = ["1","2","3","4","5","6","7","8","9","0"]

# variable für Liste
x=0 
a=0


def Eingabe():
    global x
    shell.SendKeys (Liste[x])
    x=x+1
    shell.SendKeys ("{ENTER}")
    time.sleep(1)
    shell.SendKeys ("{ENTER}") #Enter zum Bestätigen der Fehlermeldung weil das Passwort falsch war (keine Probleme falls es richtig war)
    time.sleep (2)
    if shell.AppActivate("Open Database") == False:
        print (Liste[x-1]) # Ausgabe pw
        return
    shell.SendKeys (Liste[x])
    x=x+1
    shell.SendKeys ("{ENTER}")
    time.sleep(1)
    shell.SendKeys ("{ENTER}") #Enter zum Bestätigen der Fehlermeldung weil das Passwort falsch war (keine Probleme falls es richtig war)
    time.sleep(2)
    if shell.AppActivate("Open Database") == False:
        print (Liste[x-1]) #Ausgabe pw
        return
    os.system("taskkill /im KeePass.exe") #kein Fund --> killen vor dem 3. Fehler, da sich sonst das Programm öffnet jedoch ohne Datei


def komplett():
    global shell

    #WScript starten (Was ist WScript?)
    shell = win32com.client.Dispatch("WScript.Shell")

    #KeePass starten (richtige Datei ist schon Standard)

    shell.Run("file:///C:/Program%20Files%20(x86)/KeePass%20Password%20Safe%202/KeePass.exe")

    #warten bis gestartet 
    while shell.AppActivate("Open Database") == False:
        time.sleep (0.5)

    Eingabe()



#--------------PROGRAMM---------------------------#


for i in range (6): 
    komplett()
    time.sleep(3)

Vielen Dank!
stefanbunde
User
Beiträge: 29
Registriert: Dienstag 20. Oktober 2015, 12:59

um listen beliebiger länge zu bauen gibt es das range-buildin

Code: Alles auswählen

In [1]: range(10)
Out[1]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
dies kannst du auch ab einer bestimmten position starten lassen

Code: Alles auswählen

In [2]: range(10, 20)
Out[2]: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
und wenn die dinger dann auch noch strings sein sollen, benutzt du eine list-comprehension

Code: Alles auswählen

In [3]: [str(i) for i in range(10, 20)]
Out[3]: ['10', '11', '12', '13', '14', '15', '16', '17', '18', '19']
falls die liste sehr lang wird, könntest du auch statt range einfach xrange nehmen. damit sparst du speicherplatz :-)
weitere infos findest du unter https://docs.python.org/2/library/functions.html#range oder https://docs.python.org/2/library/functions.html#xrange
stefanbunde
User
Beiträge: 29
Registriert: Dienstag 20. Oktober 2015, 12:59

achja. und womit du dich beschäftigen könntest: pep8

und was dir auch helfen könnte: https://books.google.de/books/about/Cle ... edir_esc=y
die beispiele sind zwar in java geschrieben, finde ich aber dennoch sehr sinnvoll zu lesen :-) dort werden dann unter anderem so prinzipien vermittelt wie DRY :-)
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@durzah: vergiss, dass es sowas wie "global" gibt. Variablen müssen Funktionen immer über Argumente betreten und als Rückgabewerte verlassen. Also "Eingabe" hätte als Argumente shell und die beiden List-Einträge, wobei Liste hier nicht die ganz richtige Datenstruktur ist, das sollte wohl eine Liste mit Tupeln sein.
Antworten