Roteiro de programação do sistema
Um roteiro para aprender desenvolvimento de compilador, engenharia reversa de malware e fundamentos de desenvolvimento de kernel. É importante ressaltar que eles servem apenas para o conhecimento fundamental e não fazem de você um mestre em nada. Escolherei um ou mais dos campos mencionados abaixo para pesquisas posteriores em alguns tópicos específicos. A Low Level Programming University também tem uma boa lista de recursos a seguir, mas este é meu roteiro pessoal.
Os tópicos a serem estudados aqui podem ou não estar em ordem e podem ser estudados de acordo com sua preferência, visto que os pré-requisitos estão sendo cumpridos para cada um deles.
Pré-requisitos
Já estou assumindo que você tem conhecimento básico de arquitetura de computador e experiência com pelo menos uma linguagem de programação de sistema, alguns princípios básicos de como funciona o assembly e familiarizado com o uso de qualquer sistema POSIX. Uma boa visão detalhada de como os computadores funcionam no nível eletrônico pode ser encontrada no livro Introdução à Eletrônica Digital de Agner Fog. E para o trabalho equivalente de software, você pode consultar cpu.land.
Linguagens de programação de sistema
Aprenda duas das linguagens fornecidas, faça alguns projetos básicos para se familiarizar com ela, resolva alguns exercícios de programação.
- C
- Ferrugem
- Aprenda C++, referência de C++
- C++ (vídeo)
Aprenda um pouco de Arquitetura de Computadores
Aprenda arquitetura de computador baseada em Arm e RISCV para construir uma abordagem eficiente e otimizada para resolver problemas em nível de hardware
- David A. Patterson, John L. Hennessy "Arquitetura de Computadores: Uma Abordagem Quantitativa"
- David A. Patterson, John L. Hennessy "Organização e Design de Computadores Edição ARM"
- David A. Patterson, John L. Hennessy "Organização e Design de Computadores Edição RISC-V"
- John Paul Shen, Mikko H. Lipasti "Design moderno de processador: fundamentos de processadores superescalares"
- Arquitetura de Computadores CMU por CMU Youtube
Aprenda um pouco de montagem
Pré-requisitos: Aprenda sobre Lógica Digital
Se você ainda não está familiarizado com montagem, recomendo verificar alguns tutoriais como-
- início rápido x86[MASM]
- guia de início rápido x86 [NASM]
- Tutor ASM[NASM]
- Introdução à linguagem assembly x86 por Davy no youtube
- Lições de OMU x86_64
- A arte de Asm
- Manuais de instruções Intel x64
- Compiler Explorer: Criar programas C e ler a desmontagem sempre ajuda a combinar padrões.
- Artigo de 0x44 revertendo para manequins para poder reverter crackmes básicos.
Depois disso, eu recomendaria resolver problemas fáceis para exercícios. crackmes.one e tryhackme são lugares para encontrar alguns dos mais fáceis. Os difíceis ainda exigem algum conhecimento prático, que discutirei na seção de exploração.
Compiladores
Os pré-requisitos incluem experiência na criação de projetos em uma linguagem de programação de sistema e um profundo conhecimento de memória e CPU.
- Leia o Livro do Dragão.
- Crafting Interpreters é uma boa opção para iniciantes.
- Padrões de implementação de linguagem fornecem alguns bons insights sobre o funcionamento dos compiladores.
- Stanford Notes CS143 Boas tarefas e notas relacionadas ao design do compilador.
- Slides e projetos da CMU
- Compiladores incríveis
- Faça uma linguagem em ferrugem
- Noções básicas de análise de ferrugem
- Faça uma linguagem de programação interpretada de caminhada em árvore.
- Tente também implementar um mecanismo de bytecode para o seu intérprete, experimente algumas otimizações e GC.
- Você também pode emular máquinas como Chip8 ou Nes.
- A emulação requer conhecimento interno da VM e programação gráfica.
- Você pode usar SDL como um mecanismo de E/S/gráficos/som.
- Tente fazer uma linguagem de programação compilada voltada para uma arquitetura.
- Saiba mais sobre o conjunto de ferramentas LLVM
- Tutorial LLVM em Rust
- Tente seguir o tutorial do llvm para criar sua primeira linguagem de programação usando o backend do llvm.
- Tente fazer um compilador Just In Time em torno do mecanismo de bytecode, detecte regiões quentes e faça JIT nelas.
- Minha seção lang-dev do servidor discord
Exploração
Os pré-requisitos incluem experiência com montagem.
- ike: Manual de hacking de sistemas
- pwn.college é o melhor recurso de aprendizagem que consegui até agora para exploração. Da montagem à exploração do kernel, abrange tudo.
- Introdução ao desenvolvimento de exploração
- Pesadelo: introdução à exploração binária baseada em CTFs.
- CS6265: Laboratório de Engenharia Reversa e Exploração Binária
- Laboratórios de exploração OMU
- Série binexp do LiveOverflow no youtube
- Tutorial por 0xinfection
- Explorar dev na referência infosec
- Empório ROP
- Coisas do Windows
- Inversão do Windows x64
- Programação de API Win32
- Desenvolvedor de exploração do Windows
- Canal do Cazz no Youtube
- Academia de hackers de jogos
- Depois de aprender sobre algumas explorações, você pode resolver CTFs agora. Alguns deles incluem:
- pwnable.kr
- Explorar VMs educacionais
- Jogos de guerra Overthewire cobrindo exploração
- Desafios HackTheBox baseados na exploração binária
Hacking de navegador
Os pré-requisitos incluem conhecimento de alto nível de componentes internos de VM e sólido conhecimento e experiência com Engenharia de Compiladores
- Desenvolvimento
- Crie um analisador html dom básico Rust
- Motor de navegador de brinquedo, mecanismo de navegador do zero
- Bytecode JavaScript VM Andreas Kling
- Análise de navegador e JS AST Andreas Kling
- Visão interna do navegador moderno
- Blogs a seguir: V8, MozHacks, Webkit
- Documentos: Firefox, Chromium, Webkit Wiki
- Compiler Compiler: uma série do Twitch sobre como trabalhar em um mecanismo JavaScript
- Gráficos: Escolha uma biblioteca de gráficos 2D para sua linguagem ou plataforma. Você certamente pode usar OpenGL ou Vulkan?!? para renderizar seu CSS inocente, mas acredite em mim, não vale a pena.
- Skia é bom para Linux e Android (o Chrome usa no Android)
- Direct2D sim, apenas Windows.
- Cairo e Blend2D São multiplataforma, vale a pena dar uma olhada.
- GC de alto desempenho para V8
- Aventuras na compilação JIT
- Especulação em JavaScriptCore
- Programação de rede Rede Rust, Rust std::net, C
- Depois de aprender sobre análise, renderização e JIT, agora você pode criar seu próprio navegador com APIs básicas e recursos mínimos, seguindo os padrões whatwg
- Exploração: Uma ótima maneira de entender como um navegador funciona é tentar hackeá-lo: (os pré-requisitos incluem sólidas habilidades de exploração binária)
- Série de exploração de navegador por LiveOverflow | Escrito
- Palestra sobre hackers em Web Assembly Black Hat
- Pwn do navegador no github
- Exploração de navegador da Web - Universidade da Flórida
- Analise as redações de desafios CVEs ou CTF com base em navegadores ou ambientes de tempo de execução.
Programas maliciosos
Os pré-requisitos incluem um conhecimento de alto nível de janelas e sólidas habilidades de engenharia reversa.
- Análise prática de malware
- Bootcamp de análise de malware por hackersploit
- Análise de malware CS5138, UC
- Transmissões ao vivo do Prelude
- Canal do Youtube do Cr0w
- Depois de aprender os conceitos básicos de reversão e comportamento de malware, agora você pode reverter alguns exemplos reais deles.
- Laboratórios por Malware Unicorn
- VX Underground – A maior coleção de códigos-fonte, amostras e documentos de malware na Internet.
- Seção de malware da referência infosec
- Bazar de malware
Fundamentos do sistema operacional
Não tenho certeza se quero entrar no desenvolvimento do kernel (ainda), mas os conceitos parecem legais e é uma boa ideia para um projeto de férias. Certifique-se de ler os requisitos antes de começar.
- OS Dev Wiki é o lugar certo se você quiser aprender sobre sistemas operacionais. Está bem documentado e também ajuda a sangrar os olhos.
- Laboratórios do Kernel Linux
- Seção de tutoriais do incrível sistema operacional no github
- Tutorial do Espinho Quebrado
- SO em 3 peças
- Pequeno livro de sistema operacional
- Blog OS: Escrevendo um sistema operacional em Rust
- Slides e laboratórios do Bootlin
- 539kernel: uma jornada na criação de um kernel de sistema operacional
- Coisas para trabalhar:
- Haiku
- Reagir SO
- O Desafio Eudíptula
- Redox
- Mais projetos de ferrugem
- SO incrível no github
- Canal de desenvolvimento do sistema operacional do meu servidor discord para obter mais recursos e livros.
Internos da VM
Listas de componentes internos da VM para estudar enquanto progride na engenharia de compiladores e no desenvolvimento de navegadores:
- Como construir uma máquina virtual
- Internos JS, bytecode do V8
- Arquitetura Dart VM
- Estrutura principal da JVM, internos da JVM I, internos da JVM Iniciantes
Cursos Coletivos
Coleção de recursos que inclui 2 ou mais dos tópicos discutidos acima:
- Nand To Tetris Um curso para ensiná-lo sobre como construir um computador, sistema operacional e um compilador.
- Dive Into Systems Um livro realmente bom para apresentá-lo à programação de sistemas.