الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

PE32 Function Viewer

بدأه C++er في 30 ديسمبر 2009 · 3 رد · 2,794 مشاهدة · في المواضيع و الدروس القيّمة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

البرنامج اسمه PE32 Function Viewer و هذه هى صوره له اثناء تحليل win32k.sys

post-135620-12621385419724_thumb.jpg

يقوم البرنامج بتقسيم الدوال إلى 3 اقسام دوال تم تم تصديرها بالإسم و دوال تم تصديرها برقم (Ordinal) و دوال Private.

قمت بإضافة امكانيه اعتقدت انى ساكون بحاجه إليها دائما و هى اعادة تسمية الدوال طبعا لن احتاج لإعادة تسمية الدوال التى تم تصديرها بالإسم (و لكنها متاحه) و لكن الدوال الأخرى هى التى سأقوم بإعادة تسميتها و ذلك حتى إن احتجت للوصول لعنوانها استطيع الوصول إليه بسهوله.

لإعادة تسمية داله او لرؤية اماكن استدعائها فقط قم بـ Double Click عليها.

التالى هى صوره لمعلومات عن داله Private موجوده داخل win32k.sys

post-135620-12621373066068_thumb.jpg

بعد اعادة تسمية الدوال يمكنك حفظها داخل ملف اسميته Local File هذا الملف يأخذ الإمتداد .local و يخزن داخله بيانات عن المكتبه التى تحتوى على الدوال المعاد تسميتها و كذلك بيانات الدوال التى تم اعادة تسميتها.

لفتح ملف local قم بفتح ملف تنفيذى ثم من قائمة local اختر Load، لاحظ انه يمكنك تحميل ملف local لمكتبه غير التى تم تحميلها و سيقوم البرنامج بمحاولة احداث تطابق بين بيانات الدوال الموجوده بالملف و الدوال المحمله من داخل الملف التنفيذى.

قد تحتاج لإعادة اسمء الدوال لوضعها الطبيعى كما كانت عليه حينها استخدم الأمر Reset الموجود بالقائمه Local

لنسخ بيانات داله او مجموعه من الدوال قم بتحديدهم ثم اختر Copy Selected من Tools.

بعد انتهائك من التعامل مع الملف التنفيذى قم بغلقه بإستخدام Close.

البرنامج مازال فى قيد التطوير و النسخه المرفقه هى BETA و إصدارها 0.8، الأمر الوحيد الذى لم اقم بتضمينه حتى الأن هو Find الموجود بالقائمه Tools.

FunctionAnalyser.rar

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 30 ديسمبر 2009 في 08:06

4

مدونتي: C++ Tips and Tricks

#2

amazing work...

سوف اقوم بتجربته انتظارا لاراء الاخوة الاخرين

العمل كثير و الوقت قليل أعاننا الله

seo zen SEO Enlightment amazon danbo

#3

مجهود جميل اعجبني صغر حجمه وتحديد عدد مرات استدعاء دالة معينة

لكن ما الذي يميز هذا البرنامج عن البرامج الاخرى؟!

أيضا على أي أساس قمت باستخراج دوال private على رأيك !

هل التعليمة التي بعد تعليمة ret وغير موجودة في ال export ؟

هناك الكثير من الاكواد على هذا الشكل ولكن لا تمثل دالة حقيقية تقوم بانجاز مهمة معينة .

اقتباس
ثم اعرف عنوانها ثم اقوم بإستدعائها بإستخدام عنوانها

لماذا لا تستخدم التوقيع المميز للدالة على أكثر من نسخة للويندوز بدل العنوان وتضمن العمل على كافة النسخ المحددة ؟

#4
اقتباس
أيضا على أي أساس قمت باستخراج دوال private على رأيك !

هل التعليمة التي بعد تعليمة ret وغير موجودة في ال export ؟

هناك الكثير من الاكواد على هذا الشكل ولكن لا تمثل دالة حقيقية تقوم بانجاز مهمة معينة .

التعليمه call التى يأتى يعدها relative address حيث ان الـ opCode لها هو E8 و الذى يليه مباشرة هو موقع الإستدعاء بما يتناسب موقع التعليمه نفسه فإن كان سالب يتم التحرك لأعلى و إن كان موجب يتم التحرك لأسفل و ذلك للحصول على الموقع الذى يتم استدعائه و هو بالتأكيد موقع داله ايا كان نوعها.

سبب استخدامى لهذه التعليمه مع r16/t32 هو ان الذى يأتى بعدها مباشره دائما ما يكون موقع داله موجوده داخل نفس الملف التنفيذى و بالتالى ان كان الـ offset لهذه الداله يتساوى مع اى من الموجودين داخل الـ export table فهى داله تم تصديرها و غير ذلك فهى داله private.

اقتباس
لماذا لا تستخدم التوقيع المميز للدالة على أكثر من نسخة للويندوز بدل العنوان وتضمن العمل على كافة النسخ المحددة ؟

التوقيع المميز للدوال يكون دائما للدوال التى تم تصديرها و هى يسهل الحصول عليها و لكن ما اثار اهتمامى هو الدوال الـ private و السبب فى ذلك انه يوجد دوال تم تصديرها بـ windows 7 و هى غير متاحه بأى من الإصدارات السابقه له و مع ذلك فهى موجوده بدءا من اصدار ويندوز 2000 و الغريب فى الأمر ان الـ offset لها (فى الأغلب) لا يتغير.

ثانيا توجد بعض واجهات المستخدمه داخل نظام التشغيل و التى لم يتم اتاحة الفرصه للتعامل به إلا من خلال ويندوز 7 و ايضا هى متاحه داخل ويندوز 2000. لذا كما ترى عملية التحليل التى يقوم بها البرنامج من استخراج الدوال المحليه بالإضافة لكود الويندوز سيتيح لى معرفة الكثير عن خبايا نظام التشغيل.

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

اقتباس
لكن ما الذي يميز هذا البرنامج عن البرامج الاخرى؟!

كل البرامج الموجوده تقوم بإستخراج الدوال التى تم تصديرها فقط و لكنك لن تجد برنامج يقوم بإظهار لك بيانات عن عمليات استدعاء تلك الدوال او مواقع الإستدعاء الخاص بهم و هذا ما يميز هذا البرنامج لإنه سيوفر على الكثير من الوقت اثناء عمل RE لداله معينه.

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 31 ديسمبر 2009 في 00:47

مدونتي: C++ Tips and Tricks

مواضيع مشابهة