แผนงานการเขียนโปรแกรมระบบ
แผนงานในการสอนตัวเองเกี่ยวกับการพัฒนาคอมไพเลอร์ วิศวกรรมย้อนกลับของมัลแวร์ และพื้นฐานการพัฒนาเคอร์เนล โปรดทราบว่าสิ่งเหล่านี้มีไว้เพื่อความรู้พื้นฐานเท่านั้น และไม่ได้ทำให้คุณเป็นผู้เชี่ยวชาญในสิ่งใดเลย ฉันจะเลือกหนึ่งหรือหลายสาขาที่กล่าวถึงด้านล่างสำหรับการวิจัยในภายหลังในหัวข้อเฉพาะบางหัวข้อ Low Level Programming University ยังมีรายการแหล่งข้อมูลที่ดีให้ปฏิบัติตาม แต่นี่คือแผนงานส่วนตัวของฉัน
หัวข้อที่จะเรียนที่นี่อาจจะเรียงลำดับหรือไม่ก็ได้และสามารถศึกษาได้ตามความต้องการของคุณ โดยถือว่าข้อกำหนดเบื้องต้นของแต่ละหัวข้อกำลังได้รับการเติมเต็มแล้ว
ข้อกำหนดเบื้องต้น
ฉันสมมติว่าคุณมีความเข้าใจพื้นฐานเกี่ยวกับสถาปัตยกรรมคอมพิวเตอร์และมีประสบการณ์เกี่ยวกับภาษาการเขียนโปรแกรมระบบอย่างน้อยหนึ่งภาษา พื้นฐานบางประการเกี่ยวกับวิธีการทำงานของแอสเซมบลีและคุ้นเคยกับระบบ POSIX ใดๆ ดูรายละเอียดที่ดีเกี่ยวกับวิธีการทำงานของคอมพิวเตอร์ในระดับอิเล็กทรอนิกส์ได้ในหนังสือ Introduction to Digital Electronics โดย Agner Fog และสำหรับงานเทียบเท่าซอฟต์แวร์ คุณสามารถดู cpu.land
ภาษาการเขียนโปรแกรมระบบ
เรียนรู้สองภาษาที่กำหนด สร้างโปรเจ็กต์พื้นฐานเพื่อทำความคุ้นเคย แก้แบบฝึกหัดการเขียนโปรแกรมบางอย่าง
- ค
- สนิม
- เรียนรู้การอ้างอิง C++, C++
- ซี++ (วิดีโอ)
เรียนรู้สถาปัตยกรรมคอมพิวเตอร์บางส่วน
เรียนรู้สถาปัตยกรรมคอมพิวเตอร์ที่ใช้ Arm และ RISCV เพื่อสร้างแนวทางที่มีประสิทธิภาพและปรับให้เหมาะสมในการแก้ปัญหาในระดับฮาร์ดแวร์
- David A. Patterson, John L. Hennessy "สถาปัตยกรรมคอมพิวเตอร์: แนวทางเชิงปริมาณ"
- David A. Patterson, John L. Hennessy "องค์กรคอมพิวเตอร์และการออกแบบ ARM Edition"
- David A. Patterson, John L. Hennessy "องค์กรคอมพิวเตอร์และการออกแบบ RISC-V Edition"
- John Paul Shen, Mikko H. Lipasti "การออกแบบโปรเซสเซอร์สมัยใหม่: พื้นฐานของโปรเซสเซอร์ Superscalar"
- สถาปัตยกรรมคอมพิวเตอร์ มช. โดย CMU Youtube
เรียนรู้การประกอบบางส่วน
วิชาบังคับก่อน: เรียนรู้เกี่ยวกับลอจิกดิจิทัล
หากคุณยังไม่คุ้นเคยกับการประกอบ ฉันขอแนะนำให้ดูบทช่วยสอนบางอย่างเช่น-
- x86 การเริ่มต้นอย่างรวดเร็ว [MASM]
- การเริ่มต้นอย่างรวดเร็ว x86 [NASM]
- กวดวิชา ASM[NASM]
- รู้เบื้องต้นเกี่ยวกับภาษาแอสเซมบลี x86 โดย Davy บน youtube
- บทเรียน OMU x86_64
- ศิลปะแห่ง Asm
- คู่มือ Intel x64
- Compiler Explorer: การสร้างโปรแกรม C และการอ่านการแยกส่วนจะช่วยให้จับคู่รูปแบบได้เสมอ
- บทความโดย 0x44 การย้อนกลับสำหรับหุ่นเพื่อให้สามารถย้อนกลับแคร็กพื้นฐานได้
หลังจากนี้ผมขอแนะนำการแก้แคร็กง่ายๆสำหรับออกกำลังกายครับ crackmes.one และ tryhackme เป็นสถานที่ในการค้นหาสิ่งที่ง่าย ส่วนที่ยากยังต้องการความรู้เกี่ยวกับการ pwing ซึ่งฉันจะพูดถึงในส่วนการหาประโยชน์
คอมไพเลอร์
ข้อกำหนดเบื้องต้นรวมถึงประสบการณ์ในการสร้างโครงการในภาษาการเขียนโปรแกรมระบบและความเข้าใจอย่างลึกซึ้งเกี่ยวกับหน่วยความจำและ CPU
- อ่านหนังสือมังกร
- Crafting Interpreters เป็นสิ่งที่ดีสำหรับผู้เริ่มต้น
- รูปแบบการใช้ภาษาให้ข้อมูลเชิงลึกที่ดีเกี่ยวกับการทำงานของคอมไพเลอร์
- Stanford Notes CS143 การมอบหมายที่ดีและบันทึกที่เกี่ยวข้องกับการออกแบบคอมไพเลอร์
- สไลด์และโครงการของ มช
- คอมไพเลอร์ที่ยอดเยี่ยม
- สร้างภาษาใน Rust
- พื้นฐานการแยกวิเคราะห์สนิม
- ทำให้ภาษาโปรแกรมตีความ tree walk
- ลองใช้โปรแกรม bytecode สำหรับล่ามของคุณ ลองใช้การปรับให้เหมาะสมและ GC
- คุณยังสามารถจำลองเครื่องเช่น Chip8 หรือ Nes ได้อีกด้วย
- การจำลองต้องใช้ความรู้เกี่ยวกับ VM ภายในและการเขียนโปรแกรมกราฟิก
- คุณสามารถใช้ SDL เป็นเอ็นจิ้น IO/กราฟิก/เสียงได้
- พยายามสร้างภาษาการเขียนโปรแกรมที่คอมไพล์โดยกำหนดเป้าหมายไปที่สถาปัตยกรรมเดียว
- เรียนรู้เกี่ยวกับห่วงโซ่เครื่องมือ LLVM
- บทช่วยสอน LLVM ใน Rust
- ลองทำตามบทช่วยสอน llvm เพื่อสร้างภาษาการเขียนโปรแกรมแรกของคุณโดยใช้แบ็กเอนด์ llvm
- ลองสร้าง Just In Time Compiler รอบ ๆ bytecode engine ตรวจจับพื้นที่ร้อนและ JIT
- ส่วน lang-dev เซิร์ฟเวอร์ discord ของฉัน
การแสวงหาผลประโยชน์
ข้อกำหนดเบื้องต้นรวมถึงประสบการณ์ในการประกอบ
- ike: คู่มือการแฮ็กระบบ
- pwn.college เป็นแหล่งการเรียนรู้ที่ดีที่สุดที่ฉันได้รับจากการแสวงหาผลประโยชน์ ตั้งแต่การประกอบจนถึงการใช้เคอร์เนล ครอบคลุมทุกอย่าง
- ความรู้เบื้องต้นเกี่ยวกับการพัฒนาช่องโหว่
- Nightmare: ข้อมูลเบื้องต้นเกี่ยวกับการแสวงประโยชน์แบบไบนารีโดยอิงจาก CTF
- CS6265: ห้องปฏิบัติการวิศวกรรมย้อนกลับและการหาประโยชน์แบบไบนารี
- ห้องปฏิบัติการแสวงหาผลประโยชน์ OMU
- ซีรีส์ binexp ของ LiveOverflow บน youtube
- บทช่วยสอนโดย 0xinfection
- ใช้ประโยชน์จาก dev จากการอ้างอิง infosec
- อาร์โอพี เอ็มโพเรี่ยม
- เรื่องของวินโดวส์
- การถอยหลังของ Windows x64
- การเขียนโปรแกรม Win32 API
- Windows ใช้ประโยชน์จาก dev
- ช่อง Youtube ของ Cazz
- สถาบันสอนแฮ็กเกม
- หลังจากเรียนรู้เกี่ยวกับการแสวงหาผลประโยชน์แล้ว คุณสามารถแก้ไข CTF ได้ทันที บางส่วนได้แก่:
- pwnable.kr
- ใช้ประโยชน์จาก VM เพื่อการศึกษา
- เกมสงคราม Overthewire ครอบคลุมการแสวงหาผลประโยชน์
- ความท้าทายของ HackTheBox บนพื้นฐานของการหาประโยชน์แบบไบนารี
การแฮ็กเบราว์เซอร์
ข้อกำหนดเบื้องต้น ได้แก่ ความรู้ระดับสูงเกี่ยวกับ VM ภายใน และความเข้าใจและประสบการณ์ที่มั่นคงกับ Compiler Engineering
- การพัฒนา
- สร้างตัวแยกวิเคราะห์ html dom พื้นฐาน Rust
- เอ็นจิ้นเบราว์เซอร์ของเล่น เอ็นจิ้นเบราว์เซอร์ตั้งแต่เริ่มต้น
- JavaScript ไบต์โค้ด VM Andreas Kling
- การแยกวิเคราะห์เบราว์เซอร์ & JS AST Andreas Kling
- ภายในดูเบราว์เซอร์ที่ทันสมัย
- บล็อกที่จะติดตาม: V8, MozHacks, Webkit
- เอกสาร: Firefox, Chromium, Webkit Wiki
- คอมไพเลอร์ คอมไพเลอร์: ซีรีส์ Twitch เกี่ยวกับการทำงานกับเอ็นจิ้น JavaScript
- กราฟิก: เลือก lib กราฟิก 2 มิติสำหรับภาษาหรือแพลตฟอร์มของคุณ คุณสามารถใช้ OpenGL หรือ Vulkan ได้แน่นอน?!? เพื่อแสดง CSS ที่ไร้เดียงสาของคุณ แต่เชื่อฉันเถอะว่ามันไม่คุ้มค่า
- Skia เป็นอันที่ดีสำหรับ Linux และ Android (Chrome ใช้บน Android)
- Direct2D ใช่ windows เท่านั้น
- Cairo และ Blend2D เหล่านี้เป็นแพลตฟอร์มข้ามที่ควรค่าแก่การพิจารณา
- gc ประสิทธิภาพสูงสำหรับ V8
- การผจญภัยในการรวบรวม JIT
- การเก็งกำไรใน JavaScriptCore
- การเขียนโปรแกรมเครือข่าย Rust Networking, Rust std::net, C
- หลังจากเรียนรู้เกี่ยวกับการแยกวิเคราะห์ การเรนเดอร์ และ JIT แล้ว ตอนนี้คุณสามารถสร้างเบราว์เซอร์ของคุณเองด้วย API พื้นฐานและฟีเจอร์ขั้นต่ำได้ ตามมาตรฐาน whatwg
- การแสวงหาประโยชน์: วิธีที่ดีในการทำความเข้าใจวิธีการทำงานของเบราว์เซอร์คือการพยายามแฮ็กมัน: (ข้อกำหนดเบื้องต้นรวมถึงทักษะการหาประโยชน์แบบไบนารีที่มั่นคง)
- ซีรี่ส์ Exploition ของเบราว์เซอร์โดย LiveOverflow | เขียนไว้
- Web Assembly Hacking พูดคุยเรื่อง Black Hat
- เบราว์เซอร์ pwn บน github
- การแสวงหาผลประโยชน์จากเว็บเบราว์เซอร์ - มหาวิทยาลัยฟลอริดา
- ศึกษาการเขียนความท้าทายของ CVE หรือ CTF ตามเบราว์เซอร์หรือสภาพแวดล้อมรันไทม์
มัลแวร์
ข้อกำหนดเบื้องต้น ได้แก่ ความเข้าใจระดับสูงเกี่ยวกับหน้าต่างและทักษะด้านวิศวกรรมย้อนกลับที่แข็งแกร่ง
- การวิเคราะห์มัลแวร์เชิงปฏิบัติ
- Bootcamp การวิเคราะห์มัลแวร์โดย Hackersploit
- การวิเคราะห์มัลแวร์ CS5138, UC
- การถ่ายทอดสดของ พรีลูด
- ช่องยูทูปของ Cr0w
- หลังจากเรียนรู้พื้นฐานของการย้อนกลับและพฤติกรรมของมัลแวร์แล้ว ตอนนี้คุณสามารถย้ายไปเพื่อย้อนกลับตัวอย่างจริงของมัลแวร์เหล่านั้นได้
- ห้องทดลองโดยมัลแวร์ยูนิคอร์น
- VX Underground - แหล่งรวบรวมซอร์สโค้ด ตัวอย่าง และเอกสารของมัลแวร์ที่ใหญ่ที่สุดบนอินเทอร์เน็ต
- ส่วนมัลแวร์จากการอ้างอิง infosec
- มัลแวร์บาซาร์
พื้นฐานของระบบปฏิบัติการ
ฉันไม่ค่อยแน่ใจว่าฉันต้องการเข้าสู่การพัฒนาเคอร์เนล (แต่) แต่แนวคิดดูดีและเป็นความคิดที่ดีสำหรับโครงการช่วงวันหยุด อย่าลืมอ่านข้อกำหนดก่อนเริ่มต้นใช้งาน
- OS Dev Wiki เป็นสถานที่ที่ควรไปหากคุณต้องการเรียนรู้เกี่ยวกับ OS มีการบันทึกไว้อย่างดีและยังช่วยให้เลือดออกทางตาอีกด้วย
- ห้องปฏิบัติการเคอร์เนล Linux
- ส่วนบทช่วยสอนจากระบบปฏิบัติการที่ยอดเยี่ยมบน GitHub
- บทช่วยสอนของ Broken Thorn
- OS ใน 3 ชิ้น
- หนังสือ OS ตัวน้อย
- Blog OS: การเขียน OS ใน Rust
- สไลด์ Bootlin และห้องทดลอง
- 539kernel: การเดินทางในการสร้างเคอร์เนลระบบปฏิบัติการ
- สิ่งที่ต้องดำเนินการ:
- ไฮกุ
- ตอบสนองระบบปฏิบัติการ
- ความท้าทายยูดิปทูลา
- รีดอกซ์
- โครงการสนิมมากขึ้น
- OS ที่ยอดเยี่ยมบน GitHub
- ช่องพัฒนา OS ของเซิร์ฟเวอร์ Discord ของฉันเพื่อรับทรัพยากรและหนังสือเพิ่มเติม
VM ภายใน
รายการภายในของ VM ที่ต้องศึกษาในขณะที่มีความก้าวหน้าในด้านวิศวกรรมคอมไพเลอร์และการพัฒนาเบราว์เซอร์:
- วิธีสร้างเครื่องเสมือน
- JS ภายใน, รหัสไบต์ของ V8
- สถาปัตยกรรม Dart VM
- โครงสร้างหลักของ JVM, ภายใน JVM I, ภายใน JVM ผู้เริ่มต้น
หลักสูตรรวม
การรวบรวมทรัพยากรซึ่งรวมถึง 2 หัวข้อขึ้นไปที่กล่าวถึงข้างต้น:
- Nand To Tetris หลักสูตรที่จะสอนคุณเกี่ยวกับวิธีสร้างคอมพิวเตอร์ ระบบปฏิบัติการ และฟอร์มคอมไพเลอร์
- Dive Into Systems หนังสือดีๆ ที่จะแนะนำคุณเกี่ยวกับการเขียนโปรแกรมระบบ