من الماضي
21 يونيو 2007كنت اقوم بجولة تفقدية على الملفات داخل الجهاز لنسخ ماهو ضروري منها ، استعداداً للأنتقال القادم
بالصدفه وقعت على مجموعة من البرامج كنت اعمل على تطويرها منذ مايقارب 4 الى 5 سنوات مضت
لاكن البعض منها لم يكتمل بعد والبعض الآخر اكتمل وضل حبيس مجلده
احببت ان انشرها هنا لكي يستفيد منها الآخرون ، ووقع اختياري على برنامجين اعتقد انهما هما الافضل للنشر
Windows Handles :
يقوم هذا البرنامج باستعرض كيفية التعامل مع المقابض ( Handle ) ضمن نظام التشغيل Windows
ماهو مهم هو كيفية التعامل مع SubHandle ، اعتقد انه جيدر بالاطلاع لكل بحاث في هذا المجال ، البرنامج مرفق مع السورس كود
FileManager For Server :
هذا البرنامج قمت بتطويره اثناء دراستي في المرحلة الثانوية ، من اجل تقديم نوع من المساعدة لمدرس الحاسوب لادارة الملفات داخل المعمل عبر الشبكة
ولاكن للأسف لم يكتمل هذا العمل على الرغم اني قطعت جزء كبير منه
يمكنك الاطلاع على البرنامج فهو مرفق مع السورس كود ، اتمنى ان يتم استخدامه بصورة سليمة
Paldo عشق من أول نظرة
15 يونيو 2007كعادتي احب ان افكر بالمسقبل كثيراً ، فهذه المرة كنت افكر بالانتقال القادم لنظام التشغيل
فبعد اصدار Microsoft لـ Windows Vista اصبح هناك مفرق للطرق
فجميع اعمالي متوافقه او مبنية على انظمة Windows السابقة ، ولاكن المستقبل سيحتم علي الانتقال الى ماهو جديد لامحالة
خلال الفترة السابقة كنت قد حصلت على توزيعات Linux المختلفة كـ Suse ، Ubuntu , Mandriva ..
ولاكن لم يكن هناك آلفه كما هو الحال مع XP
ولاكن !!
اليوم استطعت الحصول على احدى توزيعات Linux الجديدة والتي تدعى Paldo
بعد تجربة امتدت لـ 5 دقائق فقط حصلت هناك الفه غير مسبوقة سواء لي انا او لجهازي المحمول
فكانت متناغمه تناغم تام مع Hardware ، وكذلك ايضاً فهي نسخة موجهه للمبرمجين حيث تحتوي بشكل اساسي على اغلب بيئات التطوير لـ Linux
حتى اني أصبحت اشك بأن هذه التوزيعة صنعت لي انا خصيصاً ولجهازي انا بالتحديد ![]()
سنتحدث عنها بمزيد من التفاصيل في تدوينات قادمه
( والله يديم المحبه )
خارطة PE
14 يونيو 2007بعد جولة تفقدية لمستنداتي ، وجدت بالصدفة كتاب او مرجع ( pdf ) على شكل رسم بياني
يبين تركيبه PE بشكل دقيق ، موضحاً اقسامها وفروعها بالتفصيل
فهي بالفعل خارطة لاغنى عنها لكل من يريد ان يكتشف هذا العالم الرائع
يمكن الحصول عليها من هنا
Export Table
6 يونيو 2007سنستعرض هنا كيفية الوصول الى اسماء الدوال التي تقدمها الملفات المكتبية
يوجد عنوان الجدول عند الازاحة 178 من بداية الملف ( RVA )

عند الذهاب الى عنوان الجدول سنجد التالي

هذي هي تركيبة الجدول من بداية عنوانه
struct _IMAGE_EXPORT_DIRECTORY {
0x00 DWORD Characteristics;
0x04 DWORD TimeDateStamp;
0x08 WORD MajorVersion;
0x0a WORD MinorVersion;
0x0c DWORD Name;
0x10 DWORD Base;
0x14 DWORD NumberOfFunctions;
0x18 DWORD NumberOfNames;
0x1c DWORD AddressOfFunctions;
0x20 DWORD AddressOfNames;
0x24 DWORD AddressOfNameOrdinals;
};
مايهمنا هو شيئين NumberOfNames و AddressOfNames
في الصورة السابقة قمت بتلوين مكان وجود الحقل NumberOfNames باللون الاصفر
وكذلك AddressOfNames باللون الاخضر
من الصورة السابقة
NumberOfNames = 10 وهي عدد الدوال
AddressOfNames = 040068 وهي بداية عنوان جدول الاسماء
لننتقل الى AddressOfNames

ما هو مظلل باللون الرصاصي يشير الى بداية الجزء ويمثل عنوان اسم اول دالة ( حجم العنونة DWord )
للنتقل الى هذا العنوان

كما تشاهد في الصورة اسم الدالة التي يشير اليها العنوان السابق ، وهكذا يتم الوصول الى بقية الدوال
ونتوقف عن قراءة الدوال عند الوصول الى العدد المسجل في NumberOfNames والتي يمثل العدد الكلي للدوال
هذا كل مافي الأمر،
وقد قمت بعمل برنامج بـ C++ Builder يقوم بإستخراج اسماء الدوال من جدول Export Table تلقائياً
يمكنك الاطلاع عليه فهو مرفق مع السورس كود

Import Table
27 مايو 2007Import Table هو جدول الملفات المستورده المستخدمه دولها ضمن البرنامج ( sub routine )
سنستعرض هنا كيفية الوصول الى هذا الجدول ومعرفة اسماء الملفات المستخدمه ودوالها ضمن بنية PE
( يفضل وجود معرفة مسبقة عن هذه البنية او مراجعة PECOFF في احدى التدوينات السابقة )
تبدأ بنية ملفات PE بـالرأس DOS Header وهي من بقايا البنية MZ ، فالـ PE اتت كتطوير للبنية MZ

مايهمنا هنا ماهو موجود في العنوان 3c وهو بداية الجزء PE بالرأس NT Header مسجل كقيمة RVA اي مقدار الازاحة من بداية الملف
كما هو موضح في الصورة السابقة فالقيمة الموجودة في العنوان 3c هي 100 ( جميع القيم بـ Hex ) لننتقل الى هذا العنوان

هنا يبدا الراس الحقيقي للـ PE والذي يميزه المعرف PE في اول 4 بايت من هذا الجزء
عند العنوان 180 نجد عنوان الجدول ( Import Table ) مسجل كقيمة RVA
ننتقل الى هذا العنوان

في هذه الصورة قسمت هذه المنطقة الى عدة الوان
مايهمنا هو كل من اللونين الرمادي والاصفر ، وبقية الالوان تمثل حجم كل حزء
القيمة الموجودة في اللون الرمادي بالجزء الاول تشير الى العنوان الذي يحوي اسم الملف المستورد القيمة مسجله كـ RVA
والقيمة الاخرى الموجودة في اللون الرمادي في الجزء التالي ( باللون الازرق ) تشير الى الملف التالي وهكذا
للايضاح لو انتقلنا الى العنوان المسجل في المربع الرمادي الاول وهو 05B714 سنجد التالي :

كما تلاحظ اسم الملف هو kernel.dll
اما بالنسبة للون الاصفر فهو يمثل بداية الجدول للدوال المستخدمة لهذا الملف
فلو انتقلنا الى العنوان المسجل في المربع الاصفر الاول وهو 5B12C

كما تلاحظ فهو عبارة عن جدول يحتوي جميع الدوال المستورده من الملف وكل خانة عبارة عن DWord تشير الى العنوان الموجود فيه اسم الدالة
وينفصل جدول الدوال لكل ملف عن الآخر بالصفر ( 0 )
وهكذا نحصل على Import Table
هذه الطريقة يدوية ، استخدمتها لتبيين الامر
نفس العمل يتم برمجياً ، ولاكن هناك البنيات التركيبية للـ PE معرفة ضمن مكتبة windows
مما يسهل الوصول الى البيانات
قمت بعمل برنامج يقوم باستخراج البيانات برمجياً
يمكنك الاطلاع عليه ( فهو مرفق مع السورس كود )

النسخة الاولى لـ Delphi
itdelphi.zip
النسخة الثانية لـ C++ Builder

