Zertifikatsprogramm - Z202 Python 1 - Programmierung und...

48
Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik Einführung in Python Forensische Analyse mit Python: Datenbanken und Anwendungen Forensische Analyse mit Python: Windows Prof. Dr. Martin Rieger Patrick Eisoldt, M.Eng. David Schlichtenberger, M.Sc.

Transcript of Zertifikatsprogramm - Z202 Python 1 - Programmierung und...

Page 1: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Zertifikatsprogramm - Z202

Python 1 - Programmierung und Forensik Einführung in Python Forensische Analyse mit Python: Datenbanken und Anwendungen Forensische Analyse mit Python: Windows

Prof. Dr. Martin RiegerPatrick Eisoldt, M.Eng.David Schlichtenberger, M.Sc.

Page 2: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik
Page 3: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Python 1 – Programmieren im IT-Security-Umfeld

Studienbrief 1: Einführung in Python

Studienbrief 2: Forensische Analyse mit Python: Datenban-ken und Anwendungen

Studienbrief 3: Forensische Analyse mit Python: Windows

Autoren:

Prof. Dr. Martin Rieger

Patrick Eisoldt, M.Eng.

David Schlichtenberger, M.Sc.

2. Auflage

Hochschule Albstadt-Sigmaringen

Page 4: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

© 2017 Hochschule Albstadt-SigmaringenInstitut für wissenschaftliche WeiterbildungOpen C3S | ZertifikatsprogrammSteinachstraße 1172336 Balingen

2. Auflage (2017-01-25)

Das Werk einschließlich seiner Teile ist urheberrechtlich geschützt. Jede Ver-wendung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohneZustimmung der Verfasser unzulässig und strafbar. Das gilt insbesonderefür Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspei-cherung und Verarbeitung in elektronischen Systemen.

Um die Lesbarkeit zu vereinfachen, wird auf die zusätzliche Formulierungder weiblichen Form bei Personenbezeichnungen verzichtet. Wir weisen des-halb darauf hin, dass die Verwendung der männlichen Form explizit alsgeschlechtsunabhängig verstanden werden soll.

Page 5: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Inhaltsverzeichnis Seite 3

Inhaltsverzeichnis

Einleitung zu den Studienbriefen 5I. Abkürzungen der Randsymbole und Farbkodierungen . . . . . . . . . . . . . . . . . . . . . . . 5II. Zu den Autoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6III. Modullehrziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

Studienbrief 1 Einführung in Python 111.1 Lernergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.2 Advance Organizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.3.1 Programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3.2 Syntax und Semantik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.3.3 Programmierparadigmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.4 Installation von Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.5 Python im interaktiven Modus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.6 Alles ist ein Objekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

1.6.1 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.6.2 Schlüsselwörter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

1.7 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.7.1 Eigene Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281.7.2 Globale und lokale Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.8 Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311.9 Standard-Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

1.9.1 Ganzzahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331.9.2 Gleitkommazahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.9.3 NoneType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.9.4 Bool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.9.5 Sequenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.9.6 Mengen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.9.7 Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421.9.8 Typumwandlungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

1.10 Erstellen von Skriptdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431.11 Tastatureingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451.12 Kontrollstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

1.12.1 Bedingte Anweisung und Verzweigung . . . . . . . . . . . . . . . . . . . . . . . . . . . 481.12.2 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501.12.3 Ausnahmebehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

1.13 Dateihandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531.14 Erstellen von einfachen Textmenüs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561.15 Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

1.15.1 Beispiele für RegEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611.15.2 Reguläre Ausdrücke in Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

1.16 Kommandozeilenparameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651.17 Definition eigener Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

1.17.1 Polymorphismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721.17.2 Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

1.18 Magic Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751.19 Guter Programmierstil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761.20 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791.21 Installation von Modulen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831.22 Sortieralgorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

1.22.1 Bubblesort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851.22.2 Sortier-Funktionen von Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

Page 6: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 4 Inhaltsverzeichnis

1.23 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891.24 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

Studienbrief 2 Forensische Analyse mit Python: Datenbanken und Anwendungen 932.1 Lernergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932.2 Advance Organizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932.3 Datenbanksystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

2.3.1 Normalisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952.4 Entity-Relationship-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962.5 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

2.5.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972.5.2 SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

2.6 SQLite unter Python - Das sqlite3-Modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082.7 Untersuchen von Anwendungs-Artefakten mit Python . . . . . . . . . . . . . . . . . . . . . . . 111

2.7.1 Skype Sqlite3-Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112.7.2 Skype-Datenbank-Abfragen mit Python und SQLite . . . . . . . . . . . . . . . . . . . . 1152.7.3 Firefox SQLite3-Datenbanken mit Python parsen . . . . . . . . . . . . . . . . . . . . . 1182.7.4 Firefox-Datenbank-Abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192.7.5 Chrome Sqlite3-Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222.7.6 Chrome-Datenbank-Abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

2.8 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262.9 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

Studienbrief 3 Forensische Analyse mit Python: Windows 1293.1 Lernergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293.2 Advance Organizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293.3 Windows Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

3.3.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293.3.2 Details zum Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1313.3.3 Hives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1383.3.4 SIDs, SAMs und GUIDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

3.4 Analyse der Windows-Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1423.4.1 Live Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1433.4.2 Post Mortem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

3.5 Wiederherstellung von gelöschten Dateien aus dem Windows-Papierkorb . . . . . . . . . . . . 1503.6 WLAN-Kennwörter entschlüsseln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1523.7 Metadaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

3.7.1 PDF-Metadaten mit PyPDF2 parsen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543.7.2 Exif-Metadaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1553.7.3 Generisches Metadaten-Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1613.7.4 Dateiformatsunabhängige Metadaten . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

3.8 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703.9 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

Liste der Lösungen zu den Kontrollaufgaben 173

Verzeichnisse 193I. Abbildungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193II. Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193III. Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193IV. Exkurse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194V. Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194VI. Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

Anhang 197A. Schlüsselwörter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

Stichwörter 199

Page 7: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Einleitung zu den Studienbriefen Seite 5

Einleitung zu den Studienbriefen

I. Abkürzungen der Randsymbole und Farbkodierungen

Beispiel B

Definition D

Exkurs E

Merksatz M

Quelltext Q

Übung Ü

Page 8: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 6 Einleitung zu den Studienbriefen

II. Zu den Autoren

Prof. Dr. Martin Rieger studierte Elektro- und Informationstechnik an derTechnischen Universität München und schloss an derselben Hochschule diePromotion mit Auszeichnung ab. Ein Schwerpunkt seiner Forschungsarbeit lag inder Erstellung von Methoden und Werkzeugen zur Modellierung sowie Analyseund Optimierung elektrischer Schaltungen. Er war fünf Jahre Leiter des Laborsfür schnelle Analog-ICs in der IC-Entwicklungsabteilung des Forschungs- undEntwicklungszentrums der Firma Thomson Multimedia in Villingen. In der Zeitbei Thomson Multimedia war er Erfinder bzw. Miterfinder an 15 deutschen, 12europäischen und 8 weltweiten Patenten.

Seit 1993 ist er als Professor an der Fakultät Engineering der HochschuleAlbstadt-Sigmaringen auf den Gebieten Informatik und Informationstechnik tätig.Im Labor für Eingebettete Systeme und IT-Sicherheit betreibt er anwendungsnaheForschung auf den Gebieten Embedded Systems und IT-Sicherheit. Er hatte überviele Jahre an der Hochschule Albstadt-Sigmaringen Positionen als Studiendekan,Prodekan, Prorektor und Rechenzentrumsleiter inne.

Prof. Dr. Rieger ist Initiator und Gründungs-Studiendekan des Master-Studiengangs Digitale Forensik, der in Kooperation mit der Friedrich-AlexanderUniversität Erlangen-Nürnberg und der Ludwig-Maximilians-Universität Mün-chen betrieben wird.

Er leitet das vom BMBF geförderte Zertifikatsprogramm Open-C3S, das 35Hochschul-Zertifikatsmodule auf dem Gebiet Cybersicherheit anbietet unddas kooperativ von der Hochschule Albstadt-Sigmaringen, der Friedrich-Alexander-Universität Erlangen-Nürnberg, der Freien Universität Berlin, und derLudwig-Maximilians-Universität München, getragen wird.

Patrick Eisoldt, M. Eng. hat an der Hochschule Albstadt-Sigmaringen undder Glyndwr University in Wales studiert. 2012 schloss er erfolgreich seinMasterstudium Systems Engineering ab. Im Rahmen seiner Master-Thesiskonzipierte und realisierte er einen prototypischen Editor zur Projektierung vonProzessleitsystemen der Firma Siemens nach dem Ursache-Wirkung-Prinzip. VonNovember 2010 bis August 2011 unterstützte er das Institut für WissenschaftlicheWeiterbildung bei der Erstellung von Studienbriefen für den Studiengang DigitaleForensik.

Seit 2012 ist er für das Open Competence Center for Cyber Security alsModulentwickler tätig.

David Schlichtenberger studierte Medien- und Kommunikationsinformatik an derHochschule Reutlingen. Nach seinem Masterstudium arbeitete er einige Jahre alsWebentwickler und Kundenberater für Internetservices. Seit November 2014 ist erals akademischer Mitarbeiter an der Hochschule Albstadt-Sigmaringen am Institutfür Wissenschaftliche Weiterbildung beschäftigt.

Page 9: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Modullehrziele Seite 7

III. Modullehrziele

Ziel dieses Moduls ist es, Aufgabenstellungen aus dem Umfeld der IT-Sicherheit mit Hilfe von Python-Programmen schnell und effektiv lösen zu können. In diesem Modul lernen Sie die ProgrammiersprachePython anhand von praktischen Übungen kennen. Ziel dieses Moduls ist es nicht, Vorgehensmodelle zurSoftwareentwicklung zu vermitteln, wie sie bei komplexer Software benötigt werden. Mit Python sollen Sieviel mehr in der Lage sein, kleinere überschaubare Programme zu schreiben, die schnell zu Ergebnissenführen.

Python liegt in zwei Versionen vor, die beide aktiv von Programmierern verwendet werden. Die Version 3 istmit Python 2 nicht mehr kompatibel und ist die einzige Version, die aktiv weiterentwickelt wird. In diesemModul wird weitestgehend die aktuelle Version von Python verwendet. In einigen Abschnitten wird aber aufdie Vorgängerversion zurückgegriffen, da die verwendeten Module noch nicht von den Entwicklern portiertwurden.

Neben der Programmiersprache Python wird auch das Erstellen und Verwenden von Datenbanken grund-legend erklärt. Hierfür wird das Hilfsmodul SQLite verwendet, das ein wartungsfreies Datenbanksystementhält und Teil der Python-Umgebung ist.

Der Studienbrief 1 beschäftigt sich mit den Grundlagen der Python-Programmierung, Studienbrief 2 mitDatenbanken. Studienbrief 2 schließt mit der Untersuchung von Anwendungsartefakten an den BeispielenSkype und Firefox ab.

Der Studienbrief 3 befasst sich mit dem Thema Informationsgewinnung unter forensischen Aspekten. Dievorgestellten Beispiele sollen dabei die universellen Einsatzmöglichkeiten von Python aufzeigen und zumExperimentieren einladen.

Auf diesesModul wirdmit einem Folgemodul „Python 2 – Programmieren im IT-Security-Umfeld“ aufgebaut,bei dem der Fokus auf Penetrationstests und Netzwerkforensik liegt.

Hinweise zur Typographie

Dieses Modul enthält zahlreiche Programmbeispiele, die stets in einer Monospace Schriftart gehalten sind.Zusätzlich wird zwischen Beispielen ohne gelbe Kästen und Quelltext in gelben Kästen unterschieden. DieBeispiele ohne gelbe Kästen sollen in der Python-Shell der IDLE-Umgebung (siehe Abs. 1.5) realisiert werden,Quelltexte in gelben Kästen in einer Skriptdatei (siehe Abs. 1.10). Zusätzlich können die Beispiele für dieShell an der sogenannten Prompt (>>>) erkannt werden. An einigen Stellen sind die Codezeilen zu lang,weshalb sie mit einem Backslash (\) umgebrochen wurden. Der Quellcode ist somit korrekt und kann wieabgebildet ausgeführt werden.

Warum Python?

Python ist eine interpretierte höhere Programmiersprache. Es handelt sich um eine leicht zu erlernendeProgrammiersprache, die sich durch ihren übersichtlichen und gut zu lesenden Quellcode auszeichnet.In der Python-Shell können Befehle und deren Wirkung direkt beobachtet werden. Dies erleichtert denEinstieg in das Programmieren und ermöglicht das „schnelle Ausprobieren“, ohne das Programm gleichvollständig implementieren zu müssen. Python wird oft als Skriptsprache verwendet, es unterstützt aberunterschiedliche, fundamentale Programmierstile (Programmierparadigma) und kann auch für größereProjekte eingesetzt werden. Einer der größten Stärken von Python ist die große Sammlung an standardisier-ten Programmkonstrukten (Funktionen innerhalb der Standardbibliothek), wodurch sich Python für vieleAnwendungsbereiche eignet. Die meisten Funktionen sind zudem plattformunabhängig und sind somitauf unterschiedlichen Betriebssystemen lauffähig. Die Community von Python erweitert das Einsatzgebietzusätzlich durch die unzähligen Open-Source-Projekte.

Page 10: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 8 Einleitung zu den Studienbriefen

Ende 2013 erreichte Python Spitzenwerte bei der Softwarequalität und zeichnete sich durch einen äußersthohen Reifegrad aus.1

Im Gegensatz zu den meisten verbreiteten Programmiersprachen verzichtet Python bei der Strukturierungauf eine Klammerung und begrenzt die Blöcke stattdessen durch gleiche Einrückung. Python unterstütztsowohl objektorientierte Programmierung als auch aspektorientierte oder funktionale Programmierung.Im Gegensatz zu Java, bei dem die Grunddatentypen keine Objekte sind, ist in Python alles ein Objekt,egal ob Klasse, Typ, Methode, Modul etc. Der Datentyp einer Variable wird dynamisch vergeben uns ist andas Objekt gebunden. Die verhältnismäßig wenigen Schlüsselwörter in Kombination mit der reduziertenSyntax tragen zu einem übersichtlichen Gesamtbild des Quellcodes bei. Ein Python-Programm ist oftmalskürzer als eine Implementierung in einer anderen Sprache wie C++ oder Java2, was sich positiv auf dieEntwicklungszeit auswirken kann.

Das Zen von Python

Ein offizieller Beitrag zu den Python-Verbesserungsvorschlägen (engl. Python Enhaucement Proposals, kurzPEPs) beinhaltet die Philosophie von Python und verdeutlicht anhand von 20 Aphorismen, von denen nur19 niedergeschrieben wurden, welches Konzept sich hinter der Programmiersprache verbirgt.3

Diese Leitgedanken werden auch als „das Zen von Python“ bezeichnet:

Schön ist besser als hässlich.Explizit ist besser als implizit.Einfach ist besser als kompliziert.Kompliziert ist besser als undurchschaubar.Flach ist besser als verschachelt.Spärlich ist besser als beschränkt.Lesbarkeit zählt.Spezialfälle sind nicht spezial genug, als dass sie die Regeln sprengen dürften.Obwohl die praktische Anwendbarkeit die Reinheit übertrifft.Fehler sollten nie schweigend verlaufen.Außer man hat sie explizit zum Schweigen gebracht.Im Angesicht der Mehrdeutigkeit, widersage der Versuchung zu raten.Es sollten einen — und bevorzugt genau einen — offensichtlichen Weg geben, es zu tun.Obwohl dieser Weg auf den ersten Blick nicht offensichtlich erscheinen mag, außer man ist Holländer.Jetzt ist besser als nie.Obwohl nie oft besser ist als JETZT SOFORT.Wenn die Implementierung schwer zu erklären ist, ist es eine schlechte Idee.Wenn die Implementierung einfach zu erklären ist, könnte es eine gute Idee sein.Namensräume sind eine glänzende Idee — lasst uns mehr davon tun!

Obwohl die Formulierung scherzhaft ist und sich die Aufzählung als Easter Egg in der Python-Umgebungwiederfindet (import this), sind diese Aphorismen durchaus ernst gemeint und spiegeln sich bereits beiden einfachsten Programmen wieder. Hierfür werden in den Programmiersprachen Python, C++ und Javadie Quelltexte für ein Hallo-Welt-Programm verglichen. Hierbei handelt es sich um ein Computerprogramm,dass auf einfachste Weise veranschaulicht, welche Bestandteile für ein lauffähiges Programm in einer Pro-grammiersprache benötigt werden.

QQuelltext 1: Hallo-Welt in Python

1 print("Hallo Welt!")

1 http://heise.de/-1948541 [Stand: 25.1.2017]2 http://www.python.org/doc/essays/comparisons/ [Stand: 25.1.2017]3 https://www.python.org/dev/peps/pep-0020/ [Stand: 25.1.2017]

Page 11: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Modullehrziele Seite 9

QQuelltext 2: Hallo-Welt in C++

1 #include <iostream>23 int main () {4 std::cout << "Hallo Welt!\n";5 }

QQuelltext 3: Hallo-Welt in Java

1 public class HalloWelt2 {3 public static void main(String[] args)4 {5 System.out.println("Hallo Welt!");6 }7 }

Alle drei Programme würden beim Ausführen den gleichen Text an die Standardausgabe senden. Folglichwürde der Text „Hallo Welt!“ auf dem Bildschirm erscheinen. Python benötigt hierfür, im Gegensatz zu denanderen Programmiersprachen, nur eine Zeile und verdeutlicht bereits damit eine Vielzahl der Leitgedanken.Das Programm ist auf das Wesentliche reduziert und enthält keine unnötigen und verwirrenden Bestandteile.Selbst ohne Programmierkenntnisse kann man verstehen, dass etwas ausgedruckt oder ausgegeben wird(print) und die Worte „Hallo Welt“ in irgend einem Verhältnis () zu print stehen.

Page 12: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik
Page 13: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Studienbrief 1 Einführung in Python Seite 11

Studienbrief 1 Einführung in Python

1.1 Lernergebnisse

Nach Abschluss dieses Studienbriefes sind Sie mit der Python-Shell vertraut undkönnen mit Hilfe von Modulen aus der Standardbibliothek einfache Programmeerstellen. Sie können die Begrifflichkeiten der objektorientierten Programmierungeinordnen und können die wichtigsten Konzepte aufzählen. Mit dem Wissen überdas Erstellen von eigenen Funktionen können Sie nicht nur auf die Funktionenvon Modulen zurückgreifen, sondern darüber hinaus auch Ihr Programm bes-ser strukturieren. Sie sind mit den Standarddatentypen in Python vertraut undkönnen differenzieren, wann Sie welchen Datentyp verwenden sollen und wiesie eine Typumwandlung vornehmen. Zudem können Sie Skriptdateien erstellenund mithilfe von Kontrollstrukturen auch komplexere Programme erstellen. Hier-bei unterstützt Sie auch das Wissen, wie ein Textmenü erstellt werden kann undKommandozeilenparameter entgegengenommen werden. Innerhalb der Sortieral-gorithmen sind Ihnen Bubblesort und Timsort bekannt, wobei Sie mit Bubblesorteinen Sortieralgorithmus im Detail verstanden haben und mit Timsort einen ef-fektiven Sortieralgorithmus kennen und zudem Aussagen zur Effizienz treffenkönnen.

1.2 Advance Organizer

Skriptsprachen eignen sich besonders gut für schnelle Ad-hoc-Lösungen. Durch dieKenntnisse im Umgang mit Python ist es somit beispielsweise möglich, Aufgabenmit sich wiederholendem Ablauf zu automatisieren. Sie können zudem vieleProgrammierkonstrukte von Python auf andere Programmiersprachen übertragen,was das Verstehen und Erlernen von weiteren Programmiersprachen erheblichfördert.

1.3 Grundlagen

Das Modul ist sehr praxisorientiert und soll einen schnellen Einstieg in die Pro-grammierung bieten. Dennoch werden in diesem Abschnitt einige Grundlagenvermittelt, die für das Verständnis des Moduls bzw. Programmieren im Allgemei-nen unerlässlich sind.

1.3.1 Programmieren

Beim Programmieren geht es um das Formulieren eines Algorithmus’ in einer Pro-grammiersprache. Somit kann die Programmiersprache als Schnittstelle zwischendem Menschen und einem Computer verstanden werden.

DDefinition 1.1: Algorithmus

Ein Algorithmus ist eine eindeutige, ausführbare Folge von Anweisungenendlicher Länge zur Lösung eines Problems. Ein Algorithmus besteht auseinem Deklarationsteil, der definiert was benötigt wird, und einem Anwei-sungsteil, der beschreibt wie das Problem gelöst wird.

Entscheidend für das Erlernen einer Programmiersprache ist das Denken in Struk-turen und Algorithmen. Eine komplexe Aufgabenstellung muss in kleinere Teil-probleme aufgeteilt und diese wiederum durch Algorithmen gelöst werden.

Page 14: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Studienbrief 2 ForensischeAnalysemit Python:DatenbankenundAnwendungen Seite 93

Studienbrief 2 Forensische Analyse mit Python:Datenbanken und Anwendungen

2.1 Lernergebnisse

Sie können Informationen als Datensatz abbilden und diese logisch in Tabellenunterteilen. Sie sind imstande, einfache Datenbanken zu entwerfen und dabei dieRegel der 1. Normalform zu beachten. Hierfür verwenden Sie das Ihnen bekann-te ER-Modell nach der Chan-Notation. Da Sie mit der Datenbanksprache SQLvertraut sind, sind Sie nach kurzer Einarbeitungszeit in der Lage die Datenbankmit einer beliebigen Datenbank-Software umzusetzen. Durch diesen Studienbriefsind Sie im speziellen mit der Programmbibliothek „sqlite3“ vertraut. Mit derUntersuchung von Anwendungs-Artefakten in Python haben Sie den Aufbauder Skype-, Chrome- und Firefox-Datenbank verstanden und können hier gezieltInformationen extrahieren.

2.2 Advance Organizer

Bei der alltäglichen Arbeit am Rechner kommt man unbewusst vielfach mit Da-tenbanken in Berührung. Viele Anwendungen, wie Internet-Browser oder Chat-programme, verwenden Datenbanken. Auch Webseiten, die mit einem Inhaltsver-waltungssystem (z. B. Joomla, TYPO3 oder WordPress) arbeiten, verwenden diese,um den eigentlichen Inhalt zu speichern. Diese Datenbanken können vor allembei Anwendungen mit geringem Arbeitsaufwand ausgelesen werden und zumBeispiel nach konkreten Inhalten untersucht werden.

2.3 Datenbanksystem

Ein Datenbanksystem (DBS) ist ein System zum Speichern und Verwalten vonmeist großen Datenmengen. Ein DBS besteht aus einer Verwaltungssoftware, demDatenbankmanagementsystem (DBMS) und den zu verwaltenden Daten, die alsDatenbank bezeichnet werden.

Die Art und Weise, wie ein Datenbanksystem abgebildet wird, bezeichnet man alsDatenbankmodell. Ein etablierter Standard ist hierbei die relationale Datenbank.Dabei handelt es sich um eine Sammlung von logisch zusammenhängenden Tabel-len. Jede Zeile (Tupel) einer Tabelle ist ein Datensatz (record), wobei die Spaltendie Eigenschaften (Attribute) der Tupel beschreiben.

BBeispiel 2.1: Relation „Buch“

Ein Buch in einer Bibliothek soll durch einen Datensatz beschrieben werden.Der Datensatz besteht aus folgenden Attributen:

• Buch-ID

• Autor

• Titel

• Verlag

• Verlagsjahr

Um einen Datensatz eindeutig identifizieren zu können, wird ein (odermehrere) Schlüssel (key) benötigt. Ein Schlüssel hat eine unveränderliche

Page 15: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Studienbrief 3 Forensische Analyse mit Python: Windows Seite 129

Studienbrief 3 Forensische Analyse mit Python: Windows

3.1 Lernergebnisse

Sie können den Aufbau der Windows-Registry beschreiben und den Registry-Schlüssel zu gesuchten Informationen bestimmen und auswerten. DieHauptschlüs-sel der Registry und deren Inhalt können Sie erläutern. Sie können die Aufgabevon SIDs, SAMs und GUIDs beschreiben und damit verbundene Informationenzuordnen. Bei einem Live System können Sie die Werte der Registry über dasPython-Modul winreg extrahieren. Zudem ist es Ihnen möglich aus sichergestell-ten Hive-Dateien Informationen mit dem Modul python-registry zu gewinnen.Sie sind mit Python in der Lage gelöschte Dateien aus dem Papierkorb wiederher-zustellen und gespeicherte WLAN-Kennwörter zu entschlüsseln. Ihr Wissen überdieWindows-Forensik umfasst zudem das Parsen vonMetadaten bei PDFs, Bildda-teien, Word-Dokumenten und Torrent-Dateien sowie dateiformatsunabhängigenMetadaten.

3.2 Advance Organizer

Die Registry wird als „Goldgrube“ für forensisch interessante Spuren in Windows-Clients bezeichnet, weil sie von vielen Nutzeraktivitäten umfassende Spuren ent-hält. Dieser Studienbrief soll Ihnen als Leitfaden für die forensische Nutzung derWindows-Registry dienen und Ihnen einen Einblick in die Struktur und derenBesonderheiten verschaffen.

3.3 Windows Registry

Die Registry gibt es seit der Betriebssystemversion Windows 95. Sie ist als zentrale,hierarchisch organisierte Datenbank angelegt. Ihre binäre Form ermöglicht einenschnelle konvertierungsfreie Verarbeitung, die durch die Transaktionsüberstüt-zung ganz oder gar nicht durchgeführt werden. Die Registry ist eine unverzichtbareQuelle für Forensiker, denn sie enthält wichtige Informationen über die System-konfigurationen, die Benutzerprofile und -aktivitäten, die installierten Programmeund deren Ausführungen sowie über Hard- und Software-Komponenten des Rech-nersystems.

3.3.1 Einführung

Die Registry bildet ein baumartiges, hierarchisch aufgebautes System, ähnlichwie Dateien und Ordner. In der Registry werden die Informationsbehälter als„Schlüssel“ (HKEY) bezeichnet. Diese sind den Dateiordnern ähnlich. Schlüsselkönnen Unterschlüssel (KEY) haben, genauwie Ordner Unterordner haben können(vgl. Abb. 3.1). Die Daten, die in einem Schlüssel enthalten sind, werden als „Wert“bezeichnet und sind vergleichbar zu Dateinamen. Die eigentlichen Daten könnenunterschiedliche Formate (z. B. Zeile, Zahl oder Zahlenfolge) haben.

Page 16: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 170 Studienbrief 3 Forensische Analyse mit Python: Windows

selbst erst am 11. März 2015 auf dem Datenträger kopiert wurde. Seit Erstellungfolgten keine Änderungen an der Datei. Das Änderungsdatum wurde von derDatei selbst übernommen.

K Kontrollaufgabe 3.17

Gegeben sei ein Computer mit Windows 7 und zwei Datenträger. Diese sindjeweils mit dem NTFS-Dateisystem formatiert.

Welche der untenstehenden Ereignisse wirken sich auf welche Zeitstempelaus?

• Eine Datei wird von Datenträger 1 auf Datenträger 2 kopiert.

• Eine Datei wird von Datenträger 1 auf Datenträger 2 verschoben.

• Eine Textdatei mit dem Inhalt „Hallo“ wird mit dem selben Inhaltüberschrieben.

• Eine ausführbare Datei wird mittels Doppelklick ausgeführt.

3.8 Zusammenfassung

Die Windows-Registry ist eine hierarchische Datenbank und dient als zentraleInstanz aller Konfigurationen. In der Registry sind zum Beispiel die physikali-schen Adressen hinterlegt, mit denen sich der Rechner über WLAN verbundenhat. Als weiteres Beispiel für die Einträge in der Registry können die Windows-Benutzernamen genannt werden. Mit dem Modul winreg lassen sich diese Infor-mationen auslesen.

Metadaten sind optionale Informationen, die für den Anwender nicht direkt sicht-bar sind. Die Metadaten eines PDFs enthalten zum Beispiel Informationen überden Autor. Exif ist ein Standard für Metadaten von JPEG- und TIFF-Bildern. DerUmfang der Exif-Daten variiert stark und hat abhängig von der verwendetenHardware und den Einstellungen einen hohen Informationsgehalt. So verfügendie meisten Smartphones über die Möglichkeit, bei Bildern die GPS-Koordinatenals Metadaten zu hinterlegen. Die Metadaten können über externe Module derPython-Community ausgelesen werden.

Beautiful Soup ermöglicht das Parsen vonHTML- undXML-Dokumenten. In diesemStudienbrief wurde gezeigt, wie alle Bilder einer Seite mit Beautiful Soup herausge-filtert und heruntergeladen werden können und wie diese Bilder anschließend aufGPS-Koordinaten untersucht werden können.

3.9 Übungen

ÜÜbung 3.1

Xpdf29 stellt unter anderem das Programm pdftotext.exe bereit, das einePDF-Datei in eine Textdatei umwandeln kann. Es gibt auch Python-Module,die das Umwandeln von PDFs in Textdateien beherrschen, diese sind aberlaut Entwickler umdas 20-fache langsamer30. Erstellen Sie ein Python-Skript,das unter Verwendung von pdftotext eine PDF-Datei konvertiert.

Page 17: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

3.9 Übungen Seite 171

ÜÜbung 3.2

Ergänzen Sie das Skript aus Übung 3.1. Das Skript soll ein Durchsuchender erstellten TXT-Datei nach einem bestimmten Suchbegriff ermöglichen.Versuchen Sie eine Lösung zu realisieren, die die Zeilen ausgibt, in der sichder Suchbegriff befindet. Alternativ genügt eine Meldung über die Anzahlder gefundenen Treffer. Der Name der zu konvertierenden PDF-Datei sowieder Suchbegriff sollen als Parameter an das Skript übergeben werden.

ÜÜbung 3.3: Registry

Erstellen sie ein Python-Skript, dass vollständig durch die Baumstruktureiner sichergestellten Hive-Datei (Post-Mortem-Analyse) iteriert und dabeidie (Unter-)Schlüssel (1) sowie die Bezeichner (2) und die Daten (3) derSchlüsselwerte nach einem String durchsucht, der dem Skript als Argumentübergeben wird.

1)

2) 3)

ÜÜbung 3.4: WLAN-Schlüssel

Erstellen Sie ein Python-Skript, dass alle Dateien in den VerzeichnissenC:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\[GUID] analy-siert und die SSIDs sowie Kennwörter in Klartext auf der Konsole ausgibt.

29 http://www.foolabs.com/xpdf/download.html [Stand: 25.1.2017]30 http://www.unixuser.org/~euske/python/pdfminer/ [Stand: 25.1.2017]

Page 18: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik
Page 19: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Liste der Lösungen zu den Kontrollaufgaben Seite 173

Liste der Lösungen zu den Kontrollaufgaben

Lösung zu Kontrollaufgabe 1.1 auf Seite 19

>>> 1 + \... 23

Lösung zu Kontrollaufgabe 1.2 auf Seite 19

>>> 1+23>>> 1-2-1>>> 1*22>>> 1/20.5>>> 5%21>>> 5//22>>> 2**38>>> +11>>> -1-1

Lösung zu Kontrollaufgabe 1.3 auf Seite 23

>>> import math>>> def kugel_volumen(radius):

volumen = 4/3*math.pi*radius**3return volumen

>>> volumen = kugel_volumen(5)>>> volumen523.5987755982989

Lösung zu Kontrollaufgabe 1.4 auf Seite 24

Bei der Variable a handelt es sich um die Ganzzahl 1 und bei c um die Gleitkomma-zahl 1. Der Vergleichsoperator == liefert als Ergebnis True da die Variablen dennochden gleich Wert haben (ähnlich wie 1 Euro entspricht 1,00 Euro). Dennoch handeltes sich bei den Variablen um unterschiedliche Objekte, da sonst die Informationum welchen Datentyp es sich jeweils handelt verloren gehen würde.

Lösung zu Kontrollaufgabe 1.5 auf Seite 25

Gültige Variablennamen sind: __init__, x, bäm, var2Ungültige Variablennamen sind: 1_variable, None

Page 20: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 174 Liste der Lösungen zu den Kontrollaufgaben

>>> 1_variable = 1File "<stdin>", line 11_variable = 1

^SyntaxError: invalid syntax>>> __init__ = 2>>> __init__

2>>> None = 4

File "<stdin>", line 1SyntaxError: assignment to keyword>>> x = 4>>> x4>>> bäm = 3>>> bäm3>>> var2 = 2>>> 22>>>

Lösung zu Kontrollaufgabe 1.6 auf Seite 27

Das vollständige Importieren eines Moduls trägt zu einem schlecht lesbaren Codebei, da nicht ersichtlich ist, welche Teile des Moduls für das Programm relevantsind. Das vollständige Importieren erleichtert vor allem im interaktiven Modusdie Arbeit.

Lösung zu Kontrollaufgabe 1.7 auf Seite 28

>>> pi = 3.14>>> from math import *>>> pi3.141592653589793

Lösung zu Kontrollaufgabe 1.8 auf Seite 29

def funktion(x = 1, y = 10):print(x)print()

Lösung zu Kontrollaufgabe 1.9 auf Seite 31

>>> funktion(x)x hat den Wert 2

Lösung zu Kontrollaufgabe 1.10 auf Seite 38

>>> 'Hallo Welt'[2]'l'>>> 'hallo'+' welt'

Page 21: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Liste der Lösungen zu den Kontrollaufgaben Seite 175

'hallo welt'>>> 3*'hallo''hallohallohallo'>>> len('hallo')5

Lösung zu Kontrollaufgabe 1.11 auf Seite 40

>>> (1, 2, 3)[1]2>>> (1, 2, 3)+(4, 5)(1, 2, 3, 4, 5)>>> 2*(1, 2, 3)(1, 2, 3, 1, 2, 3)>>> len((0, 1, 2))3

Lösung zu Kontrollaufgabe 1.12 auf Seite 41

>>> ['Musterman','Max','Hauptstr. 6',12345,43]['Musterman', 'Max', 'Hauptstr. 6', 12345, 43]>>> 2*['Musterman','Max','Hauptstr. 6',12345,43]['Musterman', 'Max', 'Hauptstr. 6', 12345, 43,'Musterman', 'Max', 'Hauptstr. 6', 12345, 43]>>> ['Musterman','Max','Hauptstr. 6',12345,43][2]'Hauptstr. 6'>>> len(['Musterman','Max','Hauptstr. 6',12345,43])5

Lösung zu Kontrollaufgabe 1.13 auf Seite 41

>>> liste = ['a', 'b', 'b', 2, 3, 1, '1a']>>> liste.count('a')1>>> liste.pop()'1a'>>> liste.remove(2)>>> liste[3] = None>>> liste['a', 'b', 'b', None, 1]>>> del liste[3:4]>>> liste.reverse()>>> liste[1, 'b', 'b', 'a']

Lösung zu Kontrollaufgabe 1.14 auf Seite 42

>>> menge = set("cba")>>> menge.add("d")>>> menge{'c', 'a', 'd', 'b'}

Page 22: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 176 Liste der Lösungen zu den Kontrollaufgaben

Lösung zu Kontrollaufgabe 1.15 auf Seite 42

>>> {"Deutsch": "deutsch", "Schweiz": "deutsch", "Spanien":"spanisch"}{'Spanien': 'spanisch', 'Schweiz': 'deutsch', 'Deutsch': 'deutsch'}>>> {"Apfel":"apple", "Tisch":"table"}{'Apfel': 'apple', 'Tisch': 'table'}>>> {"Balingen":[48.26652, 8.84941], "Albstadt":[48.26652, 8.84941]}{'Albstadt': [48.26652, 8.84941], 'Balingen': [48.26652, 8.84941]}

Lösung zu Kontrollaufgabe 1.16 auf Seite 45

from math import pi

def quader_volumen(kanten):if kanten[0] == kanten [1] == kanten[2]:

print("Hierbei handelt es sich um einen Würfel")v = kanten[0]*kanten[1]*kanten[2]return v

def kugel_volumen(radius):volumen = 4/3*math.pi*radius**3return volumen

Lösung zu Kontrollaufgabe 1.17 auf Seite 46

eingabe = input('Geben Sie eine Zahl ein: ')zahl1 = int(eingabe)print('Die Quadratzahl von '+eingabe+' lautet: '+str(zahl1**2))

Page 23: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Liste der Lösungen zu den Kontrollaufgaben Seite 177

Lösung zu Kontrollaufgabe 1.18 auf Seite 50

QQuelltext 3.18

1 alter = int(input("Alter: "))23 a16 = ["AM", "A1"]4 a17 = ["B", "BE"]5 a18 = ["A2", "B1", "C1", "C1E", "CE"]6 a20 = ["A"]7 a21 = ["C", "D1", "D1E"]8 a24 = ["D", "DE"]9

10 if alter >= 24:11 print(a16+a17+a18+a20+a21+a24)1213 elif alter >= 21:14 print(a16+a17+a18+a20+a21)1516 elif alter >=20:17 print(a16+a17+a18+a20)1819 elif alter >= 18:20 print(a16+a17+a18)2122 elif alter >= 17:23 print(a16+a17)2425 elif alter >= 16:26 print(a16)2728 else:29 print("Fahrrad")

Lösung zu Kontrollaufgabe 1.19 auf Seite 52

>>> for i in range(1600,2015,4):if i % 100 != 0 or i % 400 == 0:print(i)

Lösung zu Kontrollaufgabe 1.20 auf Seite 52

QQuelltext 3.19

1 eingabe = input('Geben Sie eine Zahl ein: ')2 try:3 zahl1 = int(eingabe)4 except ValueError:5 print("Hierbei handelt es sich um keine Zahl")6 except:7 print("Unbekannter Fehler")

Page 24: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 178 Liste der Lösungen zu den Kontrollaufgaben

Lösung zu Kontrollaufgabe 1.21 auf Seite 57

import math

kanten = [3,3,3]radius = 3

def quader_volumen():if kanten[0] == kanten [1] == kanten[2]:

print("Hierbei handelt es sich um einen Würfel")v = kanten[0]*kanten[1]*kanten[2]return v

def kugel_volumen():volumen = 4/3*math.pi*radius**3return volumen

def quit():print("Beende das Programm")raise SystemExit

def handle_menu(menu):while True:

for index, item in enumerate(menu, 1):print("{} {}".format(index, item[0]))

choice = int(input("Ihre Wahl? ")) - 1if 0 <= choice < len(menu):

print(menu[choice][1]())else:

print("Bitte nur Zahlen im Bereich 1 - {}\eingeben".format(len(menu)))

menu = [["Quadervolumen", quader_volumen],["Kugelvolumen", kugel_volumen],["Beenden", quit]]

handle_menu(menu)

Eine vollständige Lösung:

import math

def quader_masse():kanten = []for i in range(3):

kanten.append(int(input("Kantenlaenge eingeben: ")))print(quader_volumen(kanten))

def quader_volumen(kanten):if kanten[0] == kanten [1] == kanten[2]:

print("Hierbei handelt es sich um einen Würfel")v = kanten[0]*kanten[1]*kanten[2]return v

def kugel_masse():

Page 25: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Liste der Lösungen zu den Kontrollaufgaben Seite 179

radius = int(input("Radius eingeben: "))print(kugel_volumen(radius))

def kugel_volumen(radius):volumen = 4/3*math.pi*radius**3return volumen

def quit():print("Beende das Programm")raise SystemExit

def handle_menu(menu):while True:

for index, item in enumerate(menu, 1):print("{} {}".format(index, item[0]))

choice = int(input("Ihre Wahl? ")) - 1if 0 <= choice < len(menu):

menu[choice][1]()else:

print("Bitte nur Zahlen im Bereich 1 - {}eingeben".format(len(menu)))

menu = [["Quadervolumen", quader_masse],["Kugelvolumen", kugel_masse],["Beenden", quit]]

handle_menu(menu)

Lösung zu Kontrollaufgabe 1.22 auf Seite 61

Max [a-zA-Z. ]*Mustermann;\d{5};\d{3}.\d{3}.\d{3}.\d{3};[\dA-Fa-f][\dA-Fa-f]([-: ]?[[0-9]A-Fa-f]{2}){5};([01]?[0-9]|2[0-3]):([0-5]?[0-9])

Lösung zu Kontrollaufgabe 1.23 auf Seite 65

Die Variante (.*?) findet möglichst wenig Text, während (.*) möglichst lange Fund-stellen findet.

Lösung zu Kontrollaufgabe 1.24 auf Seite 68

import argparsefrom math import sqrt

parser = argparse.ArgumentParser()parser.add_argument("sqrt","Berechnet die Wurzel der übergebenen Zahl", type=int)args = parser.parse_args()print(sqrt(args.sqrt))

Lösung zu Kontrollaufgabe 1.25 auf Seite 71

print("i\n=====")

Page 26: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 180 Liste der Lösungen zu den Kontrollaufgaben

for i in range(1,10,2):print(i)

print("j\n=====")j=0while j < 100:

j+=1

if j%5 == 0:print(j)

else:pass

Lösung zu Kontrollaufgabe 1.26 auf Seite 73

Nein.

>>> keyword.iskeyword("other")False>>> keyword.iskeyword("self")False

Lösung zu Kontrollaufgabe 1.27 auf Seite 73

def __ne__(self, other):return self.checksum != other.checksum

Lösung zu Kontrollaufgabe 1.28 auf Seite 75

Die Entropie liegt in der Regel mit einem Wert von größer 8 sehr hoch. Bei Bildernmit einemWert zwischen 8 und 10 ist eine Unterscheidung nur schwer möglich.Mit der Entropie lassen sich aber problemlos Bilder mit wenigen Farben (z. B.Webseitenelemente) von Fotografien unterscheiden. Eine Staffelung der Bilderanhand der Entropie wäre sinnvoll.

Lösung zu Kontrollaufgabe 1.29 auf Seite 82

Ohne Darstellung

Lösung zu Kontrollaufgabe 1.30 auf Seite 82

Ohne Darstellung.

Lösung zu Kontrollaufgabe 1.31 auf Seite 83

#https://pypi.python.org/pypi/hsaudiotag3k#downloadsfrom hsaudiotag import auto

class Audio(File):

def __init__(self, filename, filepath):File.__init__(self, filename, filepath)self.audio = auto.File(self.filepath+'\\'+self.filename)self.artist = self.audio.artist

Page 27: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Liste der Lösungen zu den Kontrollaufgaben Seite 181

self.album = self.audio.album

def getall(self):return

Lösung zu Kontrollaufgabe 1.32 auf Seite 86

def bubblesort(a):for j in range(len(a) - 1):

swapped = Falsefor i in range(len(a) - j - 1):

if a[i] > a[i+1]:a[i], a[i+1] = a[i+1], a[i]swapped = True

if swapped == False:break

return a

a = [9,3,0,6,2,1,8,7,4,5]print("Unsortiert: ", a)

result = bubblesort(a)print("Sortiert : ", result)

Lösung zu Kontrollaufgabe 2.1 auf Seite 96

Relation „Buch“

ID Autor Titel Verlags-ID Verlags-jahr

1 MichaelWeigend

Objektorientierte Pro-grammierung mitPython 3

1 2010

2 JohannesErnesti& PeterKaiser

Python 3 - Das umfas-sende Handbuch

2 2012

3 RonnyRitschel

Langzeitbelichtungund Nachtfotografie

1 2012

Relation „Verlag“

ID Verlag

1 mitp

2 Galileo Computing

Lösung zu Kontrollaufgabe 2.2 auf Seite 97

„Kunde entleiht eBook“ kann als n:m-Beziehung realisiert werden. Wenn man Kun-den unterschiedlich einstuft, wäre „Kunde ist Premium-Kunde“ eine 1:1-Beziehung.

Page 28: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 182 Liste der Lösungen zu den Kontrollaufgaben

Voraussetzung hierfür wäre natürlich, dass die Angaben für Premium-Kunden(z. B. Umfang der Leistung) in einer gesonderten Tabelle erfasst werden und nichtTeil der Tabelle „Kunde“ sind.

Lösung zu Kontrollaufgabe 2.3 auf Seite 97

Dozent

Personal-Nr.

liest

Vorname

Nachname

Titel

Wochentag

1 n

Raum Stunde

Vorlesung

Student

Mat-Nr.

Vorname

Nachname

m

hört

Lösung zu Kontrollaufgabe 2.4 auf Seite 100

Tom O””Neill

Lösung zu Kontrollaufgabe 2.5 auf Seite 101

Dazu muss die sqlite3.exe mittels Doppelklick geöffnet werden und im An-schluss der Befehl .open hellodatabase.db eingegeben werden. Im Verzeichnisder sqlite3.exe sollte sich nun eine Datei namens hellodatabase.db befinden.

Zur Speicherungen von Datenbanken im Arbeitsspeicher kann der .save-Befehlverwendet werden.

Lösung zu Kontrollaufgabe 2.6 auf Seite 103

Erstellen der Tabelle „user“ und Erzeugung des Index:

sqlite> CREATE TABLE user (id integer PRIMARY KEY, surname TEXT,lastname TEXT, yearofbirth NUMERIC);

sqlite> CREATE INDEX lastname ON user(lastname)

Die Spalte „id“ ist gleichzeitig der Primärschlüssel um einen Datensatz eindeutigzu identifizieren. Datentypen haben in SQLite eine eher untergeordnete Rolle,da jedes Feld prinzipiell den Inhalt jedes Datentyps annehmen kann. Dennochist empfohlen Datentypen für die Felder zu defineiren, da je nach Datentyp einespezifische Speicherklasse verwendet wird. Beispielsweise wird eine Zahl in Textkonvertiert, wenn diese in ein Feld vom Datentyp „TEXT“ eingefügt wird.

Page 29: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Liste der Lösungen zu den Kontrollaufgaben Seite 183

Zudem gibt es im Vergleich zu anderen DBMS (z.B. MySQL) auch nicht die Not-wendigkeit Längenangaben für Felder zu definieren. Prinzipiell kann eine Feldjeglichen verfügbaren Speicherplatz ausnutzen.

Eine gute Hilfestellung zu den Datentypen und deren Verwendung bietet dieSQLite-Referenz31

Als INDEXwurde „lastname“ gewählt. Prinzipiell sind jedoch auch noch weitereIndizes sinnvoll.

Lösung zu Kontrollaufgabe 2.7 auf Seite 103

sqlite> ALTER TABLE user ADD COLUMN password TEXT;

Lösung zu Kontrollaufgabe 2.8 auf Seite 104

sqlite> insert into buch (id,autor,titel,verlag,verlagsjahr) values(1,'Michael Weigend', 'Objektorientierte Programmierung mit Python 3','mitp', 2010);

sqlite> insert into buch (id,autor,titel,verlag,verlagsjahr) values(2,'Johannes Ernesti & Peter Kaiser','Python 3 - Das umfassende Handbuch', 'Galileo Computing', 2012);sqlite> insert into buch (id,autor,titel,verlag,verlagsjahr) values(3,'Ronny Ritschel', 'Langzeitbelichtung und Nachtfotografie', 'mitp',2012);

Lösung zu Kontrollaufgabe 2.9 auf Seite 104

Wie bereits erwähnt, kann über den primären Schlüssel ein Datensatz eindeutigidentifiziert werden. Folglich könnte die Änderungwie folgt durchgeführt werden:update kunde set nachname='Schmid' where nachname='Schmidt' and id=10;

Lösung zu Kontrollaufgabe 2.10 auf Seite 105

sqlite> create view asdf as select * from kunde;sqlite> select * from asdf;10|Otto|Schmidt11|Tim|Tintin

Lösung zu Kontrollaufgabe 2.11 auf Seite 107

sqlite> select * from buch where titel like '%python%';1|Michael Weigend|Objektorientierte Programmierung mit Python 3...2|Johannes Ernesti & Peter Kaiser|Python 3 - Das umfassende Han...

Lösung zu Kontrollaufgabe 2.12 auf Seite 109

Lösung siehe Kapitel 2.6.

31 http://www.sqlite.org/datatype3.html [Stand: 25.1.2017]

Page 30: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 184 Liste der Lösungen zu den Kontrollaufgaben

Lösung zu Kontrollaufgabe 2.13 auf Seite 111

import sqlite3

conn = sqlite3.connect('bib.db')c = conn.cursor()

buecher = [(1,'Michael Weigend','Objektorientierte Programmierung mit Python 3', 'mitp', 2010),(2,'Johannes Ernesti & Peter Kaiser','Python 3 - Das umfassende Handbuch', 'Galileo Computing', 2012),(3,'Ronny Ritschel', 'Langzeitbelichtung und Nachtfotografie','mitp', 2012)]

kunden = [(10, 'Otto', 'Schmidt'),(11, 'Tim', 'Tintin')]

entliehen = [(11, 1, '2014-01-31')]

print_all =("SELECT * FROM buch","SELECT * FROM kunde","SELECT * FROM entliehen")

def insert_into(sql, tupel_liste):for i in range(len(tupel_liste)):

c.execute(sql,tupel_liste[i])

try:c.execute('''CREATE TABLE buch (buchid integer primary key,\

autor text, titel text, verlag text, verlagsjahr text);''')c.execute('''CREATE TABLE kunde(kundennr integer primary key,\

vorname text, nachname text);''')c.execute('''CREATE TABLE entliehen(kundennr integer, buchid integer,\

abgabedatum text, PRIMARY KEY(kundennr, buchid))''')insert_into("INSERT INTO buch VALUES (?,?,?,?,?)", buecher)insert_into("INSERT INTO kunde VALUES (?,?,?)", kunden)insert_into("INSERT INTO entliehen VALUES (?,?,?)", entliehen)

for j in range(len(print_all)):c.execute(print_all[j])print(c.fetchall())

finally:conn.commit()conn.close()

Lösung zu Kontrollaufgabe 2.14 auf Seite 115

Lösungen siehe untenstehend:

1. SELECT skypename,fullname FROM Accounts;2. SELECT author,body_xml FROM Messages WHERE body_xml IS NOTNULL LIMIT 0,100;3. SELECT IDENTITY,dispname,strftime('%d.%m.%Y %H:%M:%S',creation_timestamp,'unixepoch', 'localtime') as "Startzeit" FROM CallMembers;

Page 31: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Liste der Lösungen zu den Kontrollaufgaben Seite 185

Lösung zu Kontrollaufgabe 2.15 auf Seite 117

Ja, hierbei handelt es sich um einen impliziten Join.

Lösung zu Kontrollaufgabe 2.16 auf Seite 117

Aus der Skype-Datenbank werden aus der Tabelle „Transfers“ alle Datensätzeausgelesen, deren Feld Dateiname (filename) gefüllt ist. Falls ein Dateipfad (fi-lepath) vorhanden ist, handelt es sich dabei um eine gesendete Datei. Anhanddes Dateipfads kann mittels Python (z.B. os.path.exists(file_path)) überprüftwerden, ob diese Datei auf dem Rechner existiert. Mittels der gesammelten Infor-mationen kann in Python nun eine Liste mit den Dateinamen erstellt werden undden Attributen „sendOrReceived“ bzw. „existsOnDisk“.

Lösung zu Kontrollaufgabe 2.17 auf Seite 121

In aktuellen Firefox-Versionen befindet sich die Download-History in der SQLite-Datenbank „places.sqlite“ und der Tabelle „moz_annos“. Die wichtigsten Informa-tionen sind in Abbildung 12 markiert.

Abb. 12: Felder derTabelle „moz_annos“

Lösung zu Kontrollaufgabe 2.18 auf Seite 121

Eine gesicherte SSL-Verbindung sichert die vollständige TCP-Datenverbindung.Die URL selbst (inkl. aller vorhandenen Parameter) werden weiterhin verschlüsseltübertragen. Sensitive Informationen sollten dennoch nicht in der URL übertragenwerden, da diese i.d.R. z.B. im Klartext in den Logdateien der Betreiber gespeichertwerden. Jedoch hat eine Besucher auf die Verfahrensweise keinen Einfluss, sondernlediglich der Betreiber der Webanwendung.

Fakt ist, dass der GET-Parameter im Browserverlauf (mit oder ohne SSL-Verschlüsselung) zumindest auf dem PC des Benutzers gespeichert wird.

Lösung zu Kontrollaufgabe 2.19 auf Seite 126

• args_parser: Definiert verfügbare Argumente und nimmt eine Ablaufsteue-rung vor.

• main: Stellt die Verbindung zur SQLite-Datenbank her und liest die Zugangs-daten aus. Falls Zugangsdaten vorhanden sind werden diese mittels derFunktion CryptUnprotectData entschlüsselt.

• csv: Schreibt / exportiert die Zugangsdaten in eine CSV-Datei namenschromepass.csv.

Das Programm kann ohne Argumente aufgerufen werden. In diesem Fall wird eineListe mit den Zugangsdaten direkt ausgegeben. Falls das Programmmit -outputaufgerufen wird, werden die Zugangsdaten in eine CSV-Datei exportiert.

Page 32: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 186 Liste der Lösungen zu den Kontrollaufgaben

Lösung zu Kontrollaufgabe 3.1 auf Seite 134

Die Windows Registry wird in einem binären Format gespeichert. Die Registrie-rungsdatenbank ist seit Vista in fünf Hauptgruppen unterteilt:

HKEY_CLASSES_ROOT Informationen über unterstützte Dateitypen und zu-gehöriges Programm (Verweist auf HKEY_LOCAL_MACHINE\Software\Classes).

HKEY_LOCAL_MACHINE Optionen und Einstellungen aller Benutzer des Sys-tems.

HKEY_USERS Optionen und Einstellungen, die nur auf einen einzigen Nutzerzutreffen.

HKEY_CURRENT_USER Das Profil des aktuell angemeldeten Benutzers (Ver-weist auf HKEY_USERS).

HKEY_CURRENT_CONFIG Verweist aufHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current.

Nachfolgend wird der Registry-Schlüssel mit den Informationen zu den WLAN-SSIDs erklärt. Da es sich hierbei um allgemeine Einstellungen handelt, befindensich die Informationen im Hauptschlüssel HKEY_LOCAL_MACHINE. Da es sichhierbei um Einstellungen von Windows selbst handeln, befinden sich die Einträgeunter SOFTWARE\Microsoft\Windows NT\CurrentVersion\. Hier gibt es denSubkey NetworkList, der wiederum die Profiles enthält. Die relevanten Werteinnerhalb des Schlüssels sind die SSID (ProfileName), Beschreibung (Description),Zeitpunkt der Erstellung (DateCreated) und Zeitpunkt des letzten Verbindungs-aufbaus (DateLastConnected).

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\{C87BD789-00CD-4DC5-B6DA-A4B6E8F09685}

Lösung zu Kontrollaufgabe 3.2 auf Seite 135

In dem Registry Schlüssel befinden sich folgende Subkeys:

• HKEY_USERS\.DEFAULT

• HKEY_USERS\S-1-5-18

• HKEY_USERS\S-1-5-19

• HKEY_USERS\S-1-5-20

• HKEY_USERS\S-1-5-21...

• HKEY_USERS\S-1-5-21..._Classes

Die ersten vier Subkeys (.DEFAULT, S-1-5-18, S-1-5-19, and S-1-5-20) sind integrierteSystemaccounts, die von Windows erstellt werden. Die Subkeys, beginnend mitS-1-5-21, beziehen sich auf „reale Accouns“.

Lösung zu Kontrollaufgabe 3.3 auf Seite 136

Im Schlüssel befinden sich bspw. die drei Werte „PATH=C:\Program Files(x86)\Nmap“, „TEMP=TMP=%USERPROFILE%\AppData\Local\Temp“

Page 33: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Liste der Lösungen zu den Kontrollaufgaben Seite 187

Lösung zu Kontrollaufgabe 3.4 auf Seite 138

In dem Registry-Schlüssel befinden sich bspw. die folgenden Werte:

Schlüsselname: HKEY_LOCAL_MACHINE\HARDWARE\...Klassenname: <KEINE KLASSE>Letzter Schreibzugriff: 13.02.2015 - 11:05Wert 0

Name: BiosMajorReleaseTyp: REG_DWORDDaten: 0x2

Wert 1Name: BiosMinorReleaseTyp: REG_DWORDDaten: 0x3d

Wert 2Name: ECFirmwareMajorReleaseTyp: REG_DWORDDaten: 0x1

Wert 3Name: ECFirmwareMinorReleaseTyp: REG_DWORDDaten: 0xd

Wert 4Name: BaseBoardManufacturerTyp: REG_SZDaten: LENOVO

Wert 5Name: BaseBoardProductTyp: REG_SZDaten: 24298K1

Wert 6Name: BaseBoardVersionTyp: REG_SZDaten: Not Defined

Wert 7Name: BIOSReleaseDateTyp: REG_SZDaten: 05/07/2014

Wert 8Name: BIOSVendorTyp: REG_SZDaten: LENOVO

Wert 9Name: BIOSVersionTyp: REG_SZDaten: G4ETA1WW (2.61 )

Page 34: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 188 Liste der Lösungen zu den Kontrollaufgaben

Wert 10Name: SystemFamilyTyp: REG_SZDaten: ThinkPad T530

Wert 11Name: SystemManufacturerTyp: REG_SZDaten: LENOVO

Wert 12Name: SystemProductNameTyp: REG_SZDaten: 24298K1

Wert 13Name: SystemSKUTyp: REG_SZDaten: LENOVO_MT_2429

Wert 14Name: SystemVersionTyp: REG_SZDaten: ThinkPad T530

Interessante Informationen sind u. a. der Hersteller, Versionsnummer, Erschei-nungsdatum der BIOS-Version und Informationen zum Produkt selbst.

Lösung zu Kontrollaufgabe 3.5 auf Seite 141

Hive (engl.: Bienenstock) ist ein elementarer Bestandteil in der Windows-Registry.Ein Hive ist der oberste Knoten eines Hauptschlüssels. Die Hive-Files sind diedazugehörigen Binärdateien, die die Informationen der Registry enthalten.

Die folgendenHive-Files sind in demVerzeichnis%SystemRoot%\System32\Config\gespeichert:

• Sam – HKEY_LOCAL_MACHINE\SAM

• Security – HKEY_LOCAL_MACHINE\SECURITY

• Software – HKEY_LOCAL_MACHINE\SOFTWARE

• System – HKEY_LOCAL_MACHINE\SYSTEM

• Default – HKEY_USERS\.DEFAULT

• Userdiff – Nicht mit einem Hive verbunden. Wird nur beim Systemupdateverwendet.

Die folgende Datei ist in jedem Benutzerverzeichnis gespeichert:%USERPROFILE%\Ntuser.dat – HKEY_USERS\<User SID>(verweist auf HKEY_CURRENT_USER)

Bei älteren Windows-Versionen gibt es zusätzlich folgende Datei:%USERPROFILE%\Local Settings\ApplicationData\Microsoft\Windows\Usrclass.dat(lokalisierter Pfad) – HKEY_USERS\<User SID>_Classes(HKEY_CURRENT_USER\Software\Classes)

Page 35: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Liste der Lösungen zu den Kontrollaufgaben Seite 189

Unter Windows Vista und neuer wurde der Pfad geändert:%USERPROFILE%\AppData\Local\Microsoft\Windows\Usrclass.dat (Pfadist nicht lokalisiert) alias %LocalAppData%\Microsoft\Windows\Usrclass.dat –HKEY_USERS\<User SID>_Classes (HKEY_CURRENT_USER\Software\Classes)

Lösung zu Kontrollaufgabe 3.6 auf Seite 141

BeimÖffnen des Verzeichnisses %SystemRoot%\System32\Config unterWindowsVista und neuer erscheint ein Dialogfenster. Es werden höhere Berechtigungen fürden Zugriff benötigt. Diese erhält man mit einem Klick auf „Fortsetzen“.

Das Öffnen oder Kopieren der Dateien ist nicht möglich.

Lösung zu Kontrollaufgabe 3.7 auf Seite 142

Bei einer GUID handelt sich um eine 16-Byte-Zahl (128-Bit), die aus einer Mengevon Informationen gebildet wird, um Objekte eindeutig zu identifizieren. So wirdunter anderem dieMAC-Adresse der Netzwerkkarte bei der Erstellung einer GUIDverwendet um sicherzustellen, dass die GUID weltweit eindeutig ist. Die SID istähnlich aufgebaut, kann aber nur einen Benutzer oder eine Gruppe innerhalb einerDomäne eindeutig identifizieren.

Lösung zu Kontrollaufgabe 3.8 auf Seite 144

import winreg

def main():explorer = 'Software\\Microsoft\\Windows\\Current'+\

'Version\\Explorer'

with winreg.OpenKey(winreg.HKEY_CURRENT_USER, explorer) as key:try:

i = 0while True:

print(winreg.EnumKey(key, i))i += 1

except WindowsError:pass

if __name__ == "__main__":main()

Page 36: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 190 Liste der Lösungen zu den Kontrollaufgaben

Lösung zu Kontrollaufgabe 3.10 auf Seite 149

QQuelltext 3.20

1 import argparse2 from Registry import Registry34 def rec(key, depth=0):5 for subkey in key.subkeys():6 if subkey.name() == "skype":7 print(subkey.path())8 rec(subkey, depth+1)9

10 def main():1112 reg = Registry.Registry("software")13 key = reg.root()1415 rec(key)1617 if __name__ == "__main__":18 main()

Lösung zu Kontrollaufgabe 3.11 auf Seite 150

import platformversion = platform.release()

if version == '7':...

Lösung zu Kontrollaufgabe 3.12 auf Seite 152

#I. A. a. Violent Pythonimport osfrom winreg import *def sid2user(sid):

try:key = OpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows NT\CurrentVersion"+\

"\ProfileList"+ '\\' + sid)(value, type) = QueryValueEx(key,\

'ProfileImagePath')user = value.split('\\')[-1]return user

except:return sid

def returnDir():dirs=['C:\\Recycler\\','C:\\Recycled\\',\

'C:\\$Recycle.Bin\\']for recycleDir in dirs:

if os.path.isdir(recycleDir):return recycleDir

return None

Page 37: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Liste der Lösungen zu den Kontrollaufgaben Seite 191

def findRecycled(recycleDir):dirList = os.listdir(recycleDir)for sid in dirList:

files = os.listdir(recycleDir + sid)user = sid2user(sid)with open('test.txt', 'a') as f:

f.write('\n[*] Listing Files For User: ' +\str(user))for file in files:

f.write('[+] Found File: ' + str(file)+'\n')

def main():recycledDir = returnDir()findRecycled(recycledDir)

if __name__ == '__main__':main()

Lösung zu Kontrollaufgabe 3.15 auf Seite 160

Über den Parameter r können rekursiv alle Dateien bearbeitet werden. Selbstver-ständlich ist auch eine Lösung mittels Python möglich, aber da exiftool diesenParameter bereits anbietet, hier die bessere Wahl.

QQuelltext 3.21

1 import os23 os.system("exiftool -r -all= C:/Bilder/*.jpg")

Lösung zu Kontrollaufgabe 3.16 auf Seite 161

exiftool -ThumbnailImage= -PreviewImage= image.jpg

Bitte beachten Sie, dass es neben dem ThumbnailImage u.U. auch PreviewImagesgibt, welche nicht Teil des Exif-Standards ist.

Lösung zu Kontrollaufgabe 3.17 auf Seite 170

• Eine Datei wird von Datenträger 1 auf Datenträger 2 kopiert:Änderung des Erstellungs- und Zugriffszeitstempels.

• Eine Datei wird von Datenträger 1 auf Datenträger 2 verschoben:Es findet keine Änderung statt.

• Eine Textdatei mit dem Inhalt „Hallo“ wird mit dem selben Inhalt über-schrieben.Änderung des Änderungszeitstempels.

• Eine ausführbare Datei wird mittels Doppelklick ausgeführt.Änderung des Zugriffszeitstempels, sofern in der Registry entsprechenderWert zu Aktualisierung gesetzt. Ansonsten keine Änderung.

Page 38: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik
Page 39: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Verzeichnisse Seite 193

Verzeichnisse

I. Abbildungen

Abb. 1.1: Die Python-Shell unter Windows 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Abb. 1.2: Standard- Datentypen in Python ([Weigend, 2010, S. 79]) . . . . . . . . . . . . . . . . . . . 33Abb. 1.3: Ein Schalter ist ein endlicher Automat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Abb. 1.4: Ersetzen-Dialog von Notepad++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Abb. 1.5: Die Klasse File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69Abb. 1.6: Die Klassen File und Picture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74Abb. 1.7: Bei einem Syntax-Fehler werden Teile der fehlerhaften Zeile eingefärbt. . . . . . . . . . . . . 80Abb. 1.8: Laufzeitfehler geben eine mehrzeiligen Fehlercode zurück. . . . . . . . . . . . . . . . . . . . 80Abb. 1.9: Der Debug Control nachdem das Programm ausgeführt wurde . . . . . . . . . . . . . . . . . 81Abb. 2.1: Grundlegende Komponenten eines ER-Modells . . . . . . . . . . . . . . . . . . . . . . . . . . 96Abb. 2.2: Beispiel für ein ER-Modell nach der Chen-Notation . . . . . . . . . . . . . . . . . . . . . . . . 96Abb. 2.3: SQLite SELECT-Statement [Hipp, 2015] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Abb. 2.4: Übersicht main.db: Tabellen im DB Browser for SQLite . . . . . . . . . . . . . . . . . . . . . 111Abb. 2.5: Felder der Tabelle „moz_formhistory“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Abb. 2.6: Felder der Tabelle „logins“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Abb. 2.7: Datensatz der Tabelle „logins“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Abb. 3.1: Hierarchische Struktur der Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Abb. 3.2: Registrierungs-Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Abb. 3.3: Vererbung unter den Wurzelschlüsseln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Abb. 3.4: ProfileList = Liste der Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141Abb. 3.5: Beispiel für eine GUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Abb. 3.6: Windows Registry Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Abb. 3.7: Aufruf von PIP mittels py -2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162Abb. 3.8: Aufruf von Hachoir zur Analyse von Worddokumenten . . . . . . . . . . . . . . . . . . . . . 166Abb. 3.9: Aufruf von Hachoir zur Analyse von ausführbaren Dateien . . . . . . . . . . . . . . . . . . . 166Abb. 3.10: Aufruf von Hachoir zur Analyse von Torrent-Dateien . . . . . . . . . . . . . . . . . . . . . . . 167Abb. 3.11: Aufruf von Hachoir zur Analyse von Bildateien . . . . . . . . . . . . . . . . . . . . . . . . . . 167Abb. 12: Felder der Tabelle „moz_annos“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

II. Beispiele

Beispiel 1.1: Taschenrechner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Beispiel 1.2: Analogie zur Klassenbeziehung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Beispiel 1.3: Vererbung am Beispiel Automodelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Beispiel 1.4: Polymorphie am Beispiel von Fahrzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Beispiel 1.5: Namensräume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Beispiel 1.6: Strings in Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Beispiel 1.7: Definition einer deutschen Telefonnummer . . . . . . . . . . . . . . . . . . . . . . . . . . 58Beispiel 1.8: Klasse File und die Methode __repr__(self) . . . . . . . . . . . . . . . . . . . . . . . . 76Beispiel 1.9: Bubblesort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Beispiel 2.1: Relation „Buch“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Beispiel 2.2: Relationen „Kunde“ und „Entliehen“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Beispiel 2.3: SELECT-Syntax in MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Beispiel 3.1: Beispielaufruf des Demo-Programms 3.16 . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

III. Definitionen

Definition 1.1: Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Definition 3.1: Registry-Hives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

Page 40: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 194 Verzeichnisse

Definition 3.2: Schlüssel, Werte und Unterschlüssel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Definition 3.3: Hives und der Unterschied zu den Hauptschlüsseln . . . . . . . . . . . . . . . . . . . . . 139Definition 3.4: ctime, Veränderungs- oder Erstellungszeitstempel . . . . . . . . . . . . . . . . . . . . . 168Definition 3.5: atime, Zugriffszeitstempel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168Definition 3.6: mtime, Modifizierungszeitstempel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

IV. Exkurse

Exkurs 1.1: Installation der Python-Umgebung für ein Windows System (64-bit) . . . . . . . . . . . . . . 15Exkurs 1.2: Liste aller verfügbaren Module ausgeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21Exkurs 1.3: Rekursive Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Exkurs 1.4: Liste der Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Exkurs 1.5: Binärsystem und Hexadezimalsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Exkurs 1.6: Mehrzeilige Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Exkurs 1.7: Einsprungspunkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Exkurs 1.8: O-Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Exkurs 2.1: Installation von SQLite und sinnvolle Ergänzungen . . . . . . . . . . . . . . . . . . . . . . . 101Exkurs 2.2: Aktuelles Arbeitsverzeichnis im interaktiven Modus ausgeben . . . . . . . . . . . . . . . . . 109Exkurs 2.3: SQL-Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Exkurs 2.4: Masterpasswort vs. Windows login credentials . . . . . . . . . . . . . . . . . . . . . . . . . 124Exkurs 3.1: Windows-Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Exkurs 3.2: Hexadezimale Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Exkurs 3.3: MAC-Adresse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145Exkurs 3.4: python-registry-Beispiel: regviewer.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150Exkurs 3.5: Metdaten Bilddateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156Exkurs 3.6: Office Open XML docx / xlsx / pptx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

V. Tabellen

Tabelle 1.1: Arithmetische Operatoren für Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Tabelle 1.2: Ein anonymes Objekt in Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24Tabelle 1.3: Gemeinsame Operatoren für Sequenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Tabelle 1.4: Liste der Sequenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Tabelle 1.5: Escape-Sequenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Tabelle 1.6: Wichtige Listenoperationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Tabelle 1.7: Operatoren von Mengen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Tabelle 1.8: Vergleichsoperatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Tabelle 1.9: Parameter beim Öffnen von Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Tabelle 1.10: Methoden für Dateiobjekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Tabelle 1.11: Zeichen einer Auswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Tabelle 1.12: Vordefinierte Zeichenklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Tabelle 1.13: Quantoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Tabelle 1.14: Wichtige Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Tabelle 1.15: Begrenzer für reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Tabelle 2.1: Die vier Kategorien der SQL-Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Tabelle 2.2: Datentypen von SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Tabelle 2.3: Logische Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106Tabelle 2.4: Firefox-Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Tabelle 2.5: Chrome-Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Tabelle 3.1: Relative Systempfade (Umgebungsvariablen) . . . . . . . . . . . . . . . . . . . . . . . . . 130Tabelle 3.2: Wurzelschlüssel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Tabelle 3.3: Dateierweiterungen der Hive-Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Tabelle 3.4: Hives und ihre Unterstützungsdateien (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Tabelle 3.5: Hives und ihre Unterstützungsdateien (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Page 41: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Literatur Seite 195

VI. Literatur

Grant Allen and Mike Owens. The Definitive Guide to SQLite. Apress, New York, 2nd edition, 2010. ISBN978-1-430-23225-4.

Johannes Ernesti and Peter Kaiser. Python 3 - Das umfassende Handbuch. Galileo Press, 3. Auflage, Bonn, 2012.ISBN 978-3-836-21925-9.

F. Hajji. Das Python-Praxisbuch: Der große Profi-Leitfaden für Programmierer. Open source library. PearsonDeutschland, 2008. ISBN 9783827325433. URL https://books.google.de/books?id=vfzazxfQScYC.

D. Richard Hipp. Syntax diagrams for sqlite. Website, 2015. http://www.sqlite.org/syntaxdiagrams.html#select-stmt.

J. Honeycutt. Microsoft® Windows® Registry Guide. Microsoft Press, 2009. ISBN 9780735637351.

Jay A. Kreibich. Using SQLite. O’Reilly Media, Inc., Sebastopol, CA, 2010. ISBN 978-0-596-52118-9.

TJ O’Connor. Violent Python - A Cookbook for Hackers, Forensic Analysts, Penetration Testers, and Security Engineers.Newnes, London, 1st edition, 2012. ISBN 978-1-597-49957-6.

A.S. Tanenbaum. Moderne Betriebssysteme. Pearson Studium - IT. Pearson Deutschland, 2009. ISBN9783827373427.

tutorialspoint. Sqlite - SQL Database Engine. Website, 2010. http://www.tutorialspoint.com/sqlite/sqlite_using_joins.htm.

Michael Unterstein and Günter Matthiessen. Relationale Datenbanken und SQL in Theorie und Praxis. SpringerDE, 5. Auflage, Berlin, 2012. ISBN 978-3-642-28986-6.

Michael Weigend. Objektorientierte Programmierung mit Python 3 - Einstieg, Praxis, professionelle Anwendung.Hüthig Jehle Rehm, 4. Auflage, München, 2010. ISBN 978-3-826-61750-8.

Wikipedia. Office open xml. Website, 2015a. http://de.wikipedia.org/wiki/Office_Open_XML.

Wikipedia. Iptc-iim-standard. Website, 2015b. http://de.wikipedia.org/wiki/IPTC-IIM-Standard.

Page 42: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik
Page 43: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Anhang Seite 197

Anhang

A. Schlüsselwörter

False class finally is returnNone continue for lambda tryTrue def from nonlocal whileand del global not withas elif if or yieldassert else import passbreak except in raise

Page 44: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik
Page 45: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Stichwörter Seite 199

Stichwörter

Abbruch einer Schleife, 50Absteigend sortieren, 89Anzahl der Elemente, 36Artefakte in der Registry, 130Aufruf einer Funktion, 28Ausnahmebehandlung, 79

Bedeutung der GUID, 142Bedeutung der SIDs, 141Bedingungen, 46Bester Fall, 86Binärsystem, 34Bool, 35Breakpoints, 82Bubblesort, 85Bytestrings, 39

Cross Join, 107

Data Definition Language, 101Data Manipulation Language, 104Datenkapselung, 14Debugging, 80Definition einer Funktion, 28Definition einer Klasse, 69Dictionaries, 42Dualsystem, 34

Einrückung, 44Elemente der SIDs, 142else-if-Abfrage, 49Ende einer Anweisung, 20Ergänzungen zu Tabellen, 103Erstellen von Skriptdateien, 43

for-Schleife, 51Funktionen, 21, 26

Ganzzahlen, 33Gleitkommazahlen, 18, 35Guter Programmierstil, 76

help(), 21Hexadezimalsystem, 34HKEY_LOCAL_MACHINE, 137HKEY_USERS, 134

Identische und gleiche Objekte, 23if-Abfrage, 22, 48Impliziter Join, 108Importierte Funktionen, 27in-place, 84Inner Join, 107instabile Sortieralgorithmen, 84

Installation, 15Installation von Modulen, 83Interaktiver Modus, 17

Key-Funktionen, 87Kommentar, 19Kommentare, 44, 76Konforme Variablennamen, 25Kontrollstrukturen, 46

Listen, 22, 40Listenoperationen, 40Literal, 12Lokale Funktionen, 29

MAC-Adresse auslesen, 145Mehrfache Verzweigung, 49Mehrzeilige Strings, 38Mengen, 41Methoden, 31Module laden, 21

Namensräume der Bibliotheken, 27Natural Join, 107NoneType, 35Normalform, 1., 95Normalisierung, 95

Objekt, 23Objekte erzeugen, 71Objektorientierte Programmierung, 13OOP, 13open, 53Operator-Module, 88optional arguments, 68Optionale Parameter, 28out-of-place, 84Outer Join, 107

pass, 53Polymorphie, 14Prozedurale Programmierung, 12Prozeduren, 26Python Is Not Java, 76

range(), 51Raw-String, 38Reguläre Ausdrücke

gierige Quantoren, 60nicht-gierige Quantoren, 60

Schlüsselwörter, 25Semantik, 12Sequenzen, 35

Page 46: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Seite 200 Stichwörter

Anzahl der Elemente, 36Konkatenation, 36Vervielfältigung, 36Zugriff auf ein Element, 36

Sichtbarkeit von Attributen, 71Sortieralgorithmen, 84SQL, 97SQLite in der Kommandozeile, 108sqlite3, 108stabile Sortieralgorithmen, 84Standard-Datentypen, 32Syntax, 12

Timsort, 86Tupel, 39Typumwandlungen, 42

Umgebungsvariablen ansehen/ verändern, 131Ungünstigster Fall, 86Unterschlüssel zu

HKEY_CURRENT_CONFIG, 138HKEY_CURRENT_USER, 135HKEY_LOCAL_MACHINE, 137HKEY_USERS, 134

Variable Anzahl Parameter, 26Variablen, 20, 24Vererbung, 14Verknüpfen von Bedingungen, 47Versions-Abhängigkeit, 130Verzweigung, 49

while-Schleife, 50with, 53

Zeichenketten, 37Zugehörigkeit zu einer Menge, 41Zuweisungsoperator, 20

Page 47: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Fort- und Weiterbildung Neue Bedrohungszenarien stellen Sicherheitsexperten und IT-Verantwortliche in Unternehmen und einschlägigen Behörden vor immer größere Herausforderungen. Neue Technologien und Anwendungen erfordern zusätzliches Know-how und personelle Ressourcen.Zur Erhöhung des Fachkräftepools und um neues Forschungswissen schnell in die Praxis zu integrieren, haben sich die im Bereich lehrenden und forschenden Verbundpartner zum Ziel gesetzt, ein hochschuloffenes transdisziplinäres Weiterbildungsprogramm im Sektor Cyber Se-curity zu entwickeln. Auf der Grundlage kooperativer Strukturen werden wissenschaftliche Wei-terbildungsmodule im Verbund zu hochschulübergreifenden Modulpaketen und abschlusso-rientierten Ausbildungslinien konzipiert und im laufenden Studienbetrieb empirisch getestet.Die Initiative soll High Potentials mit und ohne formale Hochschulzugangsberechtigung über innovative Weiterbildungsangebote (vom Zertifikat bis zum Masterprogramm) zu Sicherheits-experten aus- und fortbilden. Hierzu werden innovative sektorale Lösungen zur Optimierung der Durchlässigkeit von berulicher und hoch- schulischer Bildung entwickelt und für eine er-folgreiche Implementierung vorbereitet. Unter prominenter Beteiligung einschlägiger Verbän-de, der Industrie sowie Sicherheits und Ermittlungsbehörden verfolgt die Initiative das Ziel, im deutschsprachigen Raum eine Generation von Fachkräften wissenschaftlich aus- und weiterzu-bilden, die unser Internet schützen kann.

Open Competence Center for Cyber SecurityOpen C³S ist aus dem Verbundvorhabens Open Competence Center for Cyber Security ent-standen. Das Gesamtziel des Programms war die Entwicklung eines hochschuloffenen trans-disziplinären Programms wissenschaftlicher Weiterbildung im Sektor Cyber Security. Das Bun-desministerium für Bildung und Forschung (BMBF) fördert das Großprojekt im Rahmen des Wettbewerbs „Aufstieg durch Bildung: offene Hochschulen“, der aus BMBF-Mitteln und dem Europäischen Sozialfonds finanziert wird.Neun in Forschung und Lehre renommierte Hochschulen und Universitäten aus dem gesamten Bundesgebiet haben sich zum Ziel gesetzt, Online-Studiengänge auf dem Gebiet der Cyber-sicherheit zu entwickeln. Dieses Konzept soll den Studierenden ermöglichen, sich berufsbe-gleitend auf hohem Niveau wissenschaftliche Qualifikationen anzueignen und akademische Abschlüsse zu erlangen. Beruflich erworbene Kompetenzen können eingebracht werden. Die Bezeichnung „Open“ steht auch für die Öffnung des Zugangs zu akademischer Bildung ohne klassischen Hochschulzugang.Mission der Initiative ist es, dringend benötigte Sicherheitsexperten aus- und fortzubilden, um mit einer sicheren IT-Infrastruktur die Informationsgesellschaft in Deutschland und darüber hi-naus zu stärken.Umsetzungsnahes Wissen ist ein wesentlicher Schlüssel um der wachsenden digitalen Bedro-hung zu begegnen. Solange wir nicht in der Lage sind, Systeme hinreichend zu härten, Netzwer-ke sicher zu designen und Software sicher zu entwickeln, bleiben wir anfällig für kriminelle Akti-vitäten. Unser Ziel ist es, die Mitarbeiter von heute zu Sicherheitsexperten und Führungskräften von morgen auszubilden und dafür zu sorgen, dass sich die Zahl und die Fertigkeiten dieser Experten nachhaltig erhöht.

Weitere Informationen zu Open C³S: https://open-c3s.de

Page 48: Zertifikatsprogramm - Z202 Python 1 - Programmierung und ...zertifikatsprogramm.de/files/wollwinderei/downloads... · Zertifikatsprogramm - Z202 Python 1 - Programmierung und Forensik

Z202 Python 1 - Programmierung und Forensik

Ziel dieses Moduls ist es, Aufgabenstellungen aus dem Umfeld der IT-Sicherheit mit Hilfe von Python-Programmen schnell und effektiv lösen zu können. In diesem Modul lernen Sie die Pro-grammiersprache Python anhand von praktischen Übungen kennen. Ziel dieses Moduls ist es nicht, Vorgehensmodelle zur Softwareentwicklung zu vermitteln, wie sie bei komplexer Soft-ware benötigt werden. Mit Python sollen Sie viel mehr in der Lage sein, kleinere überschaubare Programme zu schreiben, die schnell zu Ergebnissen

führen.

Python liegt in zwei Versionen vor, die beide aktiv von Programmierern verwendet werden. Die Version 3 ist mit Python 2 nicht mehr kompatibel und ist die einzige Version, die aktiv weiterent-wickelt wird. In diesem Modul wird weitestgehend die aktuelle Version von Python verwendet. In einigen Abschnitten wird aber auf die Vorgängerversion zurückgegriffen, da die verwendeten Module noch nicht von den Entwicklern portiert wurden.

Neben der Programmiersprache Python wird auch das Erstellen und Verwenden von Daten-banken grundlegend erklärt. Hierfür wird das Hilfsmodul SQLite verwendet, das ein wartungs-freies Datenbanksystem enthält und Teil der Python-Umgebung ist.

Der Studienbrief 1 beschäftigt sich mit den Grundlagen der Python-Programmierung, Studien-brief 2 mit Datenbanken. Studienbrief 2 schließt mit der Untersuchung von Anwendungsarte-fakten an den Beispielen Skype und Firefox ab.

Der Studienbrief 3 befasst sich mit dem Thema Informationsgewinnung unter forensischen Aspekten. Die vorgestellten Beispiele sollen dabei die universellen Einsatzmöglichkeiten von Python aufzeigen und zum Experimentieren einladen.

Auf dieses Modul wird mit einem Folgemodul „Python 2 – Programmieren im IT-Security-Um-feld“ aufgebaut, bei dem der Fokus auf Penetrationstests und Netzwerkforensik liegt.

ZertifikatsprogrammDie Zertifikatsmodule auf wissenschaftlichem Niveau und mit hohem Praxisbezug bilden ein passge-naues Angebot an Qualifikation und Spezialisierung in der nebenberuflichen Weiterbildung. Damit können einzelne Module nebenberuflich studiert werden. Durch die Vergabe von ECTS-Punkten kön-nen sie auf ein Studium angerechnet werden.

https://zertifikatsprogramm.de