تعلم ديبغر الدوس ( خفايا النظام وندوز + تشفير أقراص التخزين )
الأربعاء يونيو 24, 2009 12:35 am
تعلم ديبغر الدوس ( خفايا النظام وندوز + تشفير أقراص التخزين )
المصدر : JAAScois.com
الديبغر عبارة عن برنامج دوس وضيفتة الأساسية تصحيح البرامج 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
وهي طرق محتاجة مواضيع بتفصيل أكثر سنحاول الخوض فيها في المواضيع القادمة
وبالتوفيق ,,
المصدر : JAAScois.com
الديبغر عبارة عن برنامج دوس وضيفتة الأساسية تصحيح البرامج 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
وهي طرق محتاجة مواضيع بتفصيل أكثر سنحاول الخوض فيها في المواضيع القادمة
وبالتوفيق ,,
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى