Table des matières
- Introduction : Python et l’informatique forensique
- 1. Pourquoi un livre sur le sujet ?
- 1.1 La mutation de l’informatique forensique
- 1.1.1 Des usages toujours plus nombreux et variés
- 1.1.2 Un cadre légal qui évolue à l’échelle planétaire
- 1.2 Une pratique qui se démocratise
- 1.2.1 Des attentes en sécurité et en fiabilité toujours plus grandes
- 1.2.2 De la nécessité de maîtriser ses outils
- 1.1 La mutation de l’informatique forensique
- 2. Présentation du langage
- 2.1 Un langage adapté
- 2.1.1 Python, un langage de script
- 2.1.2 Une interface efficace avec C
- 2.1.3 Une communauté active
- 2.2 Interprétation de Python
- 2.2.1 CPython
- 2.2.2 Autres implémentations
- 2.2.3 URL
- 2.1 Un langage adapté
- 3. Le choix des logiciels
- 3.1 Le choix du système d’exploitation
- 3.1.1 GNU/Linux
- 3.1.2 Le choix d’une distribution
- 3.1.3 Les procédures d’installation dans ce livre
- 3.1 Le choix du système d’exploitation
- 1. Pourquoi un livre sur le sujet ?
- Premiers pas en Python
- 1. Installation de CPython
- 1.1 Avec le gestionnaire de paquets de la distribution GNU/Linux
- 1.1.1 Sur GNU/Linux Debian 9
- 1.1.2 Autres gestionnaires de paquets
- 1.2 Autres méthodes
- 1.2.1 Depuis les sources
- 1.2.2 Avec les binaires fournis sur le site python.org
- 1.3 Exécuter du Python
- 1.3.1 Depuis l’interpréteur interactif
- 1.3.2 Depuis un fichier
- 1.3.3 Hyperliens
- 1.1 Avec le gestionnaire de paquets de la distribution GNU/Linux
- 2. Éléments de syntaxe fondamentaux
- 2.1 Les commentaires
- 2.1.1 Commentaire monoligne
- 2.1.2 Les commentaires multilignes
- 2.2 Variables
- 2.2.1 Nommage
- 2.2.2 Affectation
- 2.3 Les fonctions
- 2.3.1 Appeler une fonction
- 2.3.2 Définir une fonction
- 2.3.3 Fonction lambda
- 2.4 Les objets et leurs instances
- 2.4.1 Rapide rappel sur la programmation orientée objet
- 2.4.2 Créer une instance
- 2.4.3 Accéder aux attributs, appeler une méthode
- 2.4.4 Définir une classe en Python
- 2.4.5 Les méthodes « magiques »
- 2.4.6 Le « modèle objet » de Python
- 2.4.7 Les attributs et les méthodes « de classe »
- 2.4.8 Hyperliens
- 2.1 Les commentaires
- 3. Les types de données essentiels
- 3.1 Les nombres
- 3.1.1 Entiers et flottants
- 3.1.2 Opérations sur les nombres
- 3.1.3 Opérateurs de comparaisons
- 3.1.4 Opérations bits à bits
- 3.1.5 Nombres complexes
- 3.2 Autres types
- 3.2.1 None
- 3.2.2 Booléens
- 3.2.3 Opérateurs booléens
- 3.2.4 Opérateurs d’identité
- 3.3 Itérables
- 3.3.1 Introduction
- 3.3.2 Les tableaux : list
- 3.3.3 Le dépaquetage de séquences
- 3.3.4 Les listes immuables : tuple
- 3.3.5 Les tableaux associatifs : dict
- 3.3.6 Les ensembles : set
- 3.3.7 Les itérateurs
- 3.3.8 Les fonctions de génération
- 3.3.9 Regrouper des arguments de fonctions dans un itérable
- 3.4 Les chaînes de caractères
- 3.4.1 Présentation
- 3.4.2 Fonctions et méthodes des chaînes de caractères
- 3.4.3 La méthode « format »
- 3.4.4 Formater une chaîne avec la syntaxe « printf »
- 3.4.5 Les chaînes d’octets
- 3.4.6 Encode et decode
- 3.4.7 URL
- 3.1 Les nombres
- 4. Les structures de contrôles
- 4.1 Conditionnels et boucles
- 4.1.1 Les branchements conditionnels
- 4.1.2 Les expressions conditionnelles
- 4.1.3 La répétition « tant que » avec while
- 4.1.4 L’itération avec for
- 4.1.5 Les instructions de contrôle de l’itération
- 4.1.6 Le else de boucle
- 4.2 La compréhension de liste
- 4.2.1 L’expression d’une collection
- 4.2.2 L’introduction des conditions
- 4.3 Gestion des exceptions
- 4.3.1 Introduction
- 4.3.2 Les classes d’exceptions de Python
- 4.3.3 Try, Except, Raise
- 4.3.4 else/finally
- 4.1 Conditionnels et boucles
- 5. Mécanismes d’import
- 5.1 Définitions
- 5.1.1 Les modules de Python
- 5.1.2 Les packages en Python
- 5.2 Syntaxe de l’import
- 5.2.1 Le mot-clé « import »
- 5.2.2 Les chemins d’import
- 5.2.3 Le mot-clé « from »
- 5.1 Définitions
- 6. Environnement, dépendances et communauté
- 6.1 Déploiement/installation
- 6.1.1 Présentation
- 6.1.2 Le script setup.py
- 6.1.3 Egg et Wheel
- 6.1.4 Pip
- 6.1.5 Gestionnaire de paquet d’une distribution
- 6.1.6 Hyperliens
- 6.2 Les environnements virtuels avec virtualenv
- 6.2.1 Présentation et mise en garde
- 6.2.2 Installation et utilisation
- 6.3 Qualité du code
- 6.3.1 Les conventions de codage PEP8
- 6.3.2 Utilitaires
- 6.3.3 Hyperliens
- 6.1 Déploiement/installation
- 1. Installation de CPython
- Bibliothèque standard
- 1. Bibliothèques utilitaires
- 1.1 Fonctions utilitaires
- 1.1.1 Afficher avec print
- 1.1.2 Interroger le type d’une variable
- 1.1.3 Obtenir de l’aide avec help
- 1.2 Modules utilitaires de Python
- 1.2.1 Garder une trace de l’exécution des programmes avec logging
- 1.2.2 Analyser les arguments de la ligne de commande avec argparse
- 1.2.3 Parallélisation facile avec multiprocessing.Pool
- 1.2.4 Hyperliens
- 1.1 Fonctions utilitaires
- 2. Opérations de base sur un système de fichiers
- 2.1 Se déplacer et explorer l’arborescence des dossiers
- 2.1.1 Les chemins d’accès : les paths
- 2.1.2 Le dossier courant cwd et le déplacement dans l’arborescence
- 2.1.3 Les fonctions utilitaires sur les chemins de os.path
- 2.1.4 Exploration d’une arborescence avec le module os
- 2.2 Opérations sur les fichiers
- 2.2.1 Ouverture et fermeture d’un fichier
- 2.2.2 stdin, stdout & stderr
- 2.2.3 Lecture et écriture dans un fichier
- 2.2.4 Exemple : réaliser une image disque
- 2.3 Utilitaires
- 2.3.1 Manipulation des fichiers avec le module os
- 2.3.2 Aller plus loin dans la manipulation des fichiers avec shutil
- 2.3.3 Gérer les fichiers temporaires avec tempfile
- 2.1 Se déplacer et explorer l’arborescence des dossiers
- 3. Opérations de base sur le réseau
- 3.1 TCP/UDP
- 3.1.1 Python et les sockets
- 3.1.2 Serveur
- 3.1.3 Client
- 3.1.4 Recevoir et envoyer des données sur un socket
- 3.1.5 Un faux serveur chargen
- 3.2 Le module urllib
- 3.2.1 Introduction
- 3.2.2 Analyse d’URL avec urllib.parse
- 3.2.3 Forger une URL avec urllib.parse
- 3.2.4 Hyperliens
- 3.1 TCP/UDP
- 1. Bibliothèques utilitaires
- Premiers pas dans l’analyse d’un fichier
- 1. Le fichier dans son ensemble
- 1.1 Trouver le type d’un fichier avec les nombres magiques
- 1.1.1 Présentation
- 1.1.2 Installation de python-magic
- 1.1.3 Exemple d’utilisation
- 1.1.4 Hyperliens
- 1.2 Les fonctions de hachage
- 1.2.1 Présentation du concept
- 1.2.2 Le module hashlib de la bibliothèque standard
- 1.2.3 Contrôler l’intégrité des fichiers
- 1.3 Génération de « diff » avec difflib
- 1.3.1 Présentation de diff
- 1.3.2 Le programme GNU diff
- 1.3.3 Générer le diff de deux fichiers avec Python
- 1.3.4 Générer des diff de fichiers binaires
- 1.1 Trouver le type d’un fichier avec les nombres magiques
- 2. Utiliser Python pour lire des métadonnées
- 2.1 De l’importance des métadonnées
- 2.1.1 Définition
- 2.1.2 Quels intérêts pour les métadonnées ?
- 2.2 Lire les informations fournies par un système de fichiers
- 2.2.1 L’espace utilisé
- 2.2.2 Les métadonnées temporelles avec os.path
- 2.2.3 Le système de fichiers vu par le noyau
- 2.2.4 Identifier les liens matériels à l’aide des inodes
- 2.2.5 Hyperliens
- 2.3 Métadonnées de fichiers multimédias avec XMP
- 2.3.1 Le choix du format de métadonnée XMP
- 2.3.2 Installation de python-xmp-toolkit
- 2.3.3 Utilisation de la bibliothèque
- 2.3.4 Présentation rapide de XML
- 2.3.5 Un petit explorateur de métadonnées
- 2.3.6 Hyperliens
- 2.1 De l’importance des métadonnées
- 1. Le fichier dans son ensemble
- Analyser un historique de navigation web
- 1. Bibliothèques HTML et HTTP haut niveau
- 1.1 La bibliothèque requests
- 1.1.1 Présentation
- 1.1.2 Installation
- 1.1.3 Envoyer une requête avec une commande spécifique
- 1.1.4 Passage de paramètres dans l’URL
- 1.1.5 Passage de paramètres pour une requête POST
- 1.1.6 Hyperliens
- 1.2 La bibliothèque Beautiful Soup
- 1.2.1 Présentation
- 1.2.2 Installation
- 1.2.3 Charger du HTML
- 1.2.4 Extraire du contenu
- 1.2.5 Hyperliens
- 1.1 La bibliothèque requests
- 2. Les bases de données SQLite3
- 2.1 SGBD et SQL
- 2.1.1 Les Systèmes de Gestion de Base de Données
- 2.1.2 Structured Query Langage (Langage de requête structurée)
- 2.1.3 Un ORM pour les interfacer tous
- 2.2 SQLite3 un SGBD léger
- 2.2.1 Présentation
- 2.2.2 Les types de données SQLite3
- 2.2.3 Hyperlien
- 2.3 Le module SQLite3
- 2.3.1 Connexion à une base de données
- 2.3.2 Exécuter une requête SQL
- 2.3.3 Les curseurs
- 2.3.4 Hyperliens
- 2.1 SGBD et SQL
- 3. Accéder à l’historique d’un navigateur
- 3.1 L’historique des navigateurs les plus utilisés
- 3.1.1 Introduction
- 3.1.2 Mozilla Firefox
- 3.1.3 Safari®
- 3.1.4 Navigateur Android®
- 3.1.5 Navigateur Chrome™/Chromium™
- 3.1.6 Hyperliens
- 3.2 Écriture d’un module d’accès
- 3.2.1 Organisation générale du code
- 3.2.2 Exécuter la requête selon le navigateur
- 3.2.3 Exemple d’utilisation
- 3.2.4 Récupérer un document HTML
- 3.2.5 Mise en place d’un cache
- 3.2.6 Accélérer l’exécution avec multiprocessing
- 3.2.7 Hyperliens
- 3.3 Utilisations
- 3.3.1 Lister les noms de domaines visités
- 3.3.2 Établir des statistiques sur les en-têtes des documents
- 3.1 L’historique des navigateurs les plus utilisés
- 1. Bibliothèques HTML et HTTP haut niveau
- Partitionnement automatique de données
- 1. L’apprentissage automatique ou apprentissage statistique
- 1.1 Présentation
- 1.1.1 Définition
- 1.1.2 « Supervision » des algorithmes
- 1.2 Le partitionnement non supervisé
- 1.2.1 Présentation de la famille d’algorithmes
- 1.2.2 Principaux algorithmes
- 1.1 Présentation
- 2. Bibliothèques Python
- 2.1 Calcul matriciel optimisé avec NumPy
- 2.1.1 Présentation
- 2.1.2 Installation
- 2.1.3 Le type numpy.array
- 2.1.4 Hyperliens
- 2.2 L’apprentissage automatique avec Scikit-Learn
- 2.2.1 Présentation
- 2.2.2 Installation
- 2.2.3 Le partitionnement de données avec scikit-learn
- 2.2.4 Hyperliens
- 2.3 Afficher des données avec Matplotlib
- 2.3.1 Présentation
- 2.3.2 Installation
- 2.3.3 Afficher un ensemble de données dans un graphique
- 2.3.4 Hyperliens
- 2.1 Calcul matriciel optimisé avec NumPy
- 3. Une première application : regrouper les fichiers par date de création
- 3.1 Représentation des données
- 3.1.1 Description de la problématique
- 3.1.2 Stockage et identification des temps et des chemins
- 3.1.3 Écrire un script pour créer des instances de FilesTime
- 3.1.4 Normalisation des données
- 3.2 Création du modèle et construction des sous-groupes
- 3.2.1 Préambule
- 3.2.2 Création du modèle avec MiniBatchKmeans
- 3.2.3 Création du modèle avec BIRCH
- 3.2.4 Création du modèle avec DBSCAN
- 3.2.5 Création des groupes à partir des modèles
- 3.3 Écrire une interface textuelle
- 3.3.1 Présentation de l’interface
- 3.3.2 Les fonctions utilitaires d’une interface textuelle
- 3.3.3 Une représentation des modèles pour l’interface
- 3.3.4 Le module ui
- 3.3.5 Afficher les données dans un graphique
- 3.3.6 Le menu principal et la boucle de traitement
- 3.3.7 Utilisation
- 3.1 Représentation des données
- 1. L’apprentissage automatique ou apprentissage statistique
- Extraire les sujets d’un ensemble de textes
- 1. Le traitement automatique des langues naturelles
- 1.1 Introduction
- 1.1.1 Présentation
- 1.1.2 La modélisation de sujets
- 1.2 Les langues naturelles en Python avec NLTK
- 1.2.1 Présentation
- 1.2.2 Installation
- 1.2.3 Hyperliens
- 1.3 La modélisation de sujets avec gensim
- 1.3.1 Présentation
- 1.3.2 Installation
- 1.3.3 Hyperliens
- 1.4 Les autres bibliothèques utilisées dans ce chapitre
- 1.4.1 Les caractères accentués avec unidecode
- 1.4.2 La progression avec tqdm
- 1.4.3 Hyperliens
- 1.1 Introduction
- 2. Modélisation de sujet avec LDA et LSI
- 2.1 Extraire une liste de mots d’un texte
- 2.1.1 Analyse lexicale ou tokenization
- 2.1.2 Suppression des caractères accentués et de la ponctuation
- 2.1.3 Suppression des mots vides
- 2.1.4 Une première version du module « corpus »
- 2.2 Sac de mots et TF-IDF
- 2.2.1 Introduction
- 2.2.2 Génération d’un dictionnaire de mots
- 2.2.3 Création de « sacs de mots »
- 2.2.4 Le modèle TF-IDF de gensim
- 2.2.5 Hyperliens
- 2.3 Les modèles gensim pour LDA et LSI
- 2.3.1 Génération du modèle
- 2.3.2 Regrouper les documents par sujets
- 2.3.3 Récupération des sujets
- 2.1 Extraire une liste de mots d’un texte
- 3. Exemples d’application
- 3.1 Depuis l’historique d’un navigateur web
- 3.1.1 Réutilisation de l’analyse de l’historique
- 3.1.2 Adaptation de l’interface d’extraction
- 3.1.3 Écrire un script doté d’une interface
- 3.2 Depuis des fichiers textes
- 3.2.1 Utilisation de LibreOffice comme convertisseur
- 3.2.2 TF-IDF depuis un système de fichier
- 3.2.3 Un script et une interface
- 3.2.4 Hyperliens
- 3.1 Depuis l’historique d’un navigateur web
- 1. Le traitement automatique des langues naturelles
- Inspection des processus du noyau Linux
Soyez le premier à donner votre avis sur “Python et l’analyse forensique Récupérer et analyser les données produites par les ordinateurs”