Peta Jalan Pemrograman Sistem
Peta jalan untuk mempelajari sendiri pengembangan kompiler, rekayasa balik malware, dan dasar-dasar pengembangan kernel. Perlu diperhatikan bahwa ini hanya untuk pengetahuan dasar dan tidak menjadikan Anda ahli dalam bidang apa pun. Saya akan memilih satu atau lebih bidang yang disebutkan di bawah ini untuk penelitian selanjutnya dalam beberapa topik tertentu. Universitas Pemrograman Tingkat Rendah juga memiliki daftar sumber daya yang bagus untuk diikuti, tetapi ini adalah peta jalan pribadi saya.
Topik untuk dipelajari di sini mungkin berurutan atau tidak dan dapat dipelajari sesuai dengan preferensi Anda, mengingat prasyarat untuk masing-masing topik telah terpenuhi.
Prasyarat
Saya berasumsi bahwa Anda memiliki pemahaman dasar tentang arsitektur komputer dan pengalaman dengan setidaknya satu bahasa pemrograman sistem, beberapa dasar tentang cara kerja perakitan dan familiar menggunakan sistem POSIX apa pun. Penjelasan rinci tentang cara kerja komputer pada tingkat elektronik dapat ditemukan dalam buku Pengantar Elektronik Digital oleh Agner Fog. Dan untuk pekerjaan yang setara dengan perangkat lunak, Anda dapat merujuk ke cpu.land.
Bahasa Pemrograman Sistem
Pelajari dua bahasa yang diberikan, buat beberapa proyek dasar agar Anda terbiasa dengannya, selesaikan beberapa latihan pemrograman.
- C
- Karat
- Pelajari C++, referensi C++
- C++ (video)
Pelajari beberapa Arsitektur Komputer
Pelajari arsitektur komputer berbasis Arm dan RISCV untuk membangun pendekatan yang efisien dan optimal dalam memecahkan masalah di tingkat perangkat keras
- David A. Patterson, John L. Hennessy "Arsitektur Komputer: Pendekatan Kuantitatif"
- David A. Patterson, John L. Hennessy "Organisasi Komputer dan Desain Edisi ARM"
- David A. Patterson, John L. Hennessy "Organisasi dan Desain Komputer Edisi RISC-V"
- John Paul Shen, Mikko H. Lipasti "Desain Prosesor Modern: Dasar-dasar Prosesor Superscalar"
- Arsitektur Komputer CMU oleh CMU Youtube
Pelajari beberapa Majelis
Prasyarat: Pelajari tentang Logika Digital
Jika Anda belum terbiasa dengan perakitan, saya sarankan untuk membaca beberapa tutorial seperti-
- mulai cepat x86[MASM]
- mulai cepat x86 [NASM]
- Guru ASM[NASM]
- Pengenalan bahasa assembly x86 oleh Davy di youtube
- Pelajaran OMU x86_64
- Seni Asm
- Panduan Intel x64
- Compiler Explorer: Membuat program C dan membaca pembongkaran selalu membantu mencocokkan pola.
- Artikel dengan pembalikan 0x44 untuk boneka agar dapat membalikkan retakan dasar.
Setelah ini, saya akan merekomendasikan memecahkan masalah yang mudah untuk berolahraga. crackmes.one dan tryhackme adalah tempat untuk menemukan beberapa yang mudah. Yang sulit masih memerlukan pengetahuan dasar yang akan saya bahas di bagian eksploitasi.
Kompiler
Prasyaratnya mencakup pengalaman membuat proyek dalam bahasa pemrograman sistem dan pemahaman mendalam tentang memori dan CPU.
- Baca Buku Naga.
- Crafting Interpreters adalah salah satu yang bagus untuk pemula.
- Pola Implementasi Bahasa memberikan beberapa wawasan bagus tentang cara kerja kompiler.
- Stanford Notes CS143 Tugas dan catatan bagus terkait dengan desain kompiler.
- Slide dan Proyek CMU
- Kompiler yang Luar Biasa
- Buat Bahasa di Rust
- Dasar-dasar Penguraian Karat
- Membuat jalan pohon dengan interpretasi bahasa pemrograman.
- Coba juga terapkan mesin bytecode untuk penerjemah Anda, coba beberapa optimasi dan GC.
- Anda juga dapat meniru mesin seperti Chip8 atau Nes.
- Emulasi memerlukan pengetahuan tentang internal VM dan pemrograman grafis.
- Anda dapat menggunakan SDL sebagai mesin IO/grafis/suara.
- Cobalah untuk membuat bahasa pemrograman terkompilasi yang menargetkan satu arsitektur.
- Pelajari tentang rantai alat LLVM
- Tutorial LLVM di Rust
- Coba ikuti tutorial llvm untuk membuat bahasa pemrograman pertama Anda menggunakan backend llvm.
- Cobalah membuat Just In Time Compiler di sekitar mesin bytecode, deteksi wilayah panas dan JIT.
- Bagian lang-dev server perselisihan saya
Eksploitasi
Prasyarat mencakup pengalaman dengan perakitan.
- ike: Buku Panduan Peretasan Sistem
- pwn.college adalah sumber belajar terbaik yang saya dapatkan sejauh ini untuk dieksploitasi. Dari perakitan hingga eksploitasi kernel, semuanya mencakup semuanya.
- Pengantar pengembangan eksploitasi
- Nightmare: Pengantar eksploitasi biner berdasarkan CTF.
- CS6265: Lab Rekayasa Terbalik dan Eksploitasi Biner
- Laboratorium eksploitasi OMU
- Seri binexp LiveOverflow di youtube
- Tutorial oleh 0xinfection
- Eksploitasi dev pada referensi infosec
- Emporium ROP
- Barang Windows
- Windows x64 membalikkan
- Pemrograman API Win32
- Pengembang eksploitasi Windows
- Saluran Youtube Cazz
- Akademi peretasan game
- Setelah mempelajari beberapa eksploitasi, Anda dapat menyelesaikan CTF sekarang. Beberapa diantaranya adalah:
- pwnable.kr
- Memanfaatkan VM Pendidikan
- Permainan perang overthewire yang mencakup eksploitasi
- Tantangan HackTheBox berdasarkan eksploitasi biner
Peretasan Peramban
Prasyaratnya mencakup pengetahuan tingkat tinggi tentang internal VM, serta pemahaman dan pengalaman yang kuat dengan Compiler Engineering
- Perkembangan
- Buat parser dom html dasar Rust
- Mesin browser mainan, Mesin browser dari awal
- Kode byte JavaScript VM Andreas Kling
- Penguraian Peramban & JS AST Andreas Kling
- Di dalamnya lihat browser modern
- Blog untuk diikuti: V8, MozHacks, Webkit
- Dokumen: Firefox, Chromium, Webkit Wiki
- Compiler Compiler: Seri Twitch tentang bekerja pada mesin JavaScript
- Grafik: Pilih lib grafis 2d untuk bahasa atau platform Anda. Anda pasti bisa menggunakan OpenGL atau Vulkan?!? untuk merender CSS Anda yang tidak bersalah tapi percayalah itu tidak sepadan.
- Skia bagus untuk Linux dan Android (chrome menggunakannya di Android)
- Direct2D ya windows saja.
- Kairo dan Blend2D Ini adalah lintas platform, layak untuk dilihat.
- Gc berkinerja tinggi untuk V8
- Petualangan dalam kompilasi JIT
- Spekulasi di JavaScriptCore
- Pemrograman Jaringan Jaringan Rust, Rust std::net, C
- Setelah mempelajari parsing, rendering, dan JIT, kini Anda dapat membuat browser sendiri dengan API dasar dan fitur minimal, mengikuti standar apa yang ada
- Eksploitasi: Cara terbaik untuk memahami cara kerja browser adalah dengan mencoba meretasnya: (prasyaratnya mencakup keterampilan eksploitasi biner yang kuat)
- Seri Eksploitasi Browser oleh LiveOverflow | Tertulis
- Pembicaraan Peretasan Majelis Web Black Hat
- Peramban pwn di github
- Eksploitasi Browser Web- Universitas Florida
- Telusuri penulisan tantangan CVE atau CTF berdasarkan browser atau runtime envs.
perangkat lunak perusak
Prasyaratnya mencakup pemahaman tingkat tinggi tentang jendela dan keterampilan rekayasa balik yang kuat.
- Analisis Malware Praktis
- Bootcamp analisis malware oleh hackersploit
- Analisis Malware CS5138, UC
- Streaming langsung Prelude
- Saluran Youtube Cr0w
- Setelah mempelajari dasar-dasar pembalikan dan perilaku malware, kini Anda dapat melanjutkan untuk membalikkan beberapa contoh nyata dari malware tersebut.
- Lab oleh Malware Unicorn
- VX Underground - Koleksi kode sumber, sampel, dan makalah malware terbesar di internet.
- Bagian malware dari referensi infosec
- Bazar Perangkat Lunak Jahat
Dasar-dasar OS
Saya belum begitu yakin apakah saya ingin mendalami pengembangan kernel tetapi konsepnya tampak keren dan ini merupakan ide bagus untuk proyek liburan. Pastikan untuk membaca persyaratan sebelum memulai.
- OS Dev Wiki adalah tempat tujuan jika Anda ingin belajar tentang OS. Ini didokumentasikan dengan baik dan juga membantu mata berdarah.
- Lab Kernel Linux
- Bagian Tutorial dari OS luar biasa di github
- Tutorial Broken Thorn
- OS dalam 3 buah
- Buku OS Kecil
- Blog OS: Menulis OS di Rust
- Slide dan Lab Bootlin
- 539kernel: Perjalanan Membuat Kernel OS
- Hal-hal yang harus dikerjakan:
- Haiku
- Bereaksi OS
- Tantangan Eudyptula
- Redoks
- Lebih banyak proyek karat
- OS luar biasa di github
- Saluran pengembangan OS server perselisihan saya untuk mendapatkan lebih banyak sumber daya dan buku.
internal VM
Daftar internal VM yang perlu dipelajari sambil membuat kemajuan dalam rekayasa kompiler dan pengembangan Browser:
- Cara membangun mesin virtual
- Internal JS, bytecode V8
- Arsitektur Dart VM
- Struktur JVM utama, internal JVM I, internal JVM Pemula
Kursus Kolektif
Kumpulan sumber daya yang mencakup 2 atau lebih topik yang dibahas di atas:
- Nand To Tetris Kursus yang mengajarkan Anda cara membuat komputer, OS, dan compiler dari awal.
- Menyelami Sistem Buku yang sangat bagus untuk memperkenalkan Anda pada pemrograman sistem.