Hacken mit Python und Kali-Linux - Alicia Noors - E-Book

Hacken mit Python und Kali-Linux E-Book

Alicia Noors

0,0

Beschreibung

Python ist eine leicht zu erlernende und dennoch eine sehr vielfältige und mächtige Programmiersprache. Lernen Sie mit der bevorzugten Sprache vieler Hacker, Ihre eigenen Tools zu schreiben und diese unter Kali-Linux einzusetzen, um zu sehen, wie Hacker Systeme angreifen und Schwachstellen ausnutzen. Durch das entwickeln Ihrer eigenen Tools erhalten Sie ein deutlich tiefgreifenderes Verständnis wie und warum Angriffe funktionieren. Nach einer kurzen Einführung in die Programmierung mit Python lernen Sie anhand vieler praktischer Beispiele die unterschiedlichsten Hacking-Tools zu schreiben. Sie werden selbst schnell feststellen, wie erschreckend einfach das ist. Durch Einbindung vorhandener Werkzeuge wie Metasploit und Nmap werden Skripte nochmals effizienter und kürzer. Nutzen Sie das hier erlangte Wissen, um Ihre Systeme auf Lücken zu testen und diese zu schließen bevor andere diese ausnützen können!

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 214

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Gewidmet Gertrud K. (1961 - 2018)

Ein wunderbarer Mensch, eine starke Frau und eine echte Stütze,

die nach langer Zeit den Kampf gegen ihren Krebs verlohren hat.

Danke für Alles. Wir werden dich sehr vermissen!

VORWORT

Als ich meinen ersten Computer bekam eröffnete sich mir eine neue und faszinierende Welt. Bald schon war mir das "Bedienen" der Maschine zu langweilig geworden und mich dürstete es danach zu erfahren wie dieses Ding genau funktioniert...

Als ich dann QBasic auf meinem Computer entdeckte und begann anhand einiger Büchern das Programmieren zu erlernen packte mich eine Faszination, die mir bis heute erhalten geblieben ist. Während meine Klassenkameraden ihre Rechner maximal zum Spielen verwendeten konnte ich tage- und wochenlang an meinen Programmen basteln.

Schnell wurde mir auch klar - genau das ist es was ich später einmal machen will. Als ich schließlich anfing in der Softwareentwicklung zu arbeiten kam ich bald auf das Thema Sicherheit und wieder eröffnete sich mir eine faszinierende neue Welt - ein Welt voller Puzzel und Rätsel, die es zu lösen galt.

Mit der Zeit machte mir das Rätseln und Puzzeln wie sich ein Stück Software "überlisten" lässt und die Suche nach Fehlern in Programmen und Webseiten noch mehr Spaß als die Entwicklung.

Ich hoffe, dass ich Ihnen in diesem Buch meine Faszination für die Themen Hacken und Programmieren ein wenig näher bingen kann und Sie vielleicht mit dem gleichen "Virus" infizieren kann der mich vor Jahren packte und nie wieder loslies...

In diesem Sinne wünsche ich Ihnen viel Spaß mit meinem Buch!

Ihre

Alicia Noors

INHALTSVERZEICHNIS

Vorwort

Warum Python

Kali-Linux - Installation & Einrichtung

Einrichten vom XFCE-Desktop

Installation von Python 3, modulen und VS Code

Installtion unter Windows und Mac OSX

Installation unter Linux

Installation und Einrichten von Visual Studio Code

Python-Crashkurs

Datentypen & Variablen

Operatoren

Typenkonvertierung

Wiederholungen & Verzweigungen

Kommentare

Funktionen

Arbeiten mit Dateien

Objektorientierte Programmierung

Fehlerbehandlung

Passwort- bzw. Hash-Knacker

Ausführungsgeschwindigkeit steigern - kleine Änderung große Wirkung

Arbeiten mit Salt-Werten

Auf der Suche nach dem Pepper-Wert

Reverse Shell / Remote-Access-Trojaner

Einen Server schreiben um mehrere Verbindungen gleichzeitig zu erlauben

Den Trojaner-Code überarbeiten

Kommunikation durch den Browser

Dateien stehlen

Cookies aus dem Firefox-Browser stehlen

Screenshot heimlich erstellen und versenden

Fotos mit der Webcam (Heimlich) aufnehmen

Crypto-Trojaner

Der Decoder für unseren Crypto-Trojaner

Einfache Verschlüsselung selber entwickeln

Keylogger

Die Zwischenablage mitschneiden

Virenscanner schachmatt setzen.

Host-Datei manipulieren

AV-Scanner identifizieren

DoS / DDOS

ZIP Bombe

Payload als alternativen Datenstrom einschleusen (NTFS)

Portscanner

Das NMAP-Modul

Paket sniffer

PCAP-Datei lesen

Zugangsdaten sniffen

Pakete lesen, analysieren und verändern mit Scapy

ARP-Poisoning mit Scapy

Einrichten von Metasploitable 2 als Opfer-Server

Web-Login bruteforcen

Spuren verwischen

Einplatinencomputer einsetzen um die Schlagkraft zu erhöhen

XSS mit Flask

CSRF mit Flask

Links spidern

Die Linkliste filtern

MySQL-Injection

Auf der Suche nach dem Spaltennamen

Exfiltrieration von Daten aus der Datenbank

Versteckte Dateien und Verzeichnisse finden

msfconsole automatisieren

Buchempfehlungen

WARUM PYTHON

Python ist eine Programmiersprache, die nicht nur leicht zu erlernen und mehr als ausführlich dokumentiert ist, sondern auch über eine schier unendliche Anzahl an Modulen verfügt, die man im eigenen Programm nutzen kann und die für alle erdenklichen Aufgaben Funktionen zur Verfügung stellen.

So ist es möglich mit recht wenigen Zeilen Code ein Tool zu schreiben, um eine bestimmte Aufgabe zu automatisieren. Genau darum ist es Python so beliebt. Natürlich gibt es viele Hackingtools für alle möglichen Aufgaben - oftmals ist es jedoch schneller einige Zeilen in Python zu schreiben als im Internet nach einem passenden Programm zu suchen.

Darüber hinaus ist es nicht unbedingt die beste Idee, blind irgendwelche Tools auszuführen die man in Untergrund- oder Darknet-Foren gefunden hat ohne zuvor den Code genau zu inspizieren. Nicht selten beinhalten diverse angebotene Tools eine böse Überraschung. Wer seinen Rechner nicht in das nächstbeste Botnet eingliedern will, sollte zumindest in der Lage sein den Code eines Scripts zu verstehen und zu überprüfen was genau dieser macht.

Abgesehen davon, begreift man meiner Meinung nach am schnellsten wie ein Angriff oder ein bestimmtes Tool funktioniert, wenn man es selber nachbaut.

KALI-LINUX - INSTALLATION & EINRICHTUNG

Kali ist eine sogenannte Pentesting-Destribution - also ein System in dem schon die beliebtesten Hacking-Tools und diverse Werkzeuge für die Softwareentwicklung enthalten sind.

Daher werde ich für die Beispiele in diesem Buch Kali-Linux als Grundplattform verwenden. Es steht Ihnen natürlich frei, die benötigten Tools auf dem Betriebssystem Ihrer Wahl zu installieren. Ich gehe an dieser Stelle aber lediglich auf die Installation von Kali und die Einrichtung diverser Tool unter Kali ein, da ich davon ausgehe, dass für Personen die sich für das Thema dieses Buches interessieren, die Installation von Software unter dem Betriebssystem Ihrer Wahl keine Schwierigkeit darstellen kann.

Kali kann unter https://www.kali.org/downloads/ kostenlos heruntergeladen werden. Diejenigen die einen virtuellen PC verwenden möchten können fertige VMware- oder VirtualBox-Images downloaden.

Außerdem wird Kali-Linux mit Gnome3, KDE, XFCE4, LXDE, Enlightment und Mate als Window-manager angeboten. Für diejenigen die Linux nicht kennen - der Windowmanager ist vereinfacht gesagt die grafische Oberfläche des Systems, und bei Linux hat man die freie Wahl welchen man verwendet. Verwechseln Sie das jetzt aber nicht mit Themes wie man es aus anderen Betriebssystemen kennt! Die einzelnen Windowmanager unterscheiden sich nicht nur im Aussehen, sondern auch im Ressourcenverbrauch, dem Bedienkonzept und den Standard-Tools (Einstellungsverwaltung, Dateimanager, etc.) die enthalten sind.

Ich für meinen Teil bevorzuge XFCE. Der Look ist klar und schlicht, der Windowmanager ist ressourcenschonend und auf schnelles Arbeiten optimiert. Außerdem ist es mit einigen XFCE-Plugins recht einfach die Systemressourcen im Blick zu behalten.

Nachdem wir die ISO-Datei heruntergeladen haben, können wir Sie auf eine DVD brennen oder auf einen USB-Stick entpacken...

Windows-User können dazu den "Win32 Image writer" verwenden, den Sie unter https://launchpad.net/win32-image-writer downloaden können. Das Programm sollte soweit selbsterklärend sein...

Linux- und OSX-User können dazu den Konsolen-Befehl dd verwenden:

dd if=/pfad/zum/kali-image.iso of=/dev/sdb bs=512k

Dieser Befehl muss als root oder mit sudo ausgeführt werden!

Seien Sie aber vorsichtig mit dd... Dieser Befehl verzeit keine Fehler und kann Ihnen eine ganze Festplatte überschreiben!

Mit if= wird die Eingabe-Datei (input file) bestimmt und mit of= die Ausgabe-Datei. In meinem Beispiel habe ich /dev/sdb angegeben, was die Geräte-Datei der zweiten SCSI- bzw. SATA-Platte ist. Unter Linux werden so auch die USB-Laufwerke angesprochen. Wichtig ist, nicht beispielsweise /dev/sdb1 zu verwenden, denn das wäre die erste Partition dieser Platte, und wir wollen die gesamte Platte inklusive der Partitionstabelle überschreiben!

Unter OSX wäre das /dev/disk1. Hier wäre /dev/disk1s0 die erste Partition und somit falsch! Am einfachsten identifizieren Sie die richtige Geräte-Datei indem Sie df -h im Terminal eingeben:

Wenn nun die Ausgabe beispielsweise

/dev/disk0s2

148Gi

86Gi

62Gi

58% ...

/dev/disk1s1

7.4Gi

5.2Gi

2.2Gi

71% ...

liefert ist klar, dass das Laufwerk disk1 mit der 7,4 GB-Partition der USB-Stick und die Platte disk0 der 148GB-Partition die SSD ihres Rechners ist. In dem Fall wäre also /dev/disk1 zu verwenden.

Das bs=512k definiert eine Blockgröße von 512KB und kann so übernommen werden. dd meldet keinen Fortschritt und ist auch nicht besonders schnell - kochen Sie sich einen Kaffee, gönnen Sie sich einen Snack oder schnappen Sie kurz frische Luft - mit 10 bis 20 Minuten können Sie schon rechnen.

Zuvor muss das Laufwerk aber gegebenenfalls ausgehängt werden - dies geschieht mit:

umount /dev/sdb1 (Linux)

diskutil umount /dev/disk1s1 (OSX)

Jeweils mit sudo oder als root ausgeführt! Sobald das Erstellen des bootfähigen USB-Sticks fertig ist, meldet dd dies mit einer derartigen Ausgabe:

5345+1 records in

5345+1 records out

2802616968 bytes transferred in 668.849633 secs (4190204 bytes/sec)

Danach kann ein Rechner von dem Installations-Stick gestartet werden. Hierbei haben Sie die Möglichkeit Kali vom USB-Stick zu starten und ohne Installation zu testen. Diese Option ist auch sehr hilfreich, wenn eines Ihrer Systeme nicht mehr bootet - so können Sie mit Kali zumindest noch eine Datensicherung vornehmen und dann nach der Ursache forschen.

Kali ist wie alle Linux-Distros sehr genügsam und läuft auf meinem Atom-Netbook mit 2 GB Ram absolut flüssig - im Leerlauf werden gerade einmal 1 - 1,5% der CPU-Leistung benötigt. Daher kann ich jedem Interessierten empfehlen ein altes Notebook oder Netbook mit Kali aufzusetzen!

Wichtig ist hierbei, dass der Kali-Rechner über eine ausreichend große Festplatte oder SSD verfügt! Wenn Sie mit Wortlisten oder Rainbow-Tables arbeiten haben Sie schnell mit Dateigrößen von 100GB und mehr zu tun... 500GB oder mehr wären meine Empfehlung.

Ich werde mit Ihnen an dieser Stelle die grafische Installtion durchnehmen. Sobald Sie diesen Punkt im Auswahl-Menü gestartet haben gelangen Sie in den Installations-Assistenten.

Hier wählen Sie zuerst German - Deutsch aus und klicken dann auf den Continue-Button.

Danach werden Sie eventuell gefragt, ob die Installation in Deutsch fortgesetzt werden soll. Je nach Version des Installationsassistenten könnten einige neue Texte noch nicht vollständig übersetzt worden sein - in so einem Fall wird Ihnen ein Teil der Installtion in Englisch angezeigt. Wählen Sie Ja und klicken Sie dann auf den Weiter-Button.

Im nächsten Step wählen Sie Ihr Land aus und klicken wieder auf Weiter.

Dann werden Sie nach dem Tastatur-Layout gefragt... Wählen Sie hier wieder Deutsch und gehen Sie zum nächsten Schritt.

Jetzt wird die Hardware-Erkennung ausgeführt. Dies kann ein oder zwei Minuten dauern. Sobald dies abgeschlossen ist, werden Sie nach dem Rechnernamen gefragt - ich vergebe hier kali.local. Sie können Ihrer Kreativität hier aber freien Lauf lassen. Das .local am Ende des Namens ordnet den Rechner der .local-Domain zu.

Sobald das geschafft ist, müssen wir ein Passwort für den User root vergeben. Dieser Benutzer ist unter Linux- und Unix-Systemen der Administrator und hat die höchsten Benutzerrechte. Normalerweise arbeitet man nicht direkt als root, aber für einige Dinge, die wir in diesem Buch anstellen werden, wie das Fälschen oder Abfangen von Paketen und das Anbieten von Serverdiensten, bietet es sich durchaus an direkt als root zu arbeiten.

Der nun folgende Schritt der Partitionierung ist aus meiner Sicht der wichtigste. Hier wählen wir Manuell aus und legen folgendes Partitionschema für einen Rechner mit Legacy BIOS-Modus an:

Einhängepunkt

Größe

Benutzen als

/

40-60GB

ext4

/root

40-100GB

ext4

---

4-8GB

swap

/home

restlicher Speicher

ext4

Für einen Rechner mit UEFI empfehle ich folgende Aufteilung der Platte:

Einhängepunkt

Größe

Benutzen als

/boot/efi

2-4GB

fat32

/

40-60GB

ext4

/root

40-100GB

ext4

---

4-8GB

swap

/home

restlicher Speicher

ext4

Bei einem Rechner mit UEFI muss man auch eine GUID-Partitionstabelle verwenden.

Diese Aufteilung macht Sinn, da Programme die unter root oder einem normalen User laufen und Daten im jeweiligen Benutzer-Verzeichnis ablegen ausreichend Platz haben, und man dennoch nicht Gefahr läuft, dass ein Programm unentdeckt die Platte komplett anfüllt und das System Probleme beim booten bekommt.

Außerdem kann man so die Systempartition (/) bei einer Neuinstallation des Systems bedenkenlos formatieren und die User-Daten sind sicher auf den Partitionen für /root bzw. /home.

Nachdem wir das Anlegen der Partitionen abgeschlossen haben, werden wir nochmals gefragt, ob wir die Änderungen auf die Festplatte schreiben wollen... Dies bestätigen wir mit Ja und die Installation des Grundsystems beginnt.

Dies ist nach wenigen Minuten fertig, und wir werden gefragt, ob wir zusätzliche Pakete von einem "Netzwerk-Spiegelserver" installieren wollen. Dies sollten wir mit Ja beantworten.

Im nächsten Schritt können wir einen Proxy-Server konfigurieren - in der Regel werden Sie in Ihrem Netzwerk keinen Proxy benötigen, um auf das Internet zuzugreifen - falls doch dann können Sie diesen im angegebenen Format eintragen.

Klicken Sie auf Weiter, und die fehlenden Software-Komponenten und Treiber werden automatisch aus dem Netz geladen und installiert.

Danach erfolgt die Installation und Einrichtung des GRUB-Bootloaders... Bei einem System mit Legacy-Support werden Sie gefragt, ob GRUB im Master Boot Record, kurz MBR, installiert werden soll - Antworten Sie mit Ja und wählen im nächsten Schritt die Systemplatte aus.

Danach wird die Installation komplettiert, und Sie können mit einem letzten Klick auf Weiter das System neu starten, nachdem die Installation abgeschlossen ist.

Nach dem Neustart können wir uns mit dem Usernamen root und dem zuvor vergebenen Passwort anmelden.

Sollten Sie das erste mal mit Linux arbeiten empfehle ich Ihnen unbedingt ein gutes Buch über Linux zu lesen. Da Kali auf Debian bzw. Ubuntu basiert, sollten Sie Bücher zu einer der beiden Distributionen lesen! Andere Linux-Distributionen können beispielsweise andere Tools verwenden oder auch teilweise Konfigurationsdateien anders benennen oder an anderen Orten im System ablegen. Im Grunde sind das nur Details und für einen geübten Linux-User kein Problem. Ein Einsteiger sollte sich zu Beginn aber mit seiner Distro vertraut machen.

Eine komplette Einführung in Linux würde an dieser Stelle allerdings den Rahmen des Buches sprengen. Außerdem gehe ich stark davon aus, dass viele Leser bereits mit Linux vertraut sein werden. Allen Anderen kann ich das Buch "Hacken mit Kali-Linux" (ISBN 978-3746012650) meines Co-Autors Mark B. wärmstens ans Herz legen.

Einrichten vom XFCE-Desktop

Als nächstes will ich Ihnen zeigen wie wir unsere XFCE-Desktops eingerichtet haben. Beim ersten Login werden Sie gefragt, ob Sie mit leeren Leisten oder den Standardvorgaben starten wollen. Wählen Sie an dieser Stelle die Standardvorgaben.

Nach wenigen Augenblicken sehen Sie dann Ihren Desktop mit 2 Leisten (eine oben und eine unten). Bevor wir die Leisten einrichten brauchen wir noch ein paar XFCE-Plugins, die wir vorab noch installieren müssen. Dazu öffnen wir ein Terminal - entweder über das Kommandozeilen-Symbol in der unteren Leiste oder aus dem Anwendungs-Menü oben links. Danach führen wir die zwei Fett hervorgehobenen Befehle aus:

root@kali:~# apt-get update

Holen:1 http://packages.microsoft.com/repos/vscode stable InRelease [2.802 B]

... Ausgabe gekürzt

Holen:6 http://archive-3.kali.org/kali kali-rolling/contrib amd64 Packages [101 kB]

Es wurden 16,4 MB in 3 s geholt (5.981 kB/s).

Paketlisten werden gelesen... Fertig

root@kali:~# apt-get -y install xfce4-*-plugin

Paketlisten werden gelesen... Fertig

Abhängigkeitsbaum wird aufgebaut.

Statusinformationen werden eingelesen.... Fertig

Hinweis: »xfce4-pulseaudio-plugin« wird für das Suchmuster »xfce4-*-plugin« gewählt.

Hinweis: »xfce4-systemload-plugin« wird für das Suchmuster »xfce4-*-plugin« gewählt.

... Ausgabe gekürzt

ayatana-indicator-application (0.5.2-1) wird eingerichtet ...

Trigger für libc-bin (2.27-3) werden verarbeitet ...

Dieser Mechanismus nennt sich übrigens Paketverwaltung und bietet eine sehr komfortable Möglichkeit Software herunterladen und installieren zu lassen. Wie Sie sehen sind hierbei auch Wildcard-Zeichen wie zB * erlaubt um wie hier alle XFCE4-Plugins auf einmal zu installieren. Jetzt erhalten Sie eine Liste aller XFCE-Plugins, die installiert werden und die Frage ob Sie fortfahren wollen - bestätigen Sie dies einfach mit Enter und warten Sie bis alles installiert wurde. apt-get ist der sogenannte Paketmanager unter Kali, damit können Programme, Treiber und sonstige System-Komponenten installiert, aktualisiert und deinstalliert werden.

Das bedeutet, dass sämtliche damit installierten Pakete (Schriften, Treiber, Systemteile oder Anwendersoftware) mit einem Update-Machanismus auf dem aktuellen Stand gehalten werden können. Dies erfolgt übrigens mit apt-get update gefolgt von apt-get upgrade.

Jetzt können wir beginnen die Leisten wie folgt einzurichten:

Klicken Sie die obere Leiste mit der rechten Maustaste an und wählen Sie Im Kontextmenü Leiste und dann im Untermenü Leisteneinstellungen.

Wählen Sie danach den Tab Objekte.

Danach können Sie die Leistenelemente mit dem + Button hinzufügen bzw. mit dem - Button rechts neben der Element-Liste entfernen.

Bei der Programmvielfalt von Kali bietet sich das Whisker-Menü an, da wir damit auch direkt nach einem Programmnamen suchen können.

Über das Orte-Menü haben wir schnellen Zugriff auf die wichtigsten Ordner und ein Starter ist quasi eine Programmverknüpfung.

Die ganzen Überwachungsplugins erlauben es uns die Systemlast und den Ressourcenverbrauch immer im Auge zu haben.

Die Benachrichtigungsfläche, die Uhr und die Aktionsknöpfe mit dem Logout- und Abmelde-Optionen haben ich auch in der oberen Leiste ganz rechts untergebracht. Praktischer Weise verbirgt sich hinter der Uhr auch noch ein Kalender der mit einem Klick geöffnet werden kann.

Sobald Sie die Plugins und Elemente arrangiert haben können Sie mit dem oberen Dropdown-Feld auf die Leiste 2 (die untere Leiste) wechslen.

Die Fensterknöpfe sind Buttons zum Wechseln zwischen geöffneten Fenstern und der Arbeitsflächenumschalter erlaubt es zwischen den virtuellen Bildschirmen zu wechseln.

Nachdem Sie die Leistenelemente auch hier nach Ihrem Geschmack zusammengestellt haben, sollten Sie bei der unteren Leiste auch noch in den Anzeige-Tab wechseln und die Zeilengröße sowie die Länge in % nachjustieren.

Bei der Länge würde ich 100% verwenden, um die Leiste über die ganze Bildschirmbreite zu spannen.

Sobald das erledigt ist, können Sie, jedes einzelne Leisten-Element konfigurieren.

Hierzu klicken Sie das Element mit der rechten Mausraste an und wählen dem Punkt Eigenschaften im Kontext-Menü.

Nach ein paar Grundeinstellungen sieht die obere Leiste in etwa so aus:

Und die untere Leiste wie folgt:

Wenn Sie noch nicht wirklich mit den Geräte-Namen unter Linux vertraut sind, dann ist das Einrichten der Monitoring-Plugins eine gute Übung für Sie.

INSTALLATION VON PYTHON 3, MODULEN UND VS CODE

Installtion unter Windows und Mac OSX

Windows- und Mac-User können die Setup-Datei von https://www.python.org/downloads/ herunterladen und müssen lediglich den Schritten des Installations-Assistenten folgen.

Weitere Python-Module können unter Windows mit Hilfe von Befehlen in der Eingabeaufforderung installiert werden.

Das Schema lautet: py -[VERSION] -m pip install [PAKETNAME] zB:

C:\Users\alicia> py -3.6 -m pip install scapy

OSX-Benutzer hingegen tippen pip3 install [PAKETNAME] ins Terminal ein - zB:

(Das Terminal finden Sie übrigens unter Dienstprogramme im Programme-Ordner im Finder)

alicias-Mac-mini:~ alicia$ pip3 install scapy

Installation unter Linux

Obwohl unter Kali Python in der Version 3 bereits vorinstalliert ist, fehlen pip3 und IDLE. Daher will ich ihnen die Installation stellvertretend für andere Linux-Distros zeigen. Auch hier verwenden wir wieder den Paketmanager. Dazu benötigen wir root-Rechte:

root@kali:~# apt-get install python3 python3-pip idle3

Weitere Python-Module können wir auch als normaler User installieren. Und auch hier kommt wieder das Terminal zum Einsatz:

user@kali:~$ pip3 install scapy

Installation und Einrichten von Visual Studio Code

Unter Linux werden Programme meist in form von Paketen verteilt, und für Debian-basierte Distributionen wie Kali-Linux ist das passende Paketformat .deb. Nachdem wir also die DEB-Datei von https://code.visualstudio.com/download heruntergeladen haben können wir mit cd in das Downloads-Verzeichnis wechseln und die installation mit dpgk -i [PAKETNAME] starten.

root@kali:~# cd Downloads/

root@kali:~/Downloads# dpkg -i code_1.23.1-1525968403_amd64.deb

Vormals nicht ausgewähltes Paket code wird gewählt.

(Lese Datenbank ... 303905 Dateien und Verzeichnisse sind derzeit installiert.)

Vorbereitung zum Entpacken von code_1.23.1-1525968403_amd64.deb ...

Entpacken von code (1.23.1-1525968403) ...

dpkg: Abhängigkeitsprobleme verhindern Konfiguration von code:

code hängt ab von libgconf-2-4; aber:

Paket libgconf-2-4 ist nicht installiert.

dpkg: Fehler beim Bearbeiten des Paketes code (--install):

Abhängigkeitsprobleme - verbleibt unkonfiguriert

Trigger für desktop-file-utils (0.23-3) werden verarbeitet ...

Trigger für mime-support (3.60) werden verarbeitet ...

Fehler traten auf beim Bearbeiten von:

code

In meinem Fall bricht die Installation mit der Fett hervorgehobenen Fehlermeldung ab, da zusätzlich benötigte Pakete fehlen. Hier kommt nun die Paketverwaltung ins Spiel, die mit dem folgenden Befehl die sogenannten Abhängigkeiten auflöst und alle Pakete installiert, die VS Code benötigt um zu laufen.

root@kali:~/Downloads# apt --fix-broken install

Paketlisten werden gelesen... Fertig

Abhängigkeitsbaum wird aufgebaut.

Statusinformationen werden eingelesen.... Fertig

Abhängigkeiten werden korrigiert ... Fertig

Die folgenden zusätzlichen Pakete werden installiert:

gconf-service gconf2-common libgconf-2-4

Die folgenden NEUEN Pakete werden installiert:

gconf-service gconf2-common libgconf-2-4

... Ausgabe gekürzt

libgconf-2-4:amd64 (3.2.6-4.1) wird eingerichtet ...

gconf-service (3.2.6-4.1) wird eingerichtet ...

code (1.23.1-1525968403) wird eingerichtet ...

Trigger für libc-bin (2.27-3) werden verarbeitet ...

Sobald die Installation fertig ist können wir VS Code starten um die Python-Erweiterung zu installieren und einzurichten. Dazu öffnen Sie das Anwendungs-Menü und die Unterrubrik "Entwicklung". Hier sollten Sie das Programm finden.

Starten wir das Programm dann sollten wir zuerst die Python-Erweiterung von Microsoft installieren. Dazu wählen Sie auf der linken Seite des Fensters das Marketplace-Symbol (unterstes Symbol).

Dann können Sie python direkt in das Suchfeld eintragen. Wie Sie sehen werden Ihnen mehrere mögliche Erweiterungen angezeigt. Sie können die anderen gern ausprobieren, aber ich verwende für dieses Buch das Original-Plugin der Firma Microsoft (der Entwickler wird immer unter der Kurzbeschreibung angezeigt). Klicken Sie auf den grünen Installieren-Button und starten Sie VC Code neu wenn Sie dazu aufgefordert werden.

Nach dem Neustart müssen wir noch den Interpreter auswählen. Dazu öffnen Sie die Kommando-Palette mit Strg + Umschalt + P und suchen Sie in dem sich öffnenden Dialogfeld nach "python se".

Sobald Sie die Option "Python: Select Inpertreter" ausgewählt haben sollten Sie folgende Auswahl bekommen:

Wählen Sie hier die Version 3.6 aus. Diese Version werden wir für die meisten Code-Beispiele verwenden.

Der Grund warum ich VisualStudio Code verwende ist vor allem die gute Autovervollständigung für Python, sowie das hohe Maß an Konfigurierbarkeit des Editors. Darüber hinaus lassen sich weitere Plugins für die gängigsten Programmier- und Scriptsprachen installieren.

PYTHON-CRASHKURS

Im Grund ist Python eine sehr einfach zu lernende Sprache. Die folgenden Punkte beschreiben den Ansatz von Python sehr gut:

Die Aufteilung des Codes in Blöcke (was das ist, lernen wir in Kürze) erfolgt durch Einrückungen. Dies zwingt den Entwickler übersichtlich formatierten und zu gut lesbaren Code zu schreiben.

In der Regel wird versucht einen Lösungsweg für ein Problem anzubieten. Auch das sorgt dafür, dass Code einfacher und verständlicher wird - vor allem Code den man nicht selbst geschrieben hat. Mangels anderer Lösungswege werden unterschiedliche Entwickler Probleme auf die gleiche oder zumindest recht ähnliche Weise lösen, und das hilft dabei sich in fremden Code schneller einzuarbeiten.

Die Syntax ist einfach lesbar und sehr allgemeinverständlich gehalten. Darum kann jeder mit Englisch-Grundkenntnissen, mit ein klein wenig Fantasie, Python-Code zumindest ansatzweise verstehen und interpretieren. So stellen sich sehr schnell Lernerfolge ein.

Python erlaubt den Zugriff auf mehr als 100.000 Module, die Funktionen und Klassen (auch das besprechen wir in Kürze) für fast jede Aufgabe zur Verfügung stellen.

Falls nötig kann man in einem gewissen Maße maschinennahe programmieren.

All das macht Python so beliebt - mit wenigen Zeilen Code können Sie in Windesweile kleine Tools schreiben.

Für all diejenigen, die Python-Grundkenntnisse haben, wird dieses Kapitel nicht viel Neues bringen und Sie können es gerne überspringen. Für Python-Anfänger will ich aber zumindest die wichtigsten Grundlagen kurz umreißen, damit Sie den Code-Beispielen in dem folgenden Kapiteln folgen können. Leser mit Erfahrungen in einer anderen Programmiersprache, sollten sich zumindest die Datentypen ansehen!

Für die folgenden Beispiele verwende ich die Python-IDLE. Wenn wir diese Starten, erhalten wir eine interaktive Python-Shell mit der wir im folgenden Arbeiten werden. Dazu tippen Sie in einem Terminal-Fenster einfach python3 ein und bestätigen Sie die Eingabe mit Enter oder öffnen Sie die Python3-IDLE aus dem Anwendungsmenü.

Datentypen & Variablen

a) None

Der Datentyp None kennzeichnet eine Variable als nicht gesetzt und wird wie folgt angelegt:

SyntaxError: invalid syntax

Der Name darf die Zeichen A-Z, a-z, _ und 0-9 enthalten und muss mit einem _ oder Buchstaben beginnen.

>>> print(var2)

2

>>> print(Var2)

Traceback (most recent call last):

File "<pyshell#4>", line 1, in <module>

Var2

NameError: name 'Var2' is not defined

Variablennamen sind case-sensitive, sprich es wird zwischen Groß- und Kleinschreibung unterschieden. Daher meldet der Python-Interpreter an dieser Stelle auch, dass Var2 nicht definiert ist.

Außerdem kann man so eine Variable bewusst wieder auf den Status undefiniert setzen, um einen Wert zu löschen.

>>> 2 * var2

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'

>>> 2 * var2

0

Das macht vor allem dann Sinn, wenn mit der Variable gerechnet werden soll und wir verhindern wollen, dass versehentlich mit falschen Rechenergebnissen weiter gearbeitet wird.

Ist der Wert von var2 auf None gesetzt, dann bricht das Programm die Berechnung 2 * var2 mit einer Fehlermeldung ab. Der Type-Error erklärt uns kurz und knapp, dass int-Werte nicht mit None-Werten multipliziert werden können.

Hätten wir zum resetten der Variable einfach nur 0 verwendet, würde die Berechnung durchgeführt, und das Ergebnis wäre logischer Weise dann auch wieder 0.

b) int

Integer-Werte (kurz int) sind Ganzzahlen.

>>> a + b

16

Hierbei ist die dezimale und hexadezimale (zB 0xF) Schreibweise erlaubt. Das hexadezimale Zahlensystem basiert nicht auf 10, sondern auf 16. Hierbei werden die Buchstaben A-F verwendet. um die Zahlen 10-15 darzustellen. Somit entspricht 0xF der Dezimalzahl 15.

c) float

Float sind Fließkommazahlen. Diese Werte werden in der englischen Schreibweise (Punkt statt Komma) angelegt.

>>> a + b

3.5

>>> a * b

3.0

Natürlich kann man int- und float-Werte in einer Berechnung mischen. Wenn ein float-Wert in der Berechnung vorkommt ist das Ergebnis wieder ein float-Wert, unabhängig davon, ob das Ergebnis eine Ganzzahl wäre oder nicht!

d) String

Zeichenketten (auch Strings genannt) sind der Variablentyp wenn es darum geht Texte zu speichern.

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

NameError: name 'hallo' is not defined

Ohne Anführungzeichen wird das Wort hallo als Variablenname interpretiert und versucht der Variablen a den Wert von der Variablen hallo zuzuweisen. Da diese nicht existiert tritt der NameError auf.

>>> a + " " + b

'hallo welt'

Die Zeichenkette kann in einfachen oder doppelten Anführungzeichen eingeschlossen werden. Darüber hinaus kann man Strings mit dem + Operator zusammenfügen.

>>> csv.split(",")

['Max Muster', 'Musterstr. 1', '1010', 'Wien', '01/123456']

Alles in Python ist ein Objekt - daher kann auch auf einem String eine sogenannte Methode angewandt werden. Hier in diesem Beispiel trennen wir eine CSV-Zeile mit split() an den Beistrichen auf und erzeugen daraus eine Liste. Natürlich gibt es viele weitere nützliche Methoden.

e) Listen

Listen sind eine Ansammlung von Werten, die zusammen unter dem gleichen Namen angesprochen werden können. Dies kann Sinn machen, wenn die Werte zB zu einem Datensatz gehören. Auf die Einzel-Werte wird dann mit einer Index-Zahl zugegriffen.

In Listen können verschiedene Datentypen gemischt werden.

>>> l.append(4)

>>> print(l)

[1, 2.3, 'abc', None, 4]

Mit append()