
هذا المنشور هو نسخة نصية من
حديثي في مؤتمر 35 Chaos للكمبيوتر في نهاية عام 2018.
ولذا يجب أن أعترف بأن MS-DOS غاضب قليلاً ، على الرغم من حقيقة أن البرامج الضارة لـ MS-DOS قد فتنتني دائمًا إلى حد ما ، لكن أولاً يجب أن نسأل: "ما هي DOS؟"
- DOS هو أحد إصدارات CP / M ، وهو نظام تشغيل قديم جدًا.
- تمتد عائلة DOS على مجموعة واسعة من الموردين ، لأنه ببساطة DOS لا يعني أنه سيتم تشغيله على وحدة المعالجة المركزية 8086 أو أفضل
- لدى بعض مزودي خدمة DOS هؤلاء توافق API ، مما يعني أن بعضهم يستخدم برامج ضارة!
فيديو الأداء:
تمت كتابة المنشور بدعم من EDISON Software ، الذي يقوم بتطوير تطبيق لمشغل محمول افتراضي ويشارك في تطوير وصيانة المواقع في Python .

ولكن في الواقع ، فإن معظم ذكرياتنا من عصر DOS هي جماليات كيف تبدو أجهزة الكمبيوتر في ذلك الوقت:

هذا هو عصر "الحوسبة البيج" ولوحة المفاتيح طراز M ، والتي يمكن أن تكون مشهورة أو سيئة السمعة اعتمادًا على ما إذا كنت تحب لوحة المفاتيح المزعجة أم لا.

البعض منا قد يكون ذكريات استخدام DOS ، والبعض قد لا تزال تستخدم DOS!

على سبيل المثال ، يشاع أن جورج آر مارتن ، الذي كتب لعبة ذا ثرونز ، استخدم Wordstar في DOS لكتابة كتاب!

لا يمكننا أيضًا تفويت برنامج QBASIC ، حيث سيكون هذا بالنسبة للكثيرين أول من يعرفهم بالبرمجة!

لكن في بعض الأحيان ، لم تكن الحياة باستخدام DOS جيدة ، وأحياناً استخدمت DOS ، وأشياء من هذا القبيل حدثت فجأة. في هذا المثال ، يتم تشغيل لحن صغير أثناء الطباعة ، لذلك قد يكون هذا موقفًا محرجًا للغاية في بيئة مكتبية.

البعض منهم "لطيف" ، في هذه الحالة ، على سبيل المثال ، تمر سيارة إسعاف مرسومة برموز أسكي ، ثم يبدأ البرنامج الذي تريد فتحه ، في أسوأ الحالات ، بمضايقات طفيفة.
بفضل مجموعة من محفوظات البرامج الضارة التي تعمل تحت اسم VX Heavens ، لدينا أرشيف جيد لبرامج ضارة DOS التاريخية ، أو على الأقل حتى تقوم الشرطة الأوكرانية بمداهمة الموقع:
في يوم الجمعة الموافق 23 مارس / آذار ، استولت الشرطة على الخادم فيما يتعلق بتحقيق جنائي (المادة 361-1 من القانون الجنائي لأوكرانيا - مما أدى إلى ظهور برامج ضارة بغرض بيعها أو توزيعها) بناءً على طلب شخص ما. حول "وضع برامج ضارة في الوصول الحر المصممة للقرصنة غير المصرح بها لأجهزة الكمبيوتر والأنظمة الآلية وشبكات الكمبيوتر".
لحسن الحظ ، لا تزال مواقع التورنت الشهيرة تحتوي على نسخ من قاعدة بيانات الموقع التي يمكن أن توفر لنا مجموعة بيانات ممتازة:
$ tar -tvf viruses-20070914.tar | wc -l 66714 $ ls -alh viruses-20070914.tar 6.6G viruses-20070914.tar
ومع ذلك ، لبدء دراسة هذه العينات ، نحتاج أولاً إلى فهم تدفق التوزيع النموذجي لهذه العينات ، بالنظر إلى أن هذه البرامج عملت في عصر ما قبل الإنترنت:

بعد تلقي الملف المصاب على نظامك وتشغيله ، سيقوم البرنامج الضار إما بالبحث أو تثبيت برامج اعتراض مكالمات النظام عن البرامج التي تقوم بتشغيلها. يفعل هذا في كثير من الأحيان بطريقة خفية وغير مرئية لتجنب الكشف. تعتبر أهمية الدقة أمرًا مهمًا لأنه لتوزيع هذا البرنامج الضار ، يجب عليك إما نقله إلى نظام آخر باستخدام وسيط (قرص مرن) أو تنزيله إلى نقطة توزيع أخرى ، مثل BBS.

في وقت التشغيل ، يوجد للبرامج الضارة خياران ؛ يمكن أن تظل إما مخفية وتصيب ملفات جديدة ، أو تعرض حمولة.
بعض الحمولات جميلة جدا! يستخدم المثال التالي وظائف غير عادية ، مثل 256 لونًا:

أو هذا الذي يلعب مع المخزن المؤقت الشاشة:


ومع ذلك ، بالنسبة للجزء الأكبر ، ستبقى البرامج الضارة صامتة وتحاول العثور على ملفات للعدوى. تكون إصابة معظم الملفات بسيطة للغاية ، على سبيل المثال ، إذا قمت بعرض ملف COM كشريط طويل من رمز الجهاز:

ثم "كل ما عليك فعله" هو إدخال JMP في بداية البرنامج وإضافة بيانات إلى نهاية البرنامج. سيبدو شيء مثل هذا:

كان بعض التعليمات البرمجية أكثر ذكاءً ووجد "مساحة فارغة" في الملف الثنائي وكتب نفسه هناك ، مما حال دون زيادة حجم الملف الثنائي ، مما يعني ، على الأرجح ، أن مكافحة الفيروسات يمكن أن تستخدم العلم الأحمر.

ومع ذلك ، في وقت سابق ، ذكرت أيضا اعتراض نظام المكالمات. على الرغم من أن وقت تشغيل MS-DOS بسيط للغاية وغير محمي من الناحية العملية (يمكنك تحميل Linux من ملف COM بشكل تافه). لا يزال يحتوي على واجهة برمجة التطبيقات (API) الكاملة حتى لا تحتاج التطبيقات إلى تطبيق نظام الملفات الخاص بها. فيما يلي بعض ميزات syscalls:

إنها تعمل عن طريق التسبب في مقاطعة البرنامج ، حيث يطلب البرنامج من المعالج الانتقال إلى قسم آخر من ذاكرة النظام لمعالجة شيء ما:

ومع ذلك ، توفر MS-DOS أيضًا القدرة على إضافة / تعديل هذه المكالمات (باستخدام مكالمة أخرى) ، مما يسمح لك بتوسيع النظام بحيث يمكن تحميل برامج التشغيل الجديدة في وقت التشغيل. ومع ذلك ، فهو أيضًا مكان مثالي لإضافة اعتراضات البرامج الضارة:

لقد كانت خدعة مستخدمة بشكل جيد ، لأنه يمكنك اعتراض مكالمة "فتح ملف" ثم استخدامها للكشف عن الملفات القابلة للتنفيذ الجديدة في النظام ... وإلحاق الأذى بها.
كمثال سريع لكيفية استخدامها ، دعونا نلقي نظرة على برنامج Hello World البسيط:

كما نرى ، هناك نداءان من النوع
int
. نستخدم
21h
(h = hex) كرقم استدعاء النظام الرئيسي ، ويمكننا تحديد الإجراء الذي نريد من MS-DOS تنفيذه استنادًا إلى قيمة
Ah

في هذه الحالة ، يقوم البرنامج بإجراء مكالمة لطباعة الخط ، ثم الخروج برمز الإرجاع 0 (غير محدد).
كما ذكر سابقا. عند استدعاء int 21h ، سيبحث المعالج المركزي في جدول IVT إلى أين تذهب ، وغالبًا ما يوجد داخل هذا المعالج شريحة مثل جهاز التوجيه الذي يوجه المكالمات الرئيسية المختلفة ، في حالة Int 21h ، فإنه يوجه إلى وظائف مختلفة بناءً على القيمة ah. بمجرد أن نصل إلى المكان ، سيتولى معالج الاتصال الفعلي التعامل مع المهمة ، ثم يركض للعودة إلى البرنامج الرئيسي ، وغالبًا ما يترك سجلات لنتائج المكالمة:

اذن إذا كنا نريد أن نرى جميع مكالمات النظام التي بدأها البرنامج ، فيمكننا تعيين نقطة توقف في بداية معالج المقاطعة والتحقق من ماه:

نقوم بذلك لأن معالج المقاطعة يكون دائمًا في مكان ثابت في MS-DOS (هذا أقدم بكثير من عصر ASLR و Kernel ASLR) ، وموقع البرنامج ليس كذلك.

بمجرد إطلاقه ، يمكننا أن نرى التحديات التي يطرحها هذا النمط. بينما يمكننا أن نرى على الشاشة أنه طبع إشعارًا حول ملف عنزة (Goat هو ملف مصمم للإصابة ، مثل عنزة فداء). نرى أيضًا أن هذا البرنامج يقوم بأكثر من مجرد طباعة خط. فإنه يتحقق إصدار DOS (ربما للتحقق من التوافق) ثم يفتح ، يقرأ ويكتب البيانات!

هذا مثير للاهتمام! لكن نود معرفة المزيد حول ما يدعو إليه النظام المظلل باللون الأحمر ، حيث يجب أن يكون لديهم إدخال لأشياء مثل أسماء الملفات والبيانات للكتابة إلى الملفات / الإخراج إلى الشاشة.
للقيام بذلك ، نحتاج إلى إلقاء نظرة على السجلات الأخرى أثناء syscall:

باستخدام "سلسلة الطباعة" كمثال بسيط ، يمكننا أن نرى كيف يبدو الاستخدام:

ما هو DS: DX؟ لماذا يوجد سجلان هنا ، وكيف نحصل على بيانات منهما؟
للقيام بذلك ، نحتاج إلى فهم المزيد حول معالج 8086.

المعالج 8086 هو وحدة المعالجة المركزية 16 بت ، ولكن مع معالجة الذاكرة 20 بت. هذا يعني أنه لا يمكن للمعالج تخزين القيم التي تشير إلى 64 كيلو بايت فقط ، فهذه مشكلة عندما تصل سعة الذاكرة إلى 1 ميجابايت.
للتغلب على هذا ، نحتاج إلى فهم سجلات التجزئة:

يحتوي معالج 8086 على 4 سجلات تجزئة نحتاج إلى العناية بها:
- CS - قطعة الكود
- DS - شريحة البيانات
- SS - كومة الجزء
- ES - شريحة إضافية (في حال احتجت إلى واحدة أخرى للتغلب على المواقف المختلفة)
هناك عدد من سجلات الأغراض العامة الأخرى التي توفر لك من الاستخدام المفرط للذاكرة وتتيح لك تمرير المعلمات إلى وظائف أخرى.
تسجل التجزئة العمل عن طريق تغيير الكتلة في ذاكرة الوصول العشوائي:

يسمح ذلك لوحدة المعالجة المركزية ذات 16 بت برؤية 20 بت من ذاكرة الوصول العشوائي ، مما يضمن أن كل قيمة DS يتم إزاحة الكتلة بـ 16 بايت.

في هذه الحالة ، يتم استخدام استدعاء DS كمؤشر داخل إطار 16 بت فيما يتعلق بمكان بداية السطر. بعد ذلك سوف تفحص الطابعة الخطية حتى تعثر على الحرف $ ، ثم تتوقف. هذا مشابه للأنظمة الأخرى التي تستخدم بايت فارغة بدلاً من $.

مع عصر ISA x86 ، لم يتغير الكثير ، فبدلاً من زيادة حجم بت المعالج ، أصبحت السجلات نفسها أوسع.
لذلك ، مع هذه المعرفة ، يمكننا إنشاء قائمة "المهام" لتتبع هذه البرامج:

باستخدام هذا الإعداد ، يمكننا رمي العديد من أجهزة الكمبيوتر الكبيرة في المشكلة لعدة ساعات وجمع النتائج!

ونحن نحصل ...

لا شيء من هذا القبيل.
هذا مخيب للآمال.
لقد أحرقنا ما لا يقل عن الهامستر من القوة ولم نحصل على أي عمليات تنشيط رائعة!
(Xs كيفية ترجمة هذا)
إذا نظرنا إلى بعض العينات ، سنرى مسدس تدخين هنا. تتحقق قطعة مناسبة من العينات من التاريخ أو الوقت.
إذا نظرنا إلى الوثائق الخاصة بهذه المكالمات ، فسنرى أن استدعاء النظام يُرجع القيم في شكل سجلات للبرنامج:

حتى نتمكن من إجبارهم! كل ما نحتاج إلى القيام به هو شيء مثل هذا:

ولكن هناك مشكلة واحدة مع هذه الطريقة.

تستغرق خطوة اختبار المثال حوالي 15 ثانية ، لأنه يستخدم عملية محاكاة qemu الكاملة ، وقد يستغرق الأمر ما يصل إلى 15 ثانية لتشغيل البرنامج بالكامل في الجهاز الظاهري. نظرًا لأن DOS لا يحتوي على ميزات موفرة للطاقة ، فهذا يعني أنه عندما يكون DOS في وضع الاستعداد ، فإنه في
دورة مزدحمةلذلك يمكننا أن ننظر إلى هذه المشكلة بشكل مختلف من خلال النظر في الرمز الذي سيتم تنفيذه بعد طلب التاريخ / الوقت.
نظرًا لأن برنامج التتبع موجود في معالج المقاطعة ، فإننا لا نعرف من المربع الذي يوجد به البرنامج:

للقيام بذلك ، نحتاج إلى إلقاء نظرة على المجموعة حيث تنتظرنا سجلات CS و IP!

بمجرد أخذ هاتين السجالتين من الحزمة ، يمكننا استخدامها للحصول على رمز الإرجاع بحيث تبدو قائمة المراجعة لدينا كما يلي:

بعد قيامنا بهذا واختبارنا المتكرر لمجموعة البيانات ، سنرى ما هو شكل رمز الإرجاع!

هنا عينة من واحد. هنا نرى أن هناك مقارنة بين DL و 0x1e.

إذا نظرنا إلى وثائقنا ، فسنرى أن DL هو يوم الشهر ، أي أنه يمكننا تحليل أفضل ثلاثة رموز تشغيل كما يلي:

يمكننا أن نذهب وننظر يدويًا في كل هذا ، ولكن هناك العديد من هذه العينات التي تتحقق من الوقت ، حوالي 4700:

بدلاً من ذلك ، نحن بحاجة إلى القيام بشيء آخر نحتاج إلى كتابة شيء ... نحتاج إلى الكتابة ...

أسوأ محاكي x86 في العالم ، يسمى BenX86 ، هو محاكي مصمم خصيصًا لتلبية احتياجاتنا ، ولا شيء أكثر من ذلك:

لكنه لديه بعض المزايا في سرعته.


أضفنا 10000 اختبار تنفيذ مختلف بناءً على المسارات التي وجدناها باستخدام القوة الغاشمة باستخدام BenX86. لذا ، سأنتهي ببعض الاكتشافات المفضلة التي تم تنشيطها بالوقت:

يتم تنشيط هذا النمط في يوم رأس السنة ويوقف نظامك بعد عرض الترحيب. قد يكون من الجيد أن تكون عالقًا في المكتب للعام الجديد ، أو قد يكون سيئًا إذا كنت بحاجة فعلًا إلى القيام بشيء ما في يوم رأس السنة الجديدة.

هذا المثال فاجأني كثيرا. يتم تنشيطه في أوائل عام 1995 ويبلغ المستخدم بجميع الملفات المصابة التي أصيب بها ، ثم يزيل الفيروس (حذف الانتقال في البداية) ثم لا يفعل شيئًا آخر. رغم أنه لسبب ما يقول أنه يجب عليك شراء McAfee ، فمن الواضح أن هذه الرسالة ليست قديمة.

هذا ، بصراحة ، يربكني حقًا ، في 8 نوفمبر من أي عام ، سوف يحول جميع نقاط الصفر في النظام إلى رموز صغيرة من "الكراهية". إنها تزعجني حقًا إذا كنت تعرف سبب حاجتك إليها ، دعني أعرف ...

قد يكون هذا كابوسًا عندما يعرض ، بعد بدء تشغيل أي برنامج ، رسالة مفادها أنها لا تستطيع تناول محرك الأقراص الرئيسي. سيكون من المقلق بشكل لا يصدق أن نرى من اللون الأزرق.

في الختام ، لدينا ما هو إصدار Navy Seal Copypasta من البرامج الضارة لـ DOS. لست متأكدًا من أن هذا المؤلف لا يحب علاء الدين ، ولكن مهما فعلت ، فأنت شخص.
إذا كنت مهتمًا بالكود الذي تم تشغيله في هذه المقالة ، فقد
أصدرت مجموعة أدواتي على جيثب ، دون أي ضمان. إذا كنت تريد إنشاء هذا الرمز بنفسك ، فستحتاج إلى العمل للتأكد من أنه يعمل مع تثبيت MS-DOS (إصلاح نقطة توقف معالج)
ومع ذلك ، إذا نظرت فقط لمعرفة ما رأيته أثناء النظر في هذا المشروع ، فقد أرشفت واجهة الويب هنا:
dosv.benjojo.co.ukاراك قريبا!