Seite 1 von 1

Suche Hilfe bei Quelltextverbesserung

Verfasst: Freitag 30. Oktober 2015, 08:38
von durzah
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!

Re: Suche Hilfe bei Quelltextverbesserung

Verfasst: Freitag 30. Oktober 2015, 08:46
von stefanbunde
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

Re: Suche Hilfe bei Quelltextverbesserung

Verfasst: Freitag 30. Oktober 2015, 08:50
von stefanbunde
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 :-)

Re: Suche Hilfe bei Quelltextverbesserung

Verfasst: Freitag 30. Oktober 2015, 13:46
von Sirius3
@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.