تعلم ديبغر الدوس ( خفايا النظام وندوز + تشفير أقراص التخزين )

عام 0 geek4arab
Spread the love
تعلم ديبغر الدوس ( خفايا النظام وندوز + تشفير أقراص التخزين )
JAAScois.com » أبحاث ودراسات »
الكاتب: JAAScois
تاريخ النشر: 05/08/2004 م
الديبغر عبارة عن برنامج دوس وضيفتة الأساسية تصحيح البرامج 16 بت
ولكن لة أهمية كبيرة في أمور كثيرة منها
1- تصحيح البرامج
2- الوصول إلى مناطق حساسة في الذاكرة وتغيرها
3- كتابة أصغر برامج للكمبيوتر
3- حماية الأقراص وفك حمايتها
4- إضافة نقاط توقف للهاردوير (أسرع طريقة لكشف أخطاء العتاد الصلب)
5- مراقبة الإتصالات عبر المنافذ – منافذ الهاردوير-

نبدأ في الموضوع
صمم الديبغر لتصحيح البرامج ولكنة لم يستخدم على نطاق واسع في تصحيح البرامج

لسبب قد يكون صعوبة الديبغر نفسة في التصحيح ولذالك

سنتجاوز هذة المرحلة لأنة توجد برامج كثيرة للتصحيح أسهل من الديبغر

أولاً: الوصول لمناطق حساسة في الذاكرة

أكيد نبدأ بمثال شغل الديبغر

Start ->Run

وأكتب

debug

وإضغط أوكي

ستظهر لك نافذة دوس فارغة بها خط بسيط يستقبل الأوامر

بعد ما يشتغل الديبغر بنكتب مثال بسيط هذا المثال سيغير في ذاكرة

الشاشة أحادية اللون التي هي شاشة الدوس عن طريق البرمجة المباشر للذاكرة

أكتب عند علامة ” – ”

e b800:0000

لاحظ المسافة بين الحرف والعنوان

وإضغط زر إنتر

تلاحظ إنة ظهر لك عنوان الذاكرة وبجانبة بايت بالقيمة الست عشرية وبجانبة نقطة وبجانبة مؤشر الكتابة

عند مؤشر الكتابة أكتب

41

وإضغط مفتاح المسافة سبيس أطول مفتاح في الكيبورد وأكتب

09

وإضغط سبيس ماذا تلاحظ في شاشة الدوس أول حرف تحول لحرف A وبلون أزرق

وهكذا كمل

42

سبيس

05

سبيس

وهكذا , وهذه صورة توضح المثال

لا حظ التغيير المباشر في الذاكرة يغير في شاشة العرض

للخروج من الديبغر إكتب q ثم إنتر

هذا مثال بسيط لفهم ما يقوم بة الديبغر وتستطيع أن تكتب إلى أي مكان في الذاكرة

كتابة أصغر برامج للكمبيوتر
هذة الطريقة لكتابة البرامج تمكنك من فهم أدق تفاصيل البرامج ومترجمات البرامج

ولنفرض أنك لا تملك مترجم للغة برمجة وتريد كتابة برنامج بسيط هل يمكنك كتابتة

أكيد وإليك المثال التالي

-a 100
0B24:0100 mov ah,09
0B24:0102 mov al,41
0B24:0104 mov bh,0
0B24:0106 mov bl,09
0B24:0108 mov cx,10
0B24:010B int 10
0B24:010D ret
0B24:010E
-e 100
0B24:0100 B4. 09. B0. 41. B7. 00. B3. 09.
0B24:0108 B9. 10. 00. CD. 10. C3.
-r cx
CX 0000
:e
-n d:\jaas.com
-w
Writing 0000E bytes

في ملاحظات على الكود عندما تكتب

e 100

وتضغط إنتر

تقوم بإدخال أول بايت للذاكرة لتكملة إدخال باقي البايتات تضغط على زر المسافة

التعليمة

r cx

تقوم بإدخال حجم البرنامج بالبايت وهو بالرقم الست عشري

e

ويساوي 14

هذا بالنسبة للكود ولكن لو واحد سأل لماذا بدأنا الكود عند العنوان 100 كما هو موضح
a 100
لأن الديبغر عندما يبدأ يكون المسجل ip = 100
وهو بداية الشفرة التنفيذية للبرنامج
لمعرفة محتويات كل المسجلات عند تشغيل الديبغر أكتب
r
ثم إنتر

-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B24 ES=0B24 SS=0B24 CS=0B24 IP=0100 NV UP EI PL NZ NA PO NC

وتستطيع أن تغير قيمة المسجل قبل أن تبدأ بكتابة البرنامج

المهم بعد كتابة البرنامج جربة وشوف مع ملاحظة أن البرنامج سيعمل في كل أجهزة الكمبيوتر التي تعمل على معالجات x86

حتى لو لم يكن هناك نظام تشغيل

حماية الأقراص وفك حمايتها
من أهم المواضيع في الديبغر معالجة الأقراص

لو تعرضت لفايروس وهذا الفايروس قام بالتغيير في قطاع الإقلاع في القرص الصلب

كيف ستعيد قطاع الإقلاع إلى وضعة الطبيعي

ملاحظة برنامج الديبغر موجود في قرص الطواريء أو start up

الذي تنشأة من خلال النظام

مثال سيكون مثالنا على قرص مرن للتعليم

أدخل القرص المرن ثم شغل برنامج الديبغر وأكتب

L 0 0 0 1

مع ملاحظة المسافة بين الحروف والأرقام

معنى هذا الأمر

الصفر الأول معناة السواقة A

الصفر الثاني الموقع في الذاكرة وهو الموقع الذي سيحمل إلية القطاع

الصفر الثالث رقم القطاع وهو 0 أي قطاع الإقلاع

الواحد معنى عدد القطاعات التي تريد تحميلها

ولتستعرض محتوى القطاع

D 0000:0000

وللتغيير في المحتوى

E 0000:0000

ومع كل بايت تغيرة إضغط زر المسافة

وللكتابة في القطاع

W 0 0 0 1

الصفر الأول عنوان القطاع المعدل في الذاكرة

الصفر الثاني يمثل السواقة

الصفر الثالث رقم القطاع المستبدل في السواقة

الواحد عدد القطاعات

وهكذا

————————-

تكملة الشرح

حماية الأقراص

ما معنى حماية القرص : هو التغيير في التنسيق أو الترتيب المعروف للقرص منعا للنسخ

والمقصود من التنسيق هو عدد القطاعات وعدد المسارات والتجمعات وعلامات القطاع

لتتمكن من حماية أي يقرص يجب أن نفهم بنية القرص

البنية الأساسية للقرص

بشرح سريع القرص يتكون من إسطوانات دائرية

هذة الإسطوانة تمر بها مسارات على شكل دائرة

هذة المسارات مقسمة إلى قطاعات

كل مجموعة قطاعات تسمى تجمع

والقطاع عبارة عن مجموعة بايتات عددها الإفتراضي 512

هذا التقسيم بالنسبة للبنية الفيزيائية للقرص

أما بالنسبة للبنية البرمجية

ينقسم القرص إلى خمس أقسام

1- سجل الإقلاع

2- جدول نظام الملفات ( فات)

3- منطقة الفهرسة

4- ملفات النظام

5- ملفات المستخدم

————–

سجل الإقلاع :

عبارة عن قطاع (في القرص المرن) أو عدة قطاعات (في القرص الصلب)

يحتوي على معلومات تقسيم القرص + برنامج الإقلاع للجهاز

ولتمييز قطاع الإقلاع فإنة يحمل توقيع في نهاية القطاع وهو 55AA

وإليك ترويسة المعلومات التي يحتويها هذا القطاع مرتبة بالرقم الست عشري

03=بداية لإسم المصنع ونسخة دوس
0B=عدد البايتات في كل قطاع
0D=عدد القطاعات في كل تجمع
0E=عدد القطاعات في القرص
10=عدد نسخ الجدول فات
11=عدد المداخل في منطقة الفهرسة
13= عدد القطاعات الكلي للقرص الاقل من 32 ميجا
16=عدد قطاعات جدول فات
18= عدد القطاعات في كل مسار
1A=عدد رؤس القراة والكتابة وهو عدد اوجة القرص
1C=عدد القطاعات المخفية في القرص
20=عدد القطاعات الكلي للأقراص أكبر من32 ميجا
24=رقم السواقة الفيزائية مثل 80=سي
26=إشارة قطاع الإقلاع الموسع

وبعد هذة الترويسة يبدأ كود لبرنامج وضيفتة تحميل نظام التشغيل

بعد إنتهاء سجل الإقلاع مباشرة يبدأ قسم نظام الملفات

———-

جدول نظام الملفات: وهو عبارة عن مجموعة من القطاعات يكون عددها على حسب حجم القرص

ويخزن فيها أرقام تدل على مواقع للقطاعات والتجمعات التي يحجزها ملف ما

ذكرنا أن حجم القطاع 512 بايت

إذا خزنا ملف كبير في الحجم فإنة يأخذ أكثر من قطاع وقد يأخذ أكثر من تجمع

عندما نطلب من النظام فتح هذا الملف كيف سيعرف كل القطاعات التي مخزن فيها الملف؟

الجواب : سيعرف القطاعات عن طريق جدول فات FAT أما بداية موقعها فعن طريق منطقة الفهرسة

سيتم التوضيح بعد شرح منطقة الفهرسة

بمعنى أن جدول فات يمثل دليل للقطاعات التي يحجزها ملف ما

وبعض البايتات لها معنى في جدول فات مثل

أول بايت في الجدول إذا كان

F8= قرص صلب
F0=قرص مرن

أما بقية البايتات فتساوي

000=التجمع المقابل غير موجود
FF0=التجمع محجوز من قبل ملف
FF7=تشير إلى أنالتجمع سيء غير محجوز
FFF-FF8= تشير هذة القيمة إلى أن المدخل خاص بآخر تجمع في القرص
أما بقية الأرقام فهي تشير إلى رقم التجمع الخاص بالملف

————-

منطقة الفهرسة : منطقة تحتوي على معلومات الملف المخزن مثل إسمة موقعة تاريخ إنشائة

وأي ملف يخزن على القرص يكتب في منطقة الفهرسة هذة المعلومات

مرتبة على عدد البايتات

0-7= تخصص لإسم الملف وقد يكون البت 0 يبين حالة الملف
على النحو التالي:
E5=تم حذف الملف
2E=فهرس فرعي
05=ملف محمي
00= فهرس لم ستخدم من اي ملف

ملاحظة : هل تعلم أنك عندما تحذف ملف من القرص فإنك تغير هذا البايت فقط

وهذة طريقة إسترداد الملفات المحذوفة بشكل نهائي من الملف بمعنى أنك تغير أول بايت

نكمل
8-10=إمتداد الملف
11=مواصفات الملف ويكون على النحو التالي
01=مقروء فقط
02=مخفي
04= ملف نظام
8=لافتة إسم القرص
20= أرشيف
10= فهرس فرعي

12-21=محجوز للنظام
22-23= يحفظ لوقت التعديل والإنشاء
وتخزن في 16 خانة ثنائية
hhhhh mmmmmm sssss
01011 100000 00101
=11:32:10

24-25= تاريخ إنشاء الملف
yyyyyyy mmmm ddddd

26-27= يحتوي على عناون بداية أول تجمع حيث تخزن شفرة الملف

هذا هو البايت + جدول فات يحددان موقع قطاعات شفرة الملف

————–

آخر قسمين : ملفات المستخدم+ ملفات النظام

وهي مكان تخزين المعلومات في القرص

إقرأ هذا المثال وبتستوعب الفكرة

لو عندنا برنامج حجمة 4 ميجابايت كيف يقوم النظام بتخزينة

يقوم النظام بما يلي

قرائة إسمة وتاريخة ومعلوماتة ثم يبدأ يبحث عن منطقة غير مشغولة في منطقة الفهرسة

وعندما يجدها ولنفرض أنة وجد المنطقة في قطاع رقم 20

يبدأ بكتابة معلومات الملف لها

مع ملاحظة مهمة ( يحتفظ برقم 20 وهو رقم القطاع) سيتم ذكر السبب

والخطوة الثانية

يبحث عن القطاعات غير مشغولة في منطقة ملفات المستخدم على القرص ولنفرض أنة

وجد قطاع رقم 100 فارغ وبعدة كل القطاعات مشغولة

ووجد قطاع رقم 210 فارغ وبعدة مشغول ووجد 545 فارغ :: كيف يخزن

يبدأ النظام بقرائة كود البرنامج ويكتبة عند القطاع رقم 100

ويطبق قانون هنا وهو 100 – 20 = 80

ومعناة = أول قطاع يبدأ فية تخزين البرنامج – رقم القطاع الذي يحتوي معلومات البرنامج في سجل الفهرسة

والناتج الي هو 80 يكتبة في نهاية معلومات الملف في سجل الفهرسة( راجع البايت 26-27) في منطقة الفهرسة

هل تريد أن تعرف لماذا كل هذة الصدعة

بكل بساطة : أكبر قيمة للبايت = 255 = الحد الأعلى من طول المسار في نظام التشغيل مثل

C:\program\aas\ffgg\d

هذا مسار حدة الأعلى 255 حرف

نرجع للموضوع

أكيد قطاع لا يكفي لتخزين 4 ميجا يبدأ يبحث عن القطاع التالي الغير مشغول وهو210

يبدأ النظام بقرائة باقي معلومات الملف ويكتبها عند 210

لاحظ هنا : يطبق قانون وهو 210 – 100 = 110

ومعناة القطاع الحالي – أول قطاع من شفرة البرنامج

والناتج إلي هو 110 يكتب في جدول نظام الملفات ( فات)

بمعنى : أن القطاع الأول فقط تصير معة شغلة أما باقي القطاعات يصيرلها مثل هذا القطاع

ويكمل النظام يقرأ ما تبقى من البرنامج ويبحث عن منطقة فارغة وهي 545

ويكتب إليها باقي كود البرنامج ويطبق المثال

100-545 =445 وتكتب القيمة إلى جدول فات وفي النهاية تظهر البيانات في جدول فات بهذة الطريقة

110-445-000

وهكذا يكتب الملف

ويظهر للمستخدم : إسمة وإمتدادة وتاريخة (أي معلومات قسم الفهرسة)

وعند الضغط على البرنامج( يقوم البرنامج بقرائة آخر بايت في قسم الفهرسة) وهو 80

ويطبق كل القوانين بالعكس

80 + 20 =100

ومعناها : بايت قسم الفهرسة + رقم القطاع الموجود فية معلومات الملف

ويقرأ أول جزء من كود البرنامج الموجود في القطاع 100

وبعد ذلك يضيف الرقم 100 إلى قيم الجدول فات

110+100=210

445+100=545

وهذة هي بقية القطاعات الموجود فيها كود البرنامج

وينقل البرنامج إلى الذاكرة ويشتغل

شفتوا كل هذي القصة تصير بمجر كليك على أيقونة

ياترى حد فكر فيها ؟؟؟

———————————

وفي معلومات أخرى عن القرص( لو تحب تزيد معلوماتك)

عرفنا أن الملف يكتب في عدة أقسام في القرص

معلوماتة في قسم الفهرسة + كود أو محتوى الملف إلى قسم ملفات المستخدم

إذا حذفنا الملف

هذة القصة يبالها مثال :

ملف إسمة : wejjdkfjdkfldkfj.exe

نلاحظ أن إسم الملف أكبر من 8 أحرف (رقم 8 عدد الأحرف في منطقة الفهرسة)

لماذا 8 أحرف: لأن الفورمات ( أي تقسيم القرص) يقوم بة نظام دوس

المهم يتحول إسم البرنامج إلى

wed~klj

كيف تحول : يحتاج قصة ثانية ?!

المهم : ينكتب في منطقة الفهرسة

ويكتب الكود إلى منطقة ملفات المستخدم

ثم

إحذف الملف : تتوقع شو الي بيصير

بيتغير فقط أول حرف من الملف من w

إلى قيمة بالست عشري =E5

ولو صممت برنامج يسترجع الملفات المحذوفة

إطلب من المستخدم إدخال إسم الملف الذي يود إسترجاعة حولة لحالة نص قصير(صيغة دوس)

ويتم التحويل عن طريق هذة الدالة

GetShortPathName

حول أول حرف إلى E5

وإبحث عن البرنامج أول ما تحصلة غير أول حرف وهو E5

إلى أي حرف والأفضل للحرف الي أدخله المستخدم

وبتلاقي الملف ظهر- شغلة بيشتغل

———————————-

وهذا يدل على شيء مهم وهو إنة المنطقة التي يخزن فيها بيانات الملفات

لا حظ بيانات الملف ( لا يمسحها النظام ) حتى لو عملت مئة مرة فورمات

فقط النظام يضع علامة على القطاع تدل على أنة قد حذف دون أن يمسح محتوياتة

ويرجع لهذا القطاع ويكتب فية إذا تم الكتابة في كل مساحة القرص ولم يجد مساحة جديدة فارغة

يرجع من البداية يدور على قطاعات علم عليها أنها فارغة

( إنتبهوا يا أصحاب المعلومات السرية)

في طريقتين لتمسح القرص نهائيا

1- عن طريق برامج خاصة وهي ماتسمى بال wipe

2- عن طريق تعبئة القرص بشكل نهائي ثم فورمات ثم تعيد تكتب فوقة

———————————

في كثير ملاحظاتي عندي عن الأقراص

لاحظنا في أول برنامج كتبناة على القرص

أنة كتب في القطاعات : 100 و 210 و 545

لو شغلنا البرنامج قد يستغرق جزء من الثانية أبطأ لين مايلاقي القطاعات

ولكن لو كان القطاع الأول 100 الثاني 1000 الثالث 2000

قد تقل أكثر السرعة

ومع كتابة ملفات كثيرة تجد أن السرعة قلت أكثر

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

وهذا الحل يسمى إلغا التجزئة وهو برنامج مشهور في وندوز تجدة في أدوات النظام

——————————–

دخلنا في مواضيع كثيرة ونسينا الموضوع الأساسي

حماية الأقراص

بكل بساطة ذكرنا أن الحماية معناها

تغيير في تنسيق القرص

ويتم هذا التنسيق بطرق كثيرة منها( الحماية على مستوى BIOS )

وهي الخدمة رقم 5 من المقاطعة 13

والبارمترات

AL= عدد القطاعات
CH=رقم المسار
DH=رقم الرأس
DL=رقم السواقة
ES:BX=تحتوي على عنوان بداية الذاكرة للتنسيق

عنوان التنسيق مكون من 4 بايتات
1-C OR T=المسار
2-H= الرأس-او الوجة
3-R or s = السجل او رقم القطاع
4-N or B = عدد البايتات في القطاع الواحد

شرح الأربع بايتات
يتكون البايت رقم واحد من رقم المسار وهو رقمين بالنظام الست عشري مثل
01=المسار1 05=لمسار5
2- ويكون كذالك تحديد الرأس
3- وكذالك رقم القطاع
أما عدد البايتات في القطاع وهو البايت رقم أربعة فيأخذ عدة قيم للبايت مثال
00=128
ويعني عدد البتات في القطاع 128 بت
و القيم الأخرى
01=256
02=512
03=1024

فمثل نريد المسار الثالث من الوجة صفر والقطاع صفر ب 512 بت
03000102
جعلنا رقم القطاع يبدأ 1 وهو يمثل الصفر خلاف للمسار والرأس
ونبدأ بتنسيق القرص بهذة الطريقة على كل القطاعات
03000202
03000302

يجب تحفيز القرص ببعض الخدمات
قبل هذة العملية يفضل تحفيز بعض خدمات ال BIOS مثل الخدمة 17 و18

——————-

هل أفتهم الموضوع

نسهل أكثر : الحماية بلغة السي

بكل بساطة بإستخدام دالة واحدة

DeviceIoControl

والمتغير

IOCTL_DISK_FORMAT_TRACKS

وهي طرق محتاجة مواضيع بتفصيل أكثر سنحاول الخوض فيها في المواضيع القادمة

وبالتوفيق ,,

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة