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

سؤال فى بنية الملفات التنفيذية

مغلق
بدأه احمد السيد في 16 مايو 2005 · 10 رد · 1,376 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

ImageBase
SectionAlignment
FileAlignment

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

شكرا

#2

السلام عليكم

بالنسبه لتنسيق البيانات او الشفرع (code alignment) (data alignment) فسببه هو ان المعالج يستطيع إستخدام الدوال بسرعه افضل لو انها منسقه على حسب حجمها مثلاً البايت دائماً منسق وعندما يحتاج المعالج لإحضار بايت واحد فهو مضطر ان يقراء مره واحده من الذاكره. اما إذا كان لدينا متغير من نوع word ووضعناه فى ذاكره بعنوان 333 ونحن نعلم ان المعاج يبداء القرائه فى العناوين الزوجيه فسيضطر المعاج لقرائة الداله على مرحلتين فى اول مره سيقراء من العنوان 332 ثم يقراء من العنوان 336, ولكن لو وضعنا الدارله فى العنوان 332 فى باداء الامر لما احتاج المعالج لقرائة الذاكره اكثر من مره حيث ان المعالج سيقرائه دفعه واحده من العنوان 332 إلى العنوان 336.

بالنسبه للImagebase فهى جزء من مفهوم الPE وهناك 6 دروس بهذا الصدد تجدها فى موقع iczeline على هذا الموقع

http://win32assembly.online.fr/tutorials.html

كما ان هناك دروس للاخ jaas بالعربى تجد رابط له فى توقيعه.

واخيراً شرح تفصلى لعمل section جديد يحتاج إلى تعديل فى PE حتى يتعرف البرنامج على الشفره التى اضفتها لذالك انصحك بالذهاب إلى هذا الموقع http://cracking.accessroot.com/ وتحت tutorials ابحث عن درس اسمه Beginner Olly Tutorial Part5 By Gabri3l وهو موجود فى نفس الصفحه, هذا الدرس يشرح بطريقه مبسطه كيف عمل ما يسمى بcode caves وهو إضافه جزء جديد للبرنامج.

بالتوفيق

والسلام عليكم

تم تعديل هذه المشاركة بواسطة احمد غريب في 17 مايو 2005 في 01:32

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#3

السلام عليكم

شكرا لك احمد

اقتباس
واخيراً شرح تفصلى لعمل section جديد يحتاج إلى تعديل فى PE حتى يتعرف البرنامج على الشفره التى اضفتها

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

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

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

#4

السلام عليكم

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

هناك ثلاث طرق لإدخال شفره فى ملف الـPE وهى على النحو التالى:

الطريقه الاولى هى ان تستغل المساحه الفارغه فى قسم .text وتضيف الشفره وفى الPE تغير عنوان بداية البرنامج بحيث يبداء فى العنوان الذى اضفت الشفره وبعد ان تنتهى من الشفره تقوم بعمل jmp إلى العنوان الاصلى لنقطة بداية البرنامج. هذه اسهل طريقه ولن تحتاج إلى تغير سوى عنوان البدايه فى الـPE. وهذا ما يسمى بالـcode cave.

الطريقه الثانيه هى ان تعدل حجم الفقره .text بحيث تتسع للشفره التى تريد إضافتها ولكن مشكله هذه الطريقه هى انها تتطلب تغير اشياء كثيره فى الـPE لان كل عناوين الsection ستتغير وبذالك عليك بان تقوم بتغير جميع فروع الsections الموجوده بالاضافه إلى تغير كل فقره يقوم البرنامج فيها بإستخدم اي section اخر. وهى طريقه غير مجديه بالمره.

الطريقه الاخيره هى ان تضيف .text section اخر لبرنامجك فى نهاية البرنامج وفى هذه الحاله عليك ايضاً ان تضيف section header وتغير عدد الـsection بزيادة 1 إلى العدد الاصلى وتغير حجم البرنامج وعنوان البدايه فى الـ PE

بالطبع إضافة section header جديد يتطلب منك وضع البيانات الصحيحه إفتح اى برنامج صغير بالـolly وشاهد محتويات الـsection header واهم العناصر فيها هى

VirtualSize

VirtualAddress

SizeOfRawData  

PointerToRawData

Characteristics

والاخيره هى التى تحدد ما إذا كان الــsection من نوع data او code.

انصحك بان تبداء بالطريقه الاولى لانها اسهل طريقه لإضافه شفره إلى برنامج بدون تغيرات كثيره على الـPE.

و السلام

تم تعديل هذه المشاركة بواسطة احمد غريب في 17 مايو 2005 في 20:17

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#5

السلام عليكم

شكرا اخ احمد

اقتباس
انصحك بان تبداء بالطريقه الاولى لانها اسهل طريقه لإضافه شفره إلى برنامج بدون تغيرات كثيره على الـPE

ماالعمل لو ان الشفرة التى اريد وضعها فى البرنامج اكبر من المساحة الفارغة فى .text للبرنامج الاصلى ولتكن شفرة برنامج للتحقق من سيريال معين او وضع حماية على برنامج

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

انتظر منك الشرح الشامل واعانك الله

#6

السلام عليكم

إذا كانت الشفره كبيره ولا يمكن دمجها فى قسم الكود فى المساحه المتوفره فمن الافضل إتباع الطريقه الثالثه وهى إضافة section جديد فى اخر الملف وبذلك فعليك إضافه ثلاث فقرات فى الـPE وهى على النحو التالى:

زياده الرقم الذى يرمز لعدد الـsection

تغير عنوان بدايه الشفره فى الـPE بحيث يؤاشر إلى الـsection الجديد الذى اضفته. وهاذين الجزئين سهل تغيرهما

واخيراً لا بد من إضافه section header وهذا الجزء فيه 5 اجزاء اساسيه كما وضحت فى ردى السابق وإن شاء الله فى نهاية الاسبوع اضع لك رد مطول يشرح ذلك.

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#7

السلام عليكم

اشكرك وانتظر شرحك فى نهاية الاسبوع ان شاء الله

#8

هناك طريقة اخرى اعتقد انها يمكن ان تحل مشكلتك

1/ اعرض ال sections الموجودة فى ال exe الذى تريد ان تضيف اليه كود

2/فى الsection الاخير سنقوم بالاتى.

سنزيد حجم هذا ال section الى ان يصبح مناسبا يمكن ان يستقبل الكود الجديد

و ذلك باضافة 00 فى نهاية المقطع. بحيث ان نراعى الFileAlignment

بعد ذلك نعدل كل من ال RowSize و ال VirtualSize لهذا المقطع من ما يتناسب

مع عدد البايتات التى اضفناها فى نهاية المقطع.

نحن الان قد اضفنا بايتات الى الملف التنفيذى. اذن لابد ان نعدل ذلك فى ال SizeOfImage

بحيث نضيف اليها عدد البيانات (الكود و البيانات) "انا افترض ان هذا المقطع يحتوى Code + Initialized Data"

3/ عند هذه المرحلة يجب ان تجرب ال exe و الذى من المفترض ان يعمل بصورة سليمة من غير اى معوقات.

الان علينا تغيير الخصائص فى هذا المقطع لاننا لا ندرى بالضبط ماذا يحتوى الى الان (rsrc or idata or rdata )

اسلم طريقة هى ان نضيف ال قيمة E0000060 بالمقارنة AND الى الخصائص (هذه القيمة Readble & Writable & Contians Code& Contians Initialised Data)

4/الان جرب ال exe للتاكد انه ليس هناك اخطاء.

قم باضافة الكود فى المكان الذى تريده و تبعا لذلك غير ال EntryPoint حتى تلائم ما تريد.

الى الان يجب ان يعمل البرنامج بصورة جيدة, و تكون قد نلت ما اردت.

لكن هناك قيمتان يجب ان نعدلهما حتى نصل الى بر الامان و هما فى ال Optional Header

SizeOfCode

SizeOfInitialisedData

اضف اليهما عدد البايتات التى اضفتها.

و السلام ;)

#9

شكرا لك justnow على كل حال ساجرب

#10

السلام عليكم

اخى احمد السيد انا وضعت شرح مفصل لبنية ملفات الـPE فى موضوع منفصل حتى تعم الفائده.

/index.php?showtopic=66189

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#11

جزاك الله كل خير :D ياخ احمد على مجهودك

هذا الموضوع مغلق.

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