Passer aux informations sur le produit
Structure interne et rétro-ingénierie de l'assemblage du bras
Structure interne et rétro-ingénierie de l'assemblage du bras
Description
Introduction au livre
Cet ouvrage est indispensable aux ingénieurs en rétro-ingénierie et en sécurité qui analysent les applications pour les systèmes ARM au niveau de l'assemblage. Pour les experts en sécurité ARM cherchant à identifier et à corriger les vulnérabilités des systèmes ARM, ce livre présente le jeu d'instructions ARMv8-A et le processus de rétro-ingénierie à des fins de sécurité et de défense.
Ensuite, nous présenterons le format de fichier ELF et le fonctionnement interne du système d'exploitation, et nous apprendrons en détail les bases de l'architecture ARM et les instructions A32 et A64.
Nous proposons également une analyse approfondie du processus de rétro-ingénierie associé.
Enfin, jetons un coup d'œil rapide au fichier binaire du logiciel malveillant macOS compilé pour le SoC M1 basé sur ARM.
Ce livre vous permettra d'acquérir une compréhension approfondie des instructions ARM et des modèles de flux de contrôle grâce à la rétro-ingénierie de logiciels compilés pour l'architecture ARM.
  • Vous pouvez consulter un aperçu du contenu du livre.
    Aperçu

indice
Partie 1.
Structure interne de l'assemblage du bras

Chapitre 1.
Introduction à la rétro-ingénierie


__Introduction à l'assemblage
____bits et octets
encodage de caractères ____
Code machine et assembleur
Programmation en assembleur
Assembleur croisé
__langage de haut niveau
__Démontage
__Décompiler

Chapitre 2. À l'intérieur du format de fichier ELF

__Structure du programme
__Haut niveau vs.
langage de bas niveau
Procédure de compilation
____Compilation croisée pour d'autres architectures
____Assemblage et liaison
Aperçu des fichiers __ELF
En-tête de fichier __ELF
Champs d'information d'en-tête de fichier ____ELF
____Champ de la plateforme cible
champ de point d'entrée ____
champ d'emplacement de la table ____
En-tête du programme __ELF
En-tête du programme ____PHDR
En-tête du programme ____INTERP
____CHARGER l'en-tête du programme
En-tête du programme ____DYNAMIQUE
____NOTE En-tête du programme
En-tête du programme ____TLS
En-tête du programme ____GNU_EH_FRAME
En-tête du programme ____GNU_STACK
En-tête du programme ____GNU_RELRO
En-tête de section __ELF
____section méta ELF
Section du tableau des chaînes de caractères
Section du tableau des symboles
Section ELF de la semaine ____
______.section de texte
______.section données
______.section bss
______.section de données
______.tdata et
__symbole
______symbole global vs.
Symboles régionaux
______symbole faible
Version symbolique
Cartographie des symboles
Sections dynamiques et chargement dynamique
Chargement des dépendances
Relocalisation du programme
Déplacement statique
Relocalisation dynamique
Table de compensation globale (GOT)
Tableau des liens de procédure (PLT)
Section d'initialisation et d'arrêt du programme ELF
Séquence d'initialisation et d'arrêt
__Stockage local du thread
Modèle d'accès TLS appliqué à la région
Modèle d'accès TLS préliminaire
Modèle d'accès TLS général-dynamique
Modèle d'accès TLS régional-dynamique

Chapitre 3.
Notions de base des systèmes d'exploitation


Aperçu de l'architecture du système d'exploitation
____Mode utilisateur vs.
Mode noyau
____processus
____appel système
______objets et poignées
____fil
Gestion de la mémoire des processus
page de mémoire
Protection de la mémoire
Mémoire anonyme et cartographiée
______Fichiers et modules mappés en mémoire
____Randomiser la disposition de l'espace d'adressage
Implémentation de la pile
____mémoire partagée

Chapitre 4.
Architecture Arm


Architecture et profil
Architecture __Armv8-A
____Niveau d'exception
Extension de zone de confiance Armv8-A
Modifier le niveau d'exception ______
____État d'exécution d'Armv8-A
État d'exécution de __AArch64
Jeu d'instructions ____A64
____AArch64 registre
compteur de programme ______
______pointeur de pile
registre zéro
______Lien S'inscrire
______pointeur de cadre
______Registre de la plateforme (x18)
Registre des appels de procédure interne
______ Registres SIMD et à virgule flottante
______registre du système
____PSTATE
État d'exécution de __AArch32
____Jeux d'instructions A32 et T32
Jeu d'instructions ______A32
Jeu d'instructions ______T32
Commutation du jeu d'instructions
____Registre AArch32
compteur de programme ______
______pointeur de pile
______pointeur de cadre
______Lien S'inscrire
______procédure registre d'appels internes (IP, r12)
____Registre de l'état actuel du programme
Registre d'état des demandes
____Registre d'état d'exécution
Registre d'état du jeu d'instructions
______Registre d'état des blocs informatiques (ITSTATE)
État indien ______
bits de masque de mode et d'exception

Chapitre 5.
Instructions de traitement des données


Opérations de décalage et de rotation
____décalage logique vers la gauche
Décalage logique vers la droite
Décalage arithmétique vers la droite
Rotation à droite
Rotation étendue à droite
____formulaire d'instructions
______passe directement à la forme constante
Décalage en format de registre ______
Opérations de manipulation de champs de bits
______Déplacer le champ de bits
______ opérations d'extension de signe et de zéro
Extraire et insérer ______ champs de bits
Opérations logiques
____ bit ET
______Instruction TST
______ un peu clair
____ bit OU
______ bit OU PAS
____ bit exclusif OU
______Instruction TEQ
______Exclusif OU PAS
opérations arithmétiques
____Addition et soustraction
______soustraction inversée
____comparaison
Comportement opérationnel des instructions ______CMP
opération de multiplication
Multiplication dans ____A64
Multiplication dans ____A32/T32
______Multiplication du mot le moins significatif
______Multiplication des mots les plus importants
______Multiplication de demi-mots
______Multiplication vectorielle (duale)
multiplication ______long (64 bits)
opération de division
Opération de déplacement
Mouvement constant direct
Décalage constant direct et MOVT dans ______A32/T32
Déplacement constant direct via MOVZ, MOVK dans ______A64
Déplacer ____registre
Déplacez-vous avec ____PAS

Chapitre 6.
instructions d'accès à la mémoire


Aperçu des instructions
__Mode d'adressage et type de décalage
Adressage décalé
Décalage constant direct
Décalage du registre ______
Mode d'indexation du dictionnaire
Exemple de mode d'indexation de dictionnaire
____Adressage de l'index des articles
Exemple d'adressage post-index
Constante de chaîne (relative au PC) adressage
Charge ______constante
Charger l'adresse ______ dans le registre
Instructions de chargement et de stockage
Charger et enregistrer ____ mots ou doubles mots
____Chargement et stockage d'un demi-mot/octet
Exemple d'utilisation de ______load et save
____Chargement et sauvegarde multiples (A32)
Exemples de STM et LDM
Un exemple plus complexe utilisant ______STM et LDM
____Chargement et sauvegarde en paire (A64)

Chapitre 7.
Exécution conditionnelle


Aperçu de l'exécution conditionnelle
__code de condition
____NZCV drapeau de condition
______Dépassement d'entier signé vs.
Dépassement de capacité d'entier non signé
____code de condition
Instructions conditionnelles
Instruction « Si-Alors » (IT) de Thumb
Instructions pour définir le drapeau
____instruction suffixe 'S'
______S suffixe pour les instructions d'addition et de soustraction
______S suffixe des instructions de décalage logique
Suffixe S de l'instruction de multiplication ______
______S suffixe pour les autres instructions
Instructions pour tester et comparer
______Comparaison (CMP)
______Comparaison négative (CMN)
Bit de test (TST)
Test d'équivalence (TEQ)
__Instruction de sélection conditionnelle
__Instruction de comparaison conditionnelle
instruction conditionnelle avec opérateur logique ET utilisant ____CCMP
instruction conditionnelle avec opérateur logique OU utilisant ____CCMP

Chapitre 8.
Flux de contrôle


__instruction de branche
____Branchage et bouclage conditionnels
____Tests et comparaisons de branches
____Tableau Branche (T32)
changements de branche et de statut
Branche de sous-programme ____
__Fonctions et sous-programmes
Procédure d'appel standard
____Volatil vs.
registres non volatils
Arguments et valeurs de retour
____Transmettre une valeur importante
Fonctions des feuilles et des non-feuilles
______fonction feuille
fonction non-feuille ______
______Prologue et épilogue

Partie 2.
rétro-ingénierie

Chapitre 9.
Environnement Arm


__Planche à bras
Émulation utilisant __QEMU
Émulation en mode utilisateur QEMU
Émulation complète du système QEMU
Émulation de firmware

Chapitre 10.
Analyse statique


Outil d'analyse statique
outil en ligne de commande ____
____Désassembleur et décompilateur
Nuage Ninja Binaire
Exemple d'appel par référence
__Analyse du flux de contrôle
Fonction principale
____sous-programme
Convertir en ____ caractère
instruction ____if
division du quotient ____
boucle ____for
__Analyse d'algorithmes

Chapitre 11.
Analyse dynamique


Débogage en ligne de commande
Commandes GDB
____GDB multi-architecture
Extension GDB : GEF
______installation
______interface
Commandes GEF utiles
Vérification de la mémoire
Surveillance de la zone mémoire
______Analyseur de vulnérabilité
______checksec
____Lader2
______Débogage
Débogage à distance
____Échelle2
____Aida Pro
Débogage de la corruption de mémoire
Débogage des processus avec GDB

Chapitre 12.
suivi inversé des logiciels malveillants arm64 Mac OS


__Connaissances de base
____Binaires Mac OS arm64
____Mac OS Bonjour le monde (arm64)
__Recherche de binaires arm64 malveillants
Analyse de logiciels malveillants __arm64
____Analyser les technologies de prévention
____Structure logique anti-débogage (utilisant ptrace)
____Structure logique de prévention du débogage (utilisant sysctl)
____Structure logique de prévention des VM (via l'état SIP et la détection des artefacts de VM)
__conclusion

Avis de l'éditeur
◈ Public cible de ce livre ◈

Ce guide complet, destiné aussi bien aux débutants qu'aux professionnels chevronnés, offre une introduction intuitive à un langage de processeur qui gagne rapidement en popularité et en demande.
Il aide les lecteurs à améliorer considérablement leurs compétences en matière de détection et d'analyse des vulnérabilités, de développement d'exploits et d'analyse de logiciels malveillants en présentant facilement les informations nécessaires.

◈ Structure de ce livre ◈

Ce livre explique ce que sont les instructions et d'où elles viennent.
Le chapitre 2 présente brièvement le format de fichier ELF, ses sections et le processus de compilation.
L'analyse binaire ne peut être complète sans comprendre l'environnement d'exécution ; le chapitre 3 aborde donc les principes fondamentaux du système d'exploitation.

Au chapitre 4, nous nous préparerons à approfondir l'architecture Arm en nous basant sur les connaissances de base présentées ci-dessus.
Le chapitre 5 examine les instructions de traitement de données les plus couramment utilisées, et le chapitre 6 donne un aperçu des instructions d'accès à la mémoire.
Cette instruction est connue sous le nom d'architecture Load/Store et est la plus courante dans l'architecture Arm.
Les chapitres 7 et 8 traitent de l'exécution conditionnelle et du contrôle de flux.
Il s'agit de l'élément le plus important en rétro-ingénierie.

Le chapitre 9 présente un intérêt particulier pour les ingénieurs en rétro-ingénierie.
L'environnement Arm comporte de nombreux formats différents, il est donc important de les connaître, surtout si vous devez effectuer une analyse dynamique ou analyser des binaires en cours d'exécution.

Grâce aux informations mentionnées jusqu'à présent, vous êtes bien équipé pour vous lancer dans votre prochaine aventure de rétro-ingénierie.
À cette fin, le chapitre 10 présente les outils d'analyse statique courants.
Il fournit également des exemples d'analyse statique pratiques et simples que vous pouvez suivre étape par étape.

La rétro-ingénierie devient fastidieuse sans une analyse dynamique permettant d'observer le comportement du programme pendant son exécution.
Au chapitre 11, nous découvrirons les outils d'analyse dynamique fréquemment utilisés et les commandes utiles qui peuvent être utilisées pendant l'analyse, et nous examinerons des exemples.
Nous concluons ce chapitre par deux exemples pratiques de débogage, réalisables à l'aide de GDB.
L'un des deux exemples concerne le débogage d'une vulnérabilité de corruption de mémoire, et l'autre le débogage de processus.

La rétro-ingénierie est utile dans de nombreux cas.
Les jeux d'instructions Arm et les techniques de rétro-ingénierie peuvent être utilisés pour étendre cette technologie à d'autres domaines.
Par exemple, l'analyse des vulnérabilités ou l'analyse des logiciels malveillants.

Bien que la rétro-ingénierie soit une compétence essentielle pour les analystes de logiciels malveillants, il est également important de se familiariser avec l'environnement dans lequel un échantillon de logiciel malveillant donné a été compilé.
À cette fin, un chapitre sur l'analyse des logiciels malveillants Mac OS arm64 est également inclus (chapitre 12).
Ce chapitre a été écrit par Patrick Wardle, auteur de The Art of Mac Malware (No Starch Press, 2022).
Contrairement aux chapitres précédents, celui-ci ne porte pas sur l'assemblage Arm.
Nous présentons plutôt des techniques anti-analyse courantes utilisées par les logiciels malveillants macOS pour éviter l'analyse.
L’objectif de ce chapitre est d’examiner les logiciels malveillants macOS compatibles avec les processeurs Apple Silicon M1/M2.
Il constituera donc un bon point de départ pour les ingénieurs souhaitant suivre et analyser les logiciels malveillants macOS basés sur l'architecture Arm.

◈ Note de l'auteur ◈

L'objectif de ce livre est de vous familiariser avec le mode d'emploi d'Arm et de vous fournir les connaissances nécessaires pour l'appliquer à votre travail.
J'ai passé beaucoup de temps à analyser le manuel de référence d'Arm et à répertorier les instructions les plus fréquemment utilisées ainsi que leurs formes grammaticales.
Cependant, ce livre ne se contente pas de recenser les instructions Arm les plus fréquemment utilisées.
Il contient des explications que vous ne trouverez nulle part ailleurs, même pas dans le manuel Arm.
Les descriptions de base des instructions dans le manuel Arm sont excessivement simplistes. Si cela peut suffire pour des instructions très simples comme MOV ou ADD, les instructions qui effectuent des opérations complexes et fréquemment utilisées peuvent être difficiles à comprendre avec une simple description.
C’est pourquoi bon nombre des instructions mentionnées dans ce livre sont accompagnées de schémas qui illustrent le fonctionnement sous-jacent.

Si vous débutez dans le rétro-ingénierie, vous devez comprendre les formats de fichiers binaires, les sections, la manière dont le code source est compilé en code machine, les environnements de dépendance, etc.
Par manque de place et de temps, cet ouvrage ne peut pas couvrir tous les formats de fichiers et systèmes d'exploitation.
Nous nous concentrerons donc ici sur l'environnement Linux et le format de fichier ELF.
Les instructions Arm sont indépendantes de la plateforme et du format de fichier.
Même si vous effectuez une rétro-ingénierie d'un binaire Arm compilé pour macOS ou Windows, les instructions signifient la même chose.

Il m'a fallu plus de deux ans pour écrire ce livre.
J’ai pris un stylo pour la première fois en mars 2020, lorsque la pandémie a frappé le monde et que tout le monde était en quarantaine.
Je suis tellement heureuse qu'après deux ans d'efforts acharnés, ce livre ait enfin vu le jour.
Je remercie tous nos lecteurs pour leur confiance continue et j'espère que ce livre vous sera utile, facilitant votre parcours de rétro-ingénierie plutôt que de l'alourdir.

◈ Note du traducteur ◈

Le langage assembleur ARM est devenu un composant essentiel de nombreux systèmes embarqués et appareils mobiles modernes.
On peut donc affirmer que nous vivons l'âge d'or des processeurs ARM.
Ce livre propose une analyse approfondie de la structure interne et des principes de fonctionnement des processeurs ARM, vous aidant ainsi à acquérir des compétences en rétro-ingénierie.
Grâce à cela, les traducteurs ont pu acquérir une compréhension plus approfondie du jeu d'instructions ARM lors de la traduction de cet ouvrage.

La première partie présente les concepts fondamentaux et la structure de l'assembleur ARM. Après avoir abordé les bases du langage assembleur ARM, elle explore le format de fichier ELF, la structure fondamentale du système d'exploitation et l'architecture ARM, offrant ainsi aux lecteurs une base solide.
Il aborde également des sujets tels que le traitement des données et les instructions d'accès à la mémoire, l'exécution conditionnelle et le flux de contrôle, fournissant les connaissances pratiques nécessaires à l'utilisation du langage assembleur ARM.
La deuxième partie explique comment analyser et déboguer du code dans les environnements ARM à l'aide de techniques de rétro-ingénierie. Cet ouvrage détaille l'émulation sur cartes ARM avec QEMU, l'utilisation d'outils d'analyse statique et dynamique, ainsi que l'analyse de binaires ARM64 sous macOS, offrant ainsi des compétences pratiques précieuses pour une utilisation concrète.
Ce livre allie théorie et pratique, permettant aux lecteurs de maîtriser efficacement le langage assembleur ARM et la rétro-ingénierie.
Les exemples et les exercices proposés dans chaque chapitre permettront aux lecteurs de développer leur capacité à résoudre divers problèmes susceptibles de se présenter dans des situations réelles.
J'espère que ce livre sera d'une grande aide à tous ceux qui souhaitent apprendre le langage assembleur ARM et la rétro-ingénierie.
SPÉCIFICATIONS DES PRODUITS
- Date d'émission : 24 juillet 2024
- Nombre de pages, poids, dimensions : 596 pages | 188 × 235 × 27 mm
- ISBN13 : 9791161758602
- ISBN10 : 1161758607

Vous aimerez peut-être aussi

카테고리