Reverse Code Engineering

逆向工程代码 обратная код машиностроения

Reverse Code Engineering

逆向工程代码 обратная код машиностроения

Reverse Code Engineering

Share what I know............... learn what I don’t

آخرین نظرات

ساختار فایل های اجرایی در ویندوز

سه شنبه, ۳۰ دی ۱۳۹۳، ۱۲:۳۵ ق.ظ

فایل اجرایی توی ویندوز یا به عبارتی PE با پسوند exe , dll و ... شناخته میشن که قطعا با فایلهایی با پسوند اینجوری روبرو شدید:)

اکثر اینا از یک قالب تعیین شده ای استفاده می کنند (VxDs و DLL های 16 بیتی ازین قالب مستثنی هستند) این قالب اجازه میده که یک فایل اجرایی توی همه نسخه های ویندوز قابل حمل باشه و دیگه ما نیاز به کامپایل دوباره مخصوص نسخه ی ویندوزیمون نداشته باشیم.

 

ساختار فایل اجرایی به شکل زیر هستش

 

DOS MZ header

 

اگه ما یه فایل اجرایی رو توی برنامه هگزادیتور باز کنیم 64 بایت اولش به Dos Header اختصاص داده شده و ازین قسمت برای تعیین اعتبار یک فایل اجرایی استفاده میشه یعنی اگه فایل اجرایی Dos Header نداشته باشه یه فایل اجرایی معتبر نیست.

Dos Header ساختارش به صورت زیر هستش که البته magic و lfanew مهمترینش هستند.

Magic محتوی مقدار 4D, 5A هستش که اگه به اسکی تبدیل بشه MZ میشه.

همه فایل هایی اجرایی باید اولین دو بایتشون MZ باشه در غیر اینصورت فایل اجرایی نامعتبر هستند و اجرا نمیشن.

 

lfanew که 4 بایت هستش محتوی آفست PE Header هستش یعنی با مقدار این فیلد میتونیم به آدرس شروع PE Header برسیم.

 

Dos Stub

درست بعد از Dos Header قرار داره و معمولا هم رشته ی زیر رو چاپ میکنه

" This program must be run under Microsoft Windows"

این قسمت برای ما اهمیتی نداره

 

توی شکل زیر میتونید قسمت هایی که توضیح دادیم رو ببینید


 

PE Header

 

خوب گفتیم که lfanew محتوی آفست PE Header هستش توی شکل بالا میبینید که فیلد lfanew محتوی 00010000 هستش و اگه ما این مقدار رو برعکس کنیم 00000100 میشه پس یعنی PE Header از آفست 100 شروع میشه (ترتیب خوندن بایت ها بصورت عکس هستش,برای اطلاعات بیشتر جستجو کنید حتما!)

 

ساختار PE Header به صورت زیر تعریف شده:


اولین فیلد (Signature) 4 بایت هستش که نوع فایل اجرایی رو مشخص میکنه یعنی اگه 50450000 (که میشه حرف PE) باشه این یه فایل PE هستش اگه NE باشه یه فایل NE 16بیتی ویندوز هستش و الا آخر...

 

دومین فیلد FileHeader هستش که خودش یه ساختار متفاوت داره و 20 بایت هم فضا اشغال میکنه ساختار FileHeader بصورت زیر هستش

اکثر این فیلدها برای ما اهمیتی ندارند و نام اونها هم مشخص کننده کاراییشون هست مثلا اولین فیلد نوع پردازنده رو مشخص میکنه ,دومین فیلد تعداد سکشن های برنامه رو مشخص میکنه و ...

 

سومین فیلد توی PE Header یعنی OptionalHeader هم خودش یه ساختار متفاوت داره که 224 بایت فضا اشغال میکنه و ساختارش بصورت زیر تعریف شده


فیلدهای مهم این ساختار عبارتند از:

 

فیلد AddressOfEntryPoint

محتوی آدرس ورودی برنامه هستش

 

فیلد ImageBase

محتوی آدرس بارگزاری ارجع فایل اجرایی هستش و لودر سعی میکنه تا فایل رو داخل فضای آدرس مجازی که از این آدرس شروع میشه بارگزاری کنه

 

فیلد SectionAlignment

محتوی سایز تنظیم سکشن ها توی حافظه هستش و هر سکشن باید مضربی ازین مقدار باشه

 

فیلد FileAlignment

محتوی سایز تنظیم سکشن ها در فایل روی دیسک هستش

 

فیلد SizeOfImage

محتوی سایز کل فایل در حافظه هستش

 

فیلد SizeOfHeaders محتوی سایز همه ی هدرها + section table هستش.البته سایز سکشن ها رو به این اضافه نمی کنیم.

 

فیلد DataDirectory

این فیلد 128 بایت فضا اشغال کرده و دارای 16 تا ساختار هستش که بعدا در موردش توضیح کاملتر رو میدم. پس تا اینجا میتونیم توی هگز ادیتور بصورت زیر هدر ها و فیلد هارو مشخص کنیم



البته ما میتونیم از ابزارهای دیگه مثل Olly , Lordpe , PEiD و ... استفاده کنیم و اطلاعات بالا رو بدست بیاریم ولی هدف ما در اینجا آشنایی با ساختار فایل های اجرایی هستش.

 

باقی توضیحات رو توی روزای آینده میدم

با تشکر از همراهیتون

Pcrlth0n

نظرات (۷)

سلام!
خیلی ممنون!
واقعا عالی بود!خدا خیرت بده... :)
انشالله که موفق باشید
یا علی مدد...!
سلام ممنون از مطالب مفیدتون.
امیدوارم همیشه موفق باشید
ممنون امیدوارم همنطور ادامه بدید!

داداش دمت گرم ، کاملش کنی خیلی قشنگ‌تر میشه.

پاسخ:
با سلام خدمت شما دوست عزیز
فک کنم مطالب مربوط به ساختار فایل اجرایی توی دو بخش توضیح داده شده، برای شروع کامل باشند
اگر قسمتی مد نظرتون هست بفرمایید

سلام برادر

برادر مطلب دیگه نمیزای؟

پاسخ:
سلام دوست عزیز
متاسفانه فرصت آزاد کم هستش. ولی اگر فرصتش پیش بیاد حتما انجام خواهم داد.
ممنون

بعله خیلی هم خوب تشکر ...

راستی سال نوتون مبارک باشه

پاسخ:
خیلی ممنون
امیدوارم سال خوبی داشته باشید

خدا خیرتون بده، بسیار عالی و کامل توضیح دادید.

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی