pe-file

ساختار فایلهای PE

نوشته شده توسط عسگری. در آموزش

برچسب: , , , , , ,

منتشر شده در اسفند ۱۶, ۱۳۹۱ با ۴ دیدگاه

سلام امیدوارم تندرست , سالم , سلامت و سرحال باشید :) خوب حالا ….. دوستان خیلی لطف کردین تمرینات رو خوب انجام دادین تبریک میگم … ولی حالا نوبته اینه خودم یه توضیح مختصر و مفید در چند گام بگم که اونایی که احیانا حوصله نداشتن و کپی پیست کردن لااقل بدونن چی کپی پیست کردن :) من جمله خودم که کارم شده کنترل سی + کنترل وی …….

چند روز نبودم کسالتی داشتم به لطف خدا کمی بهترم و میتونم دوباره در کنار شما باشم ….

در مورد ساختار فایل های قابل حمل …..

گام اول : ماجرا از جایی آغاز شد که مایکروسافت در سیستم عامل های اولیه خودش اومد و یه ساختار فایلی برا خودش ایجاد کرد که بتونه از ساختار فایل ها در همه جا استفاده کنه مثلا همین فایل های DLL یا فونت ها و غیره …. بعد یه چالش این بود که بین داس و مهاجرت به ویندوز چه ساختاری طراحی کنن که بشه فایل ها قابل حمل بشن مثلا فایل ها روی داس NT یا win3.1 یا ویندوز xp …. بتونن براحتی کپی پیست بشن و بشه ازشون استفاده کرد ! برا همین ساختاری که حالا شکلش رو نشون خواهم داد رو با نام Portable Executable file format رسم کردن ….
سرتون رو درد نیارم چون این ساختار کامل بوده و هماهنگ با معماری پردازنده Intel  , AMD بود خیلی راحت دیگر شرکت رو مجبور کردن که از این نوع ساختار حمایت کنن در سال ۱۹۹۳ مدیران شرکت های همچون مایکروسافت اینتل آی بی ام و بورلند …. استانداری رو تعریف کردن به نام Tool Interface Standard که دیگر شرکت ها رو ملزم کنن از این ساختار تبعیت کنن بهرحال ساختار ارائه شده از شرکت مایکروسافت با نام PE رواج پیدا کرد و هم اکنون نیز این ساختار در اکثر سیستم عامل ها رعایت می شود .
نکته مهم اینه بنای اصلی ساختار PE  رو مایکروسافت از روی Common Object File Format سیستم عامل یونیکس کپی برداری کرده بوده ….

 

گام دوم : ساختار یک فایل PE یا فایل قابل حمل به چه شکلی هست !

pe-file-format

اون بخش اول که نوشته DOS MZ header در واقع برای داس طراحی شده که اگه برنامه تو داس بخواد اجرا شه تابع کوتاه داس بعد از عبارت mz اجرا میشه و تمام .

بخش DOS Stub هم توسط کامپایلر ایجاد میشه با و یه پیغام که معمولا عبارت  ”This Program Cannot Be Run In Dos Mode” هست رو به کاربر علام میکنه.

تا اینجا حله دیگه …. الان یه فایل dll از تو سیستمم پیدا کردم میرم با نت پد ویندوز بازش کنم ببینم آیا عبارت رشته ای MZ یا PE یا همین This Program Cannot Be Run In Dos Mode رو آیا میتونم توش ببینم یا نه !

تصویر ها رو دنبال کنید

open-pe-file-notepad

خوب الان تو نت پد اون عبارت ها رو دیدم !

pe-notpad-string

 

خوب حالا قسمت PE header این بخش اطلاعات مورد نیاز رو برای بار کننده” PE loader” رو فراهم میکنه …
این بخش در واقع ساختار استاندارد IMAGE_NT_HEADERS هست . در اصطلاح بهش میگن PE header

همین ساختار از دو بخش file header و opt header تشکیل شده شکل زیر …

pe-header

بخش : Signature     متغییری از نوع dword  است که  حاوی مقدار   ooh ،
ooh 45h ، ۵۰h می باشد.    (رشته PE به همراه دو صفر )

بخش های سرخ شده مهم هست

بخش : FileHeader ساختاری است که محتوی اطلاعاتی درباره طرح فیزیکی فایل PE همچون تعداد Sectionها، نوع ماشینی که فایل در آن اجرا میشود و … است.

بخش : OptionalHeader ساختاریست که محتوی اطلاعاتی درباره طرح منطقی فایل PE میباشد.

تو فایل هدر FileHeader چیا هست ؟

- machine مدل پردازشگر مورد نیاز برای اجرا
- Number of sections تعداد سکشن های موجود در فایل
- Time Date stamp تاریخ و زمان ایجاد فایل
- Size of optinal header اندازه رکورد optional header
- Characteristics    نوع فایل اجرایی را مشخص می کند. برای مثال exeیا dll

و تو Optional header  اینا هست

Address Of Entry Point
image base
section alignment
file alignment
size of image
size of headers
date directory

*خود data directory  از دو فیلد تشکیل شده است:
Virtual Address:  که آدرس  RVA ساختار مورد نظر را دارد.
Size: که حاوی اندازه ساختار مورد نظر به بایت است.

جدول ورودی یا Import Table یکی دیگرازمهمترین قسمتهای فایل PE میباشد که دومین عضو Data Directory  به آن اشاره می کند .مشخصات توابعی که در داخل برنامه فراخوانی شده اند از قبیل نام تابع و نام فایل DLL ای که آن تابع در آن فایل قرار دارد در داخل جدول ورودی قرار دارد.
به شکل زیر توجه کنید
IAT-pe
دقت کنید : هر رکورد درون IAT مربوط به یک فایل DLL است .
که آخرین رکورد دارای مقدار صفر است که پایان جدول را نشان می دهد.

هر رکورد از تعدادی فیلد تشکیل شده است که این مهمترین این فیلدها عبارتند از :
Original First Thunk :      که به ساختاری دیگری به نام Import By Name اشاره می کند که آن ساختار آرایه ای از رکورد هاست و هر رکورد به یک تابع ورودی (Import Function) اشاره می کند.در حقیقت RAV  این ساختار
در این فیلد قرار دارد.
Name :  که نام تابع DLL را نگهداری می کند.
importtable

EXPORT TABLE :
یک فایل  PEمی تواند توابع داخلی خود را برای استفاده سایر فایل های PE در جدول توابع خروجی (Export Table)  قرار دهد.

هنگامی که بار گذار PE برنامه ای را اجرا می کند  dllهای موردنیاز برنامه را نیز باگذاری کرده و در فضای آدرس آن قرار می دهد. سپس اطلاعات مربوط به توابع ورودی را از برنامه اصلی بازخوانی کرده و با استفاده ازآنها به جستجوی آدرس توابع مورد نیاز برنامه در فایل  dllمی پردازد. بارگذار PE برای جستجوی توابع به  Export Table فایل DLL رجوع می کند.

export table دارای ۱۱ تا فیلد هست مهمترین هاشن name و Number Of Functions هستن …

=================================================
و حالا اون پایین پایین های فایل PE میریم به قسمت سکشن تیبل

 Section Table     در واقع آرایه ای از رکوردها است که دقیقاً بعد از PE Header قرار گرفته است
تعداد اعضاء این آرایه توسط  Number Of Sections که یکی از اعضای رکورد File Header است،مشخص می شود.
رکوردهای این آرایه از نوع IMAGE_SECTION_HEADER هستند.

pe-header

Section Table : تشکیل شده از
Name نام سکشن به طول ۸ بایت
Virtual Address  آدرس RVA هر سکشن
Size Of Raw Data مقدار فضای اشغال شده سکشن به همراه file alignment
Pointer To Raw Data آدرس شروع سکشن در فایل اجرایی
Pointer To Relocations
Pointer To Line numbers
Number Of Relocations
Number Of Line numbers
Characteristics

***************** گام دوم  در ادامه…… *****************

 

 

 

 

 

 

 

۴ دیدگاه

هم‌اکنون ۴ دیدگاه در ساختار فایلهای PE وجود دارد. شاید دوست داشته باشید برای خود را بیافزایید؟

  1. parisa panbechi

    salam khobid ?
    man chandin bar ino be shoma mail kardam porozhamo vali nemidunam umade ya na ?
    lotfan ye jori behem khabar bedin ke umade ya na
    ham word ferestadam ham zipesho

    • عسگری

      سلام لطفا ایمیل خودتون رو چک کنید . یه همون ایمیل تمرین رو ارسال کنید . تمرینی از طرف شما بدست من نرسید .

      • parisa panbechi

        salam chashm ye baram misendam
        vali age mishe ye baram mailetuno tu sait bezarin shayad man mail shomaro eshtebah neveshtam

  2. سلام مهندس دستتون درد نکنه
    خوب بود

ارسال دیدگاه

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