Hoja de ruta de programación del sistema
Una hoja de ruta para aprender por mí mismo el desarrollo de compiladores, la ingeniería inversa de malware y los fundamentos del desarrollo del kernel. Cabe señalar que son sólo para el conocimiento fundamental y no te convierten en un maestro de ninguno. Elegiré uno o más de los campos mencionados a continuación para investigaciones posteriores en algunos temas específicos. Low Level Programming University también tiene una buena lista de recursos a seguir, pero esta es mi hoja de ruta personal.
Los temas a estudiar aquí pueden o no estar en orden y pueden estudiarse según sus preferencias, siempre que se cumplan los requisitos previos para cada uno de ellos.
Requisitos previos
Ya estoy asumiendo que tiene conocimientos básicos de arquitectura informática y experiencia con al menos un lenguaje de programación de sistemas, algunos conceptos básicos de cómo funciona el ensamblador y está familiarizado con el uso de cualquier sistema POSIX. Se puede encontrar una buena visión detallada de cómo funcionan las computadoras a nivel electrónico en el libro Introducción a la electrónica digital de Agner Fog. Y para conocer el trabajo equivalente en software, puede consultar cpu.land.
Lenguajes de programación del sistema
Aprenda dos de los lenguajes indicados, realice algunos proyectos básicos para familiarizarse con ellos y resuelva algunos ejercicios de programación.
- do
- Óxido
- Aprenda C++, referencia de C++
- C++ (vídeo)
Aprenda algo de arquitectura informática
Aprenda la arquitectura informática basada en Arm y RISCV para crear un enfoque eficiente y optimizado para resolver los problemas a nivel de hardware.
- David A. Patterson, John L. Hennessy "Arquitectura informática: un enfoque cuantitativo"
- David A. Patterson, John L. Hennessy "Organización y diseño de computadoras Edición ARM"
- David A. Patterson, John L. Hennessy "Organización y diseño de computadoras Edición RISC-V"
- John Paul Shen, Mikko H. Lipasti "Diseño de procesador moderno: fundamentos de los procesadores superescalares"
- Arquitectura informática CMU por CMU Youtube
Aprende algo de ensamblaje
Requisitos previos: aprenda sobre lógica digital
Si aún no está familiarizado con el ensamblaje, le recomendaría consultar algunos tutoriales como:
- Inicio rápido x86[MASM]
- Inicio rápido x86 [NASM]
- Tutor de ASM [NASM]
- Introducción al lenguaje ensamblador x86 por Davy en youtube
- Lecciones de OMU x86_64
- El arte del asm
- manuales de intel x64
- Explorador del compilador: crear programas en C y leer el desmontaje siempre ayuda a hacer coincidir los patrones.
- Artículo de 0x44 revertir para que los tontos puedan revertir crackmes básicos.
Después de esto, recomendaría resolver crackmes fáciles para hacer ejercicio. crackmes.one y tryhackme son lugares para encontrar algunos de los más fáciles. Los más difíciles aún requieren algunos conocimientos de pwning, que discutiré en la sección de explotación.
Compiladores
Los requisitos previos incluyen experiencia en la creación de proyectos en un lenguaje de programación de sistemas y un conocimiento profundo de la memoria y la CPU.
- Lee el Libro del Dragón.
- Crafting Interpreters es una buena opción para principiantes.
- Los patrones de implementación del lenguaje proporcionan información valiosa sobre el funcionamiento de los compiladores.
- Stanford Notes CS143 Buenas tareas y notas relacionadas con el diseño del compilador.
- Diapositivas y proyectos de CMU
- Compiladores impresionantes
- Crear un idioma en Rust
- Conceptos básicos del análisis de óxido
- Hacer un lenguaje de programación interpretado a pie de árbol.
- Intente también implementar un motor de código de bytes para su intérprete, pruebe algunas optimizaciones y GC.
- También puedes emular máquinas como Chip8 o Nes.
- La emulación requiere conocimientos de programación de gráficos y componentes internos de VM.
- Puede utilizar SDL como motor de E/S/gráficos/sonido.
- Intente crear un lenguaje de programación compilado dirigido a una arquitectura.
- Obtenga más información sobre la cadena de herramientas LLVM
- Tutorial de LLVM en Rust
- Intente seguir el tutorial de llvm para crear su primer lenguaje de programación utilizando el backend de llvm.
- Intente crear un compilador Just In Time alrededor del motor de código de bytes, detecte regiones activas y JIT.
- Mi sección lang-dev del servidor de discordia
Explotación
Los requisitos previos incluyen experiencia en montaje.
- ike: manual de piratería de sistemas
- pwn.college es el mejor recurso de aprendizaje que tengo hasta ahora para explotarlo. Desde el ensamblaje hasta la explotación del kernel, lo cubre todo.
- Introducción al desarrollo de exploits.
- Nightmare: Introducción a la explotación binaria basada en CTF.
- CS6265: Laboratorio de ingeniería inversa y explotación binaria
- Laboratorios de explotación OMU
- Serie binexp de LiveOverflow en youtube
- Tutorial de 0xinfection
- Explotar desarrollador en la referencia de seguridad de la información
- Emporio ROP
- Cosas de Windows
- Windows x64 invertido
- Programación API Win32
- Desarrollador de exploits de Windows
- Canal de Youtube de Cazz
- Academia de hacking de juegos
- Después de conocer algunas explotaciones, ahora puede resolver los CTF. Algunos de ellos incluyen:
- pwnable.kr
- Explotar máquinas virtuales educativas
- Juegos de guerra Overthewire que cubren la explotación
- Retos de HackTheBox basados en la explotación binaria
Hackeo del navegador
Los requisitos previos incluyen un conocimiento de alto nivel de los componentes internos de VM y una sólida comprensión y experiencia en ingeniería de compiladores.
- Desarrollo
- Crear un analizador dom html básico Rust
- Motor de navegador de juguete, motor de navegador desde cero
- Código de bytes JavaScript VM Andreas Kling
- Análisis del navegador y JS AST Andreas Kling
- Mirada interna del navegador moderno
- Blogs a seguir: V8, MozHacks, Webkit
- Documentos: Firefox, Chromium, Webkit Wiki
- Compilador Compilador: una serie de Twitch sobre cómo trabajar en un motor JavaScript
- Gráficos: elija una biblioteca de gráficos 2D para su idioma o plataforma. ¿Seguramente puedes usar OpenGL o Vulkan? para renderizar tu CSS inocente pero créeme, no vale la pena.
- Skia es bueno para Linux y Android (Chrome lo usa en Android)
- Direct2D sí, solo Windows.
- Cairo y Blend2D Son multiplataforma y vale la pena analizarlos.
- GC de alto rendimiento para V8
- Aventuras en la compilación JIT
- Especulación en JavaScriptCore
- Programación de redes Rust Networking, Rust std::net, C
- Después de aprender sobre análisis, renderizado y JIT, ahora puede crear su propio navegador con API básicas y funciones mínimas, siguiendo los estándares de whatwg.
- Explotación: una excelente manera de comprender cómo funciona un navegador es intentar piratearlo: (los requisitos previos incluyen sólidas habilidades de explotación binaria)
- Serie de explotación del navegador de LiveOverflow | Escrito
- Charla de hacking de ensamblaje web Black Hat
- Navegador pwn en github
- Explotación del navegador web - Universidad de Florida
- Revise reseñas de desafíos CVE o CTF basados en navegadores o entornos de tiempo de ejecución.
malware
Los requisitos previos incluyen un conocimiento de alto nivel de Windows y sólidas habilidades de ingeniería inversa.
- Análisis práctico de malware
- Bootcamp de análisis de malware por hackersploit
- CS5138 Análisis de malware, UC
- Transmisiones en vivo de Preludio
- Canal de Youtube de Cr0w
- Después de aprender los conceptos básicos sobre la reversión y el comportamiento del malware, ahora puede pasar a revertir algunas muestras reales de ellos.
- Laboratorios de Malware Unicorn
- VX Underground: la mayor colección de códigos fuente, muestras y documentos de malware en Internet.
- Sección de malware de la referencia de infosec
- Bazar de malware
Fundamentos del sistema operativo
No estoy muy seguro de querer dedicarme al desarrollo del kernel (todavía), pero los conceptos parecen interesantes y es una buena idea para un proyecto de vacaciones. Asegúrese de leer los requisitos antes de comenzar.
- OS Dev Wiki es el lugar al que acudir si quieres aprender sobre el sistema operativo. Está bien documentado y también ayuda a que los ojos sangren.
- Laboratorios del kernel de Linux
- Sección de tutoriales de un sistema operativo increíble en github
- Tutorial de Broken Thorn
- SO en 3 piezas
- Pequeño libro sobre el sistema operativo
- Blog OS: Escribir un sistema operativo en Rust
- Diapositivas y laboratorios de Bootlin
- 539kernel: un viaje hacia la creación de un kernel de sistema operativo
- Cosas para trabajar:
- haikus
- reaccionar sistema operativo
- El desafío de Eudyptula
- redox
- Más proyectos de óxido
- Impresionante sistema operativo en github
- El canal de desarrollo del sistema operativo de mi servidor de Discord para obtener más recursos y libros.
Componentes internos de la máquina virtual
Listas de componentes internos de VM para estudiar mientras se avanza en la ingeniería del compilador y el desarrollo del navegador:
- Cómo construir una máquina virtual
- Componentes internos de JS, código de bytes de V8
- Arquitectura de máquina virtual Dart
- Estructura principal de JVM, componentes internos de JVM I, componentes internos de JVM para principiantes
Cursos colectivos
Colección de recursos que incluye 2 o más de los temas discutidos anteriormente:
- Nand To Tetris Un curso para enseñarle cómo construir una computadora, un sistema operativo y un compilador desde Stratch.
- Sumérgete en los sistemas Un libro realmente bueno para iniciarte en la programación de sistemas.