- Livres et vidéos
- Python et l'analyse forensique - Récupérer et analyser les données produites par les ordinateurs
Python et l'analyse forensique Récupérer et analyser les données produites par les ordinateurs
Présentation
Ce livre propose une approche en deux temps : il commence par une introduction au langage Python puis présente comment l'utiliser pour récupérer et manipuler les données produites par nos ordinateurs. Les auteurs traitent ainsi de thématiques variées allant de l'inspection de la mémoire vive des processus, au fonctionnement interne de logiciels grand public ou à l'extraction de l'historique de navigateur web. Différents outils sont étudiés : des plus basiques avec la bibliothèque libmagic, aux technologies les plus récentes comme l'apprentissage automatique avec scikit-learn et son écosystème issu du calcul scientifique.
Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.
Les chapitres du livre :
Avant-propos – Introduction : Python et l'informatique forensique – Premiers pas en Python – Bibliothèque standard – Premiers pas dans l'analyse d'un fichier – Analyser un historique de navigation web – Partitionnement automatique de données – Extraire les sujets d'un ensemble de textes – Inspection des processus du noyau Linux
Quizinclus dans
la version en ligne !
- Testez vos connaissances à l'issue de chaque chapitre
- Validez vos acquis
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.1 La mutation de l'informatique forensique
- 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
- 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.1 CPython
- 2.2.2 Autres implémentations
- 2.2.3 URL
- 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
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.1 Avec le gestionnaire de paquets de la distribution GNU/Linux
- 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
- 2.1 Les commentaires
- 2.1.1 Commentaire monoligne
- 2.1.2 Les commentaires multilignes
- 2.2.1 Nommage
- 2.2.2 Affectation
- 2.3.1 Appeler une fonction
- 2.3.2 Définir une fonction
- 2.3.3 Fonction lambda
- 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
- 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.1 None
- 3.2.2 Booléens
- 3.2.3 Opérateurs booléens
- 3.2.4 Opérateurs d’identité
- 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.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
- 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.1 L’expression d’une collection
- 4.2.2 L’introduction des conditions
- 4.3.1 Introduction
- 4.3.2 Les classes d’exceptions de Python
- 4.3.3 Try, Except, Raise
- 4.3.4 else/finally
- 5.1 Définitions
- 5.1.1 Les modules de Python
- 5.1.2 Les packages en Python
- 5.2.1 Le mot-clé « import »
- 5.2.2 Les chemins d’import
- 5.2.3 Le mot-clé « from »
- 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.1 Présentation et mise en garde
- 6.2.2 Installation et utilisation
- 6.3.1 Les conventions de codage PEP8
- 6.3.2 Utilitaires
- 6.3.3 Hyperliens
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.1 Fonctions utilitaires
- 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
- 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.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.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
- 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.1 Introduction
- 3.2.2 Analyse d'URL avec urllib.parse
- 3.2.3 Forger une URL avec urllib.parse
- 3.2.4 Hyperliens
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.1 Trouver le type d'un fichier avec les nombres magiques
- 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
- 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.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.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
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.1 La bibliothèque requests
- 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
- 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.1 Présentation
- 2.2.2 Les types de données SQLite3
- 2.2.3 Hyperlien
- 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
- 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.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.1 Lister les noms de domaines visités
- 3.3.2 Établir des statistiques sur les en-têtes des documents
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.1 Présentation
- 1.2 Le partitionnement non supervisé
- 1.2.1 Présentation de la famille d'algorithmes
- 1.2.2 Principaux algorithmes
- 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.1 Présentation
- 2.2.2 Installation
- 2.2.3 Le partitionnement de données avec scikit-learn
- 2.2.4 Hyperliens
- 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
- 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.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.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
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.1 Introduction
- 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
- 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.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.1 Génération du modèle
- 2.3.2 Regrouper les documents par sujets
- 2.3.3 Récupération des sujets
- 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.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
Inspection des processus du noyau Linux
- 1. Introduction
- 1.1 Ptrace et le noyau Linux
- 1.1.1 Exécutables et processus
- 1.1.2 La mémoire vue par un processus
- 1.1.3 Présentation de ptrace
- 1.1.4 Hyperliens
- 1.1 Ptrace et le noyau Linux
- 2.1 La bibliothèque python-ptrace
- 2.1.1 Introduction
- 2.1.2 Installation de python-ptrace
- 2.1.3 Hyperliens
- 2.2.1 Démarrer un nouveau processus
- 2.2.2 Attacher un processus existant
- 2.2.3 Mise en pause et reprise de l’exécution
- 2.2.4 Récupérer l’état des registres
- 2.2.5 Reprise d’exécution conditionnelle
- 2.2.6 Hyperliens
- 2.3.1 Généralités sur l’organisation de la mémoire pour un processus
- 2.3.2 Les maps mémoire
- 2.3.3 L’interface d’accès à la mémoire de python-ptrace
- 2.3.4 Hyperliens
- 3.1 Extraire le texte
- 3.1.1 Objectif du programme
- 3.1.2 La fonction d’extraction des chaînes de caractères
- 3.1.3 Récupérer les maps à partir d’un PID
- 3.1.4 Initialisation et appel
- 3.2.1 Présentation de l’approche
- 3.2.2 La classe MemState
- 3.2.3 Un script et une interface pour MemState
- 3.2.4 Exemple d’utilisation
- 3.2.5 Hyperliens
- Index
Auteurs
Mehdi BENNISEn savoir plus
Mehdi Bennis est fasciné par les nouvelles technologies depuis son plus jeune âge. Il a commencé par s'intéresser à l'électronique et l'électricité en bricolant des objets par lui-même pour ensuite se focaliser sur les ordinateurs. À 19 ans, il obtient un DUT en réseaux et télécommunication à l'IUT de Colmar. Pour compléter ses compétences réseau, il intègre ensuite l'Université de Technologie de Belfort-Montbéliard (UTBM) en alternance au sein de l'entreprise Bull S.A.S avec laquelle il découvre le langage de programmation Python. Actuellement ingénieur de développement dans la division « Big Data and Security » dans cette même entreprise, il suit de très près les différentes évolutions technologiques.
Yann WEBEREn savoir plus
Autodidacte et engagé dans le logiciel libre, Yann Weber s'intéresse à la programmation dès son plus jeune âge et reste guidé depuis par une interrogation : pourquoi et comment les ordinateurs fonctionnent ? Cette interrogation le pousse à s'intéresser tout autant aux problématiques bas niveau, de l'écriture de compilateurs au fonctionnement d'un système d'exploitation, à celles de plus haut niveau, comme le traitement de textes structurés ou le « web ». L'obtention d'un DUT en informatique est un premier pas pour lui vers l'utilisation de ses compétences dans un cadre professionnel. Après un poste d'ingénieur au sein du pôle Recherche et Développement de SFR puis au sein de la recherche publique française (CNRS), Yann Weber est aujourd'hui développeur freelance et continue à être fasciné par son outil de travail.
Caractéristiques
- Niveau Initié à Confirmé
- Nombre de pages 441 pages
- Parution mars 2019
- Livre (broché) - 17 x 21 cm
- ISBN : 978-2-409-01790-2
- EAN : 9782409017902
- Ref. ENI : RIPYTFO
- Niveau Initié à Confirmé
- Parution mars 2019
- HTML
- ISBN : 978-2-409-01829-9
- EAN : 9782409018299
- Ref. ENI : LNRIPYTFO
Téléchargements
- Des fichiers complémentaires (67,8 Ko)