Feuille de route de programmation système
Une feuille de route pour m'apprendre les principes fondamentaux du développement de compilateurs, de l'ingénierie inverse des logiciels malveillants et du développement du noyau. À noter qu'ils ne concernent que les connaissances fondamentales et ne font de vous un maître en aucune matière. Je choisirai un ou plusieurs des domaines mentionnés ci-dessous pour des recherches ultérieures sur certains sujets spécifiques. Low Level Programming University propose également une bonne liste de ressources à suivre, mais ceci est ma feuille de route personnelle.
Les sujets à étudier ici peuvent ou non être pertinents et peuvent être étudiés selon vos préférences, étant donné que les prérequis sont remplis pour chacun d'eux.
Conditions préalables
Je suppose déjà que vous avez une compréhension de base de l'architecture informatique et une expérience avec au moins un langage de programmation système, quelques bases du fonctionnement de l'assembleur et que vous êtes familier avec n'importe quel système POSIX. Un aperçu détaillé du fonctionnement des ordinateurs au niveau électronique peut être trouvé dans le livre Introduction to Digital Electronics d'Agner Fog. Et pour le travail équivalent au logiciel, vous pouvez vous référer à cpu.land.
Langages de programmation système
Apprenez deux des langages proposés, réalisez quelques projets de base pour vous familiariser avec eux, résolvez quelques exercices de programmation.
- C
- Rouiller
- Apprendre le C++, référence C++
- C++ (vidéo)
Apprenez un peu d'architecture informatique
Apprenez l'architecture informatique basée sur Arm et RISCV pour construire une approche efficace et optimisée pour résoudre les problèmes au niveau matériel.
- David A. Patterson, John L. Hennessy « Architecture informatique : une approche quantitative »
- David A. Patterson, John L. Hennessy "Organisation informatique et conception ARM Edition"
- David A. Patterson, John L. Hennessy "Organisation et conception informatiques Édition RISC-V"
- John Paul Shen, Mikko H. Lipasti "Conception de processeurs modernes : principes fondamentaux des processeurs superscalaires"
- Architecture informatique CMU par CMU Youtube
Apprenez un peu d'assemblage
Prérequis : Découvrir la logique numérique
Si vous n'êtes pas encore familier avec l'assemblage, je vous recommande de consulter quelques tutoriels comme :
- Démarrage rapide x86[MASM]
- Démarrage rapide x86 [NASM]
- Tuteur ASM[NASM]
- Introduction au langage assembleur x86 par Davy sur youtube
- Cours OMU x86_64
- L'art de l'ASM
- Manuels Intel x64
- Explorateur de compilateur : créer des programmes C et lire le démontage aide toujours à faire correspondre les modèles.
- Article par 0x44 inversant pour les nuls afin de pouvoir inverser les crackmes de base.
Après cela, je recommanderais de résoudre des crackmes faciles pour faire de l'exercice. crackmes.one et tryhackme sont des endroits où trouver certains des plus faciles. Les plus difficiles nécessitent encore quelques connaissances en matière de pwning dont je vais parler dans la section exploitation.
Compilateurs
Les conditions préalables incluent une expérience dans la création de projets dans un langage de programmation système et une compréhension approfondie de la mémoire et du processeur.
- Lisez le Livre du Dragon.
- Crafting Interpreters est un bon cours pour les débutants.
- Les modèles d'implémentation du langage fournissent de bonnes informations sur le fonctionnement des compilateurs.
- Stanford Notes CS143 Bons devoirs et notes liés à la conception du compilateur.
- Diapositives et projets CMU
- Compilateurs géniaux
- Créer un langage avec Rust
- Bases de l'analyse de Rust
- Créez un langage de programmation interprété pour une promenade dans les arbres.
- Essayez également d'implémenter un moteur de bytecode pour votre interprète, essayez quelques optimisations et GC.
- Vous pouvez également émuler des machines comme Chip8 ou Nes.
- L'émulation nécessite une connaissance des composants internes de la VM et de la programmation graphique.
- Vous pouvez utiliser SDL comme moteur d'E/S/graphique/son.
- Essayez de créer un langage de programmation compilé ciblant une architecture.
- En savoir plus sur la chaîne d'outils LLVM
- Tutoriel LLVM dans Rust
- Essayez de suivre le tutoriel llvm pour créer votre premier langage de programmation en utilisant le backend llvm.
- Essayez de créer un compilateur juste à temps autour du moteur de bytecode, détectez les régions chaudes et effectuez-les JIT.
- Section langage-dev de mon serveur Discord
Exploitation
Les conditions préalables incluent une expérience en assemblage.
- ike : Manuel de piratage des systèmes
- pwn.college est la meilleure ressource d'apprentissage que j'ai eu jusqu'à présent pour l'exploitation. De l'assemblage à l'exploitation du noyau, il couvre tout.
- Introduction à l'exploitation du développement
- Cauchemar : Introduction à l'exploitation binaire basée sur les CTF.
- CS6265 : Laboratoire d'ingénierie inverse et d'exploitation binaire
- Laboratoires d'exploitation de l'OMU
- Série binexp de LiveOverflow sur YouTube
- Tutoriel par 0xinfection
- Exploiter le développement sur la référence infosec
- Magasin ROP
- Trucs Windows
- Inversion Windows x64
- Programmation API Win32
- Développeur d'exploit Windows
- La chaîne Youtube de Cazz
- Académie de hacking de jeux
- Après avoir découvert certaines exploitations, vous pouvez maintenant résoudre les CTF. Certains d'entre eux incluent :
- pwnable.kr
- Exploiter les VM éducatives
- Jeux de guerre Overthewire couvrant l'exploitation
- Défis HackTheBox basés sur l'exploitation binaire
Piratage du navigateur
Les prérequis incluent une connaissance de haut niveau des composants internes des VM, ainsi qu'une solide compréhension et expérience de l'ingénierie du compilateur.
- Développement
- Créer un analyseur HTML dom de base Rust
- Moteur de navigateur de jouets, moteur de navigateur à partir de zéro
- Machine virtuelle de bytecode JavaScript Andreas Kling
- Analyse du navigateur et JS AST Andreas Kling
- Aperçu intérieur du navigateur moderne
- Blogs à suivre : V8, MozHacks, Webkit
- Documents : Firefox, Chromium, Webkit Wiki
- Compiler Compiler : une série Twitch sur le travail sur un moteur JavaScript
- Graphiques : choisissez une bibliothèque graphique 2D pour votre langue ou votre plate-forme. Vous pouvez sûrement utiliser OpenGL ou Vulkan ?!? pour restituer votre CSS innocent mais croyez-moi, cela n'en vaut pas la peine.
- Skia est un bon logiciel pour Linux et Android (Chrome l'utilise sur Android)
- Direct2D ouais Windows uniquement.
- Cairo et Blend2D Ce sont des plateformes multiplateformes qui méritent d'être examinées.
- CGC hautes performances pour V8
- Aventures dans la compilation JIT
- Spéculation dans JavaScriptCore
- Programmation réseau Rust Networking, Rust std::net, C
- Après avoir appris l'analyse, le rendu et le JIT, vous pouvez désormais créer votre propre navigateur avec des API de base et des fonctionnalités minimales, en suivant les normes Whatwg.
- Exploitation : un excellent moyen de comprendre le fonctionnement d'un navigateur est d'essayer de le pirater : (les prérequis incluent de solides compétences en exploitation binaire)
- Série d'exploitation de navigateur par LiveOverflow | Écrit
- Discussion sur le piratage de l'assemblage Web Black Hat
- Pwn du navigateur sur github
- Exploitation du navigateur Web - Université de Floride
- Parcourez les articles sur les défis CVE ou CTF basés sur les navigateurs ou les environnements d'exécution.
Logiciel malveillant
Les conditions préalables incluent une compréhension de haut niveau de Windows et de solides compétences en ingénierie inverse.
- Analyse pratique des logiciels malveillants
- Bootcamp d'analyse des logiciels malveillants par hackersploit
- CS5138 Analyse des logiciels malveillants, UC
- Les diffusions en direct de Prelude
- Chaîne Youtube de Cr0w
- Après avoir appris les bases de l’inversion et du comportement des logiciels malveillants, vous pouvez maintenant procéder à l’inversion de quelques exemples réels de ceux-ci.
- Laboratoires de Malware Unicorn
- VX Underground - La plus grande collection de codes sources, d'échantillons et d'articles de logiciels malveillants sur Internet.
- Section sur les logiciels malveillants de la référence infosec
- Bazar de logiciels malveillants
Principes fondamentaux du système d'exploitation
Je ne suis pas sûr de vouloir (encore) me lancer dans le développement du noyau, mais les concepts semblent sympas et c'est une bonne idée pour un projet de vacances. Assurez-vous de lire les exigences avant de commencer.
- OS Dev Wiki est l'endroit idéal si vous souhaitez en savoir plus sur le système d'exploitation. C’est bien documenté et cela aide également les yeux à saigner.
- Laboratoires du noyau Linux
- Section des didacticiels du système d'exploitation génial sur github
- Tutoriel de Broken Thorn
- OS en 3 morceaux
- Petit livre sur le système d'exploitation
- Blog OS : Écrire un système d'exploitation dans Rust
- Diapositives et laboratoires Bootlin
- 539kernel : un parcours dans la création d'un noyau de système d'exploitation
- Des trucs à travailler :
- Haïku
- Réagir au système d'exploitation
- Le défi Eudyptula
- Rédox
- Plus de projets de rouille
- Système d'exploitation génial sur github
- Le canal de développement du système d'exploitation de mon serveur Discord pour obtenir plus de ressources et de livres.
Éléments internes de la machine virtuelle
Listes des composants internes de la VM à étudier tout en progressant dans l'ingénierie du compilateur et le développement du navigateur :
- Comment créer une machine virtuelle
- Éléments internes de JS, bytecode de V8
- Architecture de la machine virtuelle Dart
- Structure JVM principale, composants internes de la JVM I, composants internes de la JVM pour débutants
Cours collectifs
Collection de ressources qui comprend 2 ou plusieurs des sujets abordés ci-dessus :
- Nand To Tetris Un cours pour vous apprendre à construire un ordinateur, un système d'exploitation et un compilateur.
- Plongez dans les systèmes Un très bon livre pour vous présenter la programmation système.