خريطة طريق برمجة النظام
خريطة طريق لتعليم نفسي تطوير برامج التحويل البرمجي والهندسة العكسية للبرامج الضارة وأساسيات تطوير kernel. تجدر الإشارة إلى أنها مخصصة فقط للمعرفة الأساسية ولا تجعلك سيدًا في أي منها. سأختار واحدًا أو أكثر من المجالات المذكورة أدناه للبحث لاحقًا في بعض المواضيع المحددة. تمتلك جامعة البرمجة منخفضة المستوى أيضًا قائمة جيدة من الموارد التي يجب اتباعها، ولكن هذه هي خارطة الطريق الشخصية الخاصة بي.
المواضيع المراد دراستها هنا قد تكون أو لا تكون مناسبة ويمكن دراستها وفقًا لتفضيلاتك، بشرط استيفاء المتطلبات الأساسية لكل واحد منها.
المتطلبات الأساسية
أفترض بالفعل أن لديك فهمًا أساسيًا لهندسة الكمبيوتر وخبرة في لغة برمجة نظام واحدة على الأقل، وبعض الأساسيات حول كيفية عمل التجميع وعلى دراية باستخدام أي نظام POSIX. يمكن العثور على نظرة تفصيلية جيدة لكيفية عمل أجهزة الكمبيوتر على مستوى الإلكترونيات في كتاب مقدمة إلى الإلكترونيات الرقمية من تأليف Agner Fog. وللحصول على عمل مكافئ للبرنامج، يمكنك الرجوع إلى cpu.land.
لغات برمجة النظام
تعلم أي اثنتين من اللغات المذكورة، وقم بتنفيذ بعض المشاريع الأساسية لتتعرف عليها، وحل بعض تمارين البرمجة.
- ج
- الصدأ
- تعلم مرجع C++، C++
- سي++ (فيديو)
تعلم بعض هندسة الكمبيوتر
تعلم هندسة الكمبيوتر القائمة على Arm وRISCV لبناء نهج فعال ومحسن لحل المشكلات على مستوى الأجهزة
- ديفيد أ. باترسون، جون إل. هينيسي "هندسة الكمبيوتر: نهج كمي"
- ديفيد أ. باترسون، جون إل. هينيسي "إصدار ARM لتنظيم الكمبيوتر وتصميمه"
- ديفيد أ. باترسون، جون إل. هينيسي "تنظيم الكمبيوتر وتصميمه إصدار RISC-V"
- جون بول شين، ميكو إتش. ليباستي "تصميم المعالج الحديث: أساسيات المعالجات السلمية الفائقة"
- هندسة الكمبيوتر CMU بواسطة CMU يوتيوب
تعلم بعض التجميع
المتطلبات الأساسية: التعرف على المنطق الرقمي
إذا لم تكن على دراية بالتجميع بعد، فإنني أوصي بمراجعة بعض البرامج التعليمية مثل-
- التشغيل السريع x86[MASM]
- التشغيل السريع x86 [NASM]
- مدرس ASM[NASM]
- مقدمة إلى لغة التجميع x86 بواسطة ديفي على اليوتيوب
- دروس OMU x86_64
- فن عاصم
- كتيبات إنتل x64
- مستكشف المترجم: يساعد إنشاء برامج C وقراءة التفكيك دائمًا على مطابقة الأنماط.
- مقالة بواسطة 0x44 عكس الدمى لتكون قادرة على عكس الكراك الأساسية.
بعد ذلك، أنصحك بحل تمارين سهلة للتمرين. يعد crackmes.one وtryhackme مكانين للعثور على بعض الأشياء السهلة. لا تزال الأشياء الصعبة تتطلب بعض المعرفة في مجال pwning والتي سأناقشها في قسم الاستغلال.
المجمعين
تتضمن المتطلبات الأساسية الخبرة في إنشاء المشاريع بلغة برمجة النظام وفهمًا عميقًا للذاكرة ووحدة المعالجة المركزية.
- قراءة كتاب التنين.
- تعد صياغة المترجمين الفوريين فكرة جيدة للمبتدئين.
- توفر أنماط تنفيذ اللغة بعض الأفكار الجيدة حول طريقة عمل المترجمين.
- Stanford Notes CS143 مهام وملاحظات جيدة تتعلق بتصميم المترجم.
- شرائح ومشاريع CMU
- المجمعين رهيبة
- اصنع لغة في الصدأ
- أساسيات تحليل الصدأ
- جعل المشي على الشجرة لغة برمجة مفسرة.
- حاول أيضًا تنفيذ محرك بايت كود لمترجمك الفوري، وجرب بعض التحسينات وGC.
- يمكنك أيضًا محاكاة أجهزة مثل Chip8 أو Nes.
- تتطلب المحاكاة معرفة بالأجزاء الداخلية للجهاز الافتراضي وبرمجة الرسومات.
- يمكنك استخدام SDL كمحرك IO/رسومات/صوت.
- حاول إنشاء لغة برمجة مجمعة تستهدف بنية واحدة.
- تعرف على سلسلة أدوات LLVM
- البرنامج التعليمي LLVM في الصدأ
- حاول اتباع البرنامج التعليمي لـ llvm لإنشاء أول لغة برمجة لك باستخدام الواجهة الخلفية لـ llvm.
- حاول إنشاء مترجم Just In Time حول محرك البايت كود، واكتشف المناطق الساخنة وJIT فيها.
- قسم lang-dev الخاص بخادم Discord
استغلال
تشمل المتطلبات الأساسية الخبرة في التجميع.
- مثل: دليل اختراق الأنظمة
- pwn.college هو أفضل مصدر تعليمي حصلت عليه حتى الآن لاستغلاله. بدءًا من التجميع وحتى استغلال النواة، فهو يغطي كل شيء.
- مقدمة لاستغلال التنمية
- Nightmare: مقدمة إلى الاستغلال الثنائي القائم على CTFs.
- CS6265: معمل الهندسة العكسية والاستغلال الثنائي
- مختبرات استغلال OMU
- سلسلة Binexp الخاصة بـ LiveOverflow على اليوتيوب
- البرنامج التعليمي بواسطة 0xinfection
- استغلال dev على مرجع infosec
- متجر شرطة عمان السلطانية
- اشياء ويندوز
- عكس ويندوز x64
- برمجة Win32 API
- ويندوز يستغل ديف
- قناة كاز على اليوتيوب
- أكاديمية قرصنة الألعاب
- بعد التعرف على بعض طرق الاستغلال، يمكنك الآن حل مشكلات CTF. بعض منهم ما يلي:
- pwnable.kr
- استغلال الأجهزة الافتراضية الخاصة بالتعليم
- مناورات Overthewire تغطي الاستغلال
- تحديات HackTheBox تعتمد على الاستغلال الثنائي
اختراق المتصفح
تتضمن المتطلبات الأساسية معرفة عالية المستوى بالأجزاء الداخلية من VM، وفهمًا وخبرة قويتين في هندسة المترجمات
- تطوير
- قم بإنشاء محلل html dom أساسي Rust
- لعبة محرك المتصفح، محرك المتصفح من الصفر
- رمز بايت جافا سكريبت VM أندرياس كلينج
- تحليل المتصفح وJS AST أندرياس كلينج
- نظرة من الداخل على المتصفح الحديث
- المدونات التي يجب متابعتها: V8، MozHacks، Webkit
- المستندات: Firefox، Chromium، Webkit Wiki
- Compiler Compiler: سلسلة Twitch حول العمل على محرك JavaScript
- الرسومات: اختر lib رسومات ثنائية الأبعاد للغتك أو نظامك الأساسي. يمكنك بالتأكيد استخدام برنامج OpenGL أو Vulkan؟!؟ لتقديم CSS البريء الخاص بك ولكن ثق بي أن الأمر لا يستحق ذلك.
- يعد Skia خيارًا جيدًا لنظامي التشغيل Linux وAndroid (يستخدمه Chrome على Android)
- Direct2D نعم ويندوز فقط.
- القاهرة و Blend2D هما منصتان متعددتا المنصات، تستحقان النظر فيهما.
- جي سي عالي الأداء لـ V8
- مغامرات في تجميع JIT
- المضاربة في JavaScriptCore
- برمجة الشبكات Rust Networking, Rust std::net, C
- بعد التعرف على التحليل والعرض وJIT، يمكنك الآن إنشاء متصفحك الخاص باستخدام واجهات برمجة التطبيقات الأساسية والحد الأدنى من الميزات، باتباع معايير Whatwg
- الاستغلال: إحدى الطرق الرائعة لفهم كيفية عمل المتصفح هي محاولة اختراقه: (تتضمن المتطلبات الأساسية مهارات استغلال ثنائية قوية)
- سلسلة استغلال المتصفح من LiveOverflow | مكتوب
- نقاش تجميع الويب بالقبعة السوداء
- متصفح pwn على جيثب
- استغلال متصفح الويب – جامعة فلوريدا
- انتقل إلى عمليات الكتابة عن تحديات CVEs أو CTF بناءً على المتصفحات أو بيئات وقت التشغيل.
البرامج الضارة
تتضمن المتطلبات الأساسية فهمًا عالي المستوى للنوافذ ومهارات هندسية عكسية قوية.
- التحليل العملي للبرامج الضارة
- المعسكر التدريبي لتحليل البرامج الضارة بواسطة hackersploit
- CS5138 تحليل البرامج الضارة، جامعة كاليفورنيا
- البث المباشر لPrelude
- قناة Cr0w على اليوتيوب
- بعد تعلم أساسيات عكس البرامج الضارة وسلوكها، يمكنك الآن الانتقال إلى عكس بعض العينات الحقيقية منها.
- مختبرات من Malware Unicorn
- VX Underground - أكبر مجموعة من التعليمات البرمجية المصدرية للبرامج الضارة والعينات والأبحاث الموجودة على الإنترنت.
- قسم البرامج الضارة من مرجع infosec
- بازار البرامج الضارة
أساسيات نظام التشغيل
لست متأكدًا تمامًا من رغبتي في الدخول في تطوير النواة (حتى الآن) ولكن المفاهيم تبدو رائعة وهي فكرة جيدة لمشروع عطلة. تأكد من قراءة المتطلبات قبل البدء.
- OS Dev Wiki هو المكان المناسب إذا كنت تريد التعرف على نظام التشغيل. إنه موثق جيدًا ويساعد أيضًا على نزيف العيون.
- مختبرات نواة لينكس
- قسم البرامج التعليمية من نظام التشغيل الرائع على جيثب
- البرنامج التعليمي لبروكن ثورن
- نظام التشغيل في 3 قطع
- كتاب نظام التشغيل الصغير
- نظام تشغيل المدونة: كتابة نظام تشغيل في Rust
- شرائح ومختبرات Bootlin
- 539kernel: رحلة في إنشاء نواة نظام التشغيل
- الأشياء التي يجب العمل عليها:
- هايكو
- رد فعل نظام التشغيل
- تحدي يوديبتولا
- الأكسدة والاختزال
- المزيد من مشاريع الصدأ
- نظام تشغيل رائع على جيثب
- قناة تطوير نظام التشغيل الخاصة بخادم Discord للحصول على المزيد من الموارد والكتب.
الأجزاء الداخلية من VM
قوائم الأجزاء الداخلية من VM التي يجب دراستها أثناء إحراز تقدم في هندسة المترجم وتطوير المتصفح:
- كيفية بناء آلة افتراضية
- JS الداخلية، الرمز الثانوي لـ V8
- بنية دارت VM
- هيكل JVM الرئيسي، JVM الداخلي I، JVM الداخلي للمبتدئين
الدورات الجماعية
مجموعة من الموارد تتضمن موضوعين أو أكثر من المواضيع التي تمت مناقشتها أعلاه:
- Nand To Tetris دورة تعلمك كيفية بناء جهاز كمبيوتر ونظام تشغيل ونموذج مترجم.
- الغوص في الأنظمة كتاب جيد جدًا لتعريفك ببرمجة الأنظمة.