Roadmap zur Systemprogrammierung
Eine Roadmap, um mir die Grundlagen der Compiler-Entwicklung, des Malware-Reverse-Engineerings und der Kernel-Entwicklung beizubringen. Bitte beachten Sie, dass sie nur für grundlegende Kenntnisse gedacht sind und Sie nicht zum Meister dieser Kenntnisse machen. Ich werde einen oder mehrere der unten genannten Bereiche für die spätere Forschung zu bestimmten Themen auswählen. Die Low Level Programming University verfügt ebenfalls über eine gute Liste an Ressourcen, denen ich folgen kann, aber dies ist mein persönlicher Fahrplan.
Die hier zu studierenden Themen können angemessen sein oder auch nicht und können nach Ihren Wünschen studiert werden, vorausgesetzt, dass die Voraussetzungen für jedes einzelne Thema erfüllt werden.
Voraussetzungen
Ich gehe bereits davon aus, dass Sie über grundlegende Kenntnisse der Computerarchitektur und Erfahrung mit mindestens einer Systemprogrammiersprache verfügen, einige Grundlagen zur Funktionsweise von Assembler haben und mit jedem POSIX-System vertraut sind. Eine ausführliche Darstellung der Funktionsweise von Computern auf elektronischer Ebene finden Sie im Buch Introduction to Digital Electronics von Agner Fog. Und für die softwareäquivalente Arbeit können Sie sich auf cpu.land beziehen.
Systemprogrammiersprachen
Lernen Sie zwei beliebige der angegebenen Sprachen, erstellen Sie einige grundlegende Projekte, um sich damit vertraut zu machen, und lösen Sie einige Programmierübungen.
- C
- Rost
- Lernen Sie C++, C++-Referenz
- C++ (Video)
Lernen Sie etwas über Computerarchitektur
Lernen Sie die Arm- und RISCV-basierte Computerarchitektur kennen, um einen effizienten und optimierten Ansatz zur Lösung der Probleme auf Hardwareebene zu entwickeln
- David A. Patterson, John L. Hennessy „Computerarchitektur: Ein quantitativer Ansatz“
- David A. Patterson, John L. Hennessy „Computer Organization and Design ARM Edition“
- David A. Patterson, John L. Hennessy „Computer Organization and Design RISC-V Edition“
- John Paul Shen, Mikko H. Lipasti „Modernes Prozessordesign: Grundlagen superskalarer Prozessoren“
- CMU-Computerarchitektur von CMU Youtube
Lernen Sie etwas Montage
Voraussetzungen: Erfahren Sie mehr über digitale Logik
Wenn Sie mit der Montage noch nicht vertraut sind, würde ich Ihnen empfehlen, sich einige Tutorials anzusehen, wie zum Beispiel:
- x86-Schnellstart[MASM]
- x86-Schnellstart [NASM]
- ASM-Tutor[NASM]
- Einführung in die x86-Assemblersprache von Davy auf YouTube
- OMU x86_64-Lektionen
- Die Kunst des Asm
- Handbücher für Intel x64
- Compiler-Explorer: Das Erstellen von C-Programmen und das Lesen der Disassemblierung hilft immer dabei, Muster abzugleichen.
- Artikel von 0x44, der es Dummys ermöglicht, grundlegende Crack-Meldungen umzukehren.
Danach würde ich empfehlen, einfache Übungsaufgaben zu lösen. Crackmes.one und tryhackme sind Orte, an denen man einige der einfacheren finden kann. Für schwierige Aufgaben sind immer noch einige Pwning-Kenntnisse erforderlich, auf die ich im Abschnitt „Ausbeutung“ eingehen werde.
Compiler
Zu den Voraussetzungen gehören Erfahrung in der Erstellung von Projekten in einer Systemprogrammiersprache und ein tiefes Verständnis von Speicher und CPU.
- Lies das Drachenbuch.
- „Crafting Interpreters“ eignet sich gut für Anfänger.
- Language Implementation Patterns bietet einige gute Einblicke in die Funktionsweise von Compilern.
- Stanford Notes CS143 Gute Aufgaben und Notizen zum Compiler-Design.
- CMU-Folien und Projekte
- Tolle Compiler
- Erstellen Sie eine Sprache in Rust
- Grundlagen des Rust-Parsings
- Erstellen Sie eine von Tree Walk interpretierte Programmiersprache.
- Versuchen Sie auch, eine Bytecode-Engine für Ihren Interpreter zu implementieren, probieren Sie einige Optimierungen und GC aus.
- Sie können auch Maschinen wie Chip8 oder Nes emulieren.
- Die Emulation erfordert Kenntnisse über VM-Interna und Grafikprogrammierung.
- Sie können SDL als E/A-/Grafik-/Sound-Engine verwenden.
- Versuchen Sie, eine kompilierte Programmiersprache zu erstellen, die auf eine Architektur abzielt.
- Erfahren Sie mehr über die LLVM-Toolchain
- LLVM-Tutorial in Rust
- Versuchen Sie, dem llvm-Tutorial zu folgen, um Ihre erste Programmiersprache mit dem llvm-Backend zu erstellen.
- Versuchen Sie, einen Just-In-Time-Compiler rund um die Bytecode-Engine zu erstellen, Hot-Regionen zu erkennen und sie per JIT zu verarbeiten.
- Mein Discord-Server-Sprachentwicklungsbereich
Ausbeutung
Voraussetzungen sind Erfahrung in der Montage.
- ike: Systems Hacking Handbook
- pwn.college ist die beste Lernressource, die ich bisher zum Ausnutzen bekommen habe. Von der Assemblierung bis zur Kernel-Ausnutzung wird alles abgedeckt.
- Einführung in die Exploit-Entwicklung
- Nightmare: Einführung in die binäre Ausnutzung basierend auf CTFs.
- CS6265: Labor für Reverse Engineering und binäre Ausbeutung
- OMU-Ausbeutungslabore
- Die Binexp-Serie von LiveOverflow auf YouTube
- Tutorial von 0xinfection
- Exploit dev auf der Infosec-Referenz
- ROP Emporium
- Windows-Sachen
- Windows x64 rückwärts
- Win32-API-Programmierung
- Windows-Exploit-Entwickler
- Cazzs Youtube-Kanal
- Game-Hacking-Akademie
- Nachdem Sie etwas über die Ausnutzung erfahren haben, können Sie CTFs jetzt lösen. Einige davon sind:
- pwnable.kr
- Nutzen Sie Bildungs-VMs aus
- Overthewire-Kriegsspiele zum Thema Ausbeutung
- HackTheBox-Herausforderungen basierend auf binärer Ausnutzung
Browser-Hacking
Zu den Voraussetzungen gehören umfassende Kenntnisse der VM-Interna sowie solide Kenntnisse und Erfahrungen im Compiler-Engineering
- Entwicklung
- Erstellen Sie einen einfachen HTML-Dom-Parser Rust
- Spielzeug-Browser-Engine, Browser-Engine von Grund auf
- JavaScript-Bytecode VM Andreas Kling
- Browser Parsing & JS AST Andreas Kling
- Einblick in den modernen Browser
- Folgende Blogs folgen: V8, MozHacks, Webkit
- Dokumente: Firefox, Chromium, Webkit-Wiki
- Compiler Compiler: Eine Twitch-Serie über die Arbeit an einer JavaScript-Engine
- Grafik: Wählen Sie eine 2D-Grafikbibliothek für Ihre Sprache oder Plattform. Sie können sicherlich OpenGL oder Vulkan verwenden?!? Ihr unschuldiges CSS zu rendern, aber glauben Sie mir, es lohnt sich nicht.
- Skia ist gut für Linux und Android (Chrome verwendet es auf Android)
- Direct2D ja, nur Windows.
- Cairo und Blend2D Diese sind plattformübergreifend und einen Blick wert.
- Hochleistungs-GC für V8
- Abenteuer in der JIT-Kompilierung
- Spekulation in JavaScriptCore
- Netzwerkprogrammierung Rust Networking, Rust std::net, C
- Nachdem Sie sich mit Parsing, Rendering und JIT vertraut gemacht haben, können Sie nun Ihren eigenen Browser mit grundlegenden APIs und minimalen Funktionen erstellen und dabei den whatwg-Standards folgen
- Ausnutzung: Eine gute Möglichkeit, die Funktionsweise eines Browsers zu verstehen, besteht darin, zu versuchen, ihn zu hacken: (Zu den Voraussetzungen gehören solide Fähigkeiten zur binären Ausnutzung.)
- Browser-Exploition-Serie von LiveOverflow | Geschrieben
- Web Assembly Hacking Talk Black Hat
- Browser-PWN auf Github
- Ausnutzung von Webbrowsern – University of Florida
- Sehen Sie sich die Beschreibungen von CVEs oder CTF-Herausforderungen basierend auf Browsern oder Laufzeitumgebungen an.
Schadsoftware
Zu den Voraussetzungen gehören ein hohes Maß an Windows-Kenntnissen und solide Reverse-Engineering-Kenntnisse.
- Praktische Malware-Analyse
- Malware-Analyse-Bootcamp von Hackersploit
- CS5138 Malware-Analyse, UC
- Livestreams von Prelude
- Cr0ws Youtube-Kanal
- Nachdem Sie die Grundlagen der Umkehrung und des Verhaltens von Malware kennengelernt haben, können Sie nun einige echte Beispiele davon rückgängig machen.
- Labs von Malware Unicorn
- VX Underground – Die größte Sammlung von Malware-Quellcode, Beispielen und Artikeln im Internet.
- Abschnitt „Malware“ aus der Infosec-Referenz
- Malware-Basar
Betriebssystemgrundlagen
Ich bin mir (noch) nicht ganz sicher, ob ich in die Kernel-Entwicklung einsteigen möchte, aber die Konzepte scheinen cool zu sein und es ist eine gute Idee für ein Urlaubsprojekt. Lesen Sie unbedingt die Anforderungen, bevor Sie beginnen.
- Das OS Dev Wiki ist die Anlaufstelle, wenn Sie mehr über das Betriebssystem erfahren möchten. Es ist gut dokumentiert und hilft auch bei Augenblutungen.
- Linux Kernel Labs
- Tutorials-Bereich von awesome OS auf Github
- Anleitung zum gebrochenen Dorn
- OS in 3 Teilen
- Kleines OS-Buch
- Blog-Betriebssystem: Ein Betriebssystem in Rust schreiben
- Bootlin-Folien und Labore
- 539kernel: Eine Reise zur Erstellung eines Betriebssystemkernels
- Dinge, an denen man arbeiten kann:
- Haiku
- Betriebssystem reagieren
- Die Eudyptula-Herausforderung
- Redox
- Weitere Rostprojekte
- Tolles Betriebssystem auf Github
- Besuchen Sie den OS-Entwicklerkanal meines Discord-Servers, um weitere Ressourcen und Bücher zu erhalten.
VM-Interna
Listen von VM-Interna, die Sie studieren und gleichzeitig Fortschritte in der Compiler-Engineering- und Browser-Entwicklung erzielen sollten:
- So erstellen Sie eine virtuelle Maschine
- JS-Interna, V8-Bytecode
- Dart VM-Architektur
- JVM-Struktur Haupt, JVM-Interna I, JVM-Interna Anfänger
Kollektive Kurse
Sammlung von Ressourcen, die zwei oder mehr der oben besprochenen Themen umfasst:
- Nand To Tetris Ein Kurs, der Ihnen beibringt, wie man einen Computer, ein Betriebssystem und einen Compiler von Stratch aus erstellt.
- Dive Into Systems Ein wirklich gutes Buch, um Sie in die Systemprogrammierung einzuführen.