به نام خدا
برنامه نویسی با هگز ادیتور بخش 4
https://vahidmy.blog.ir/post/pe-txt
برای یک مرور کلی معماری نرم افزارها و درایورهای ویندوز و آشنایی با ساختارهای ویندوز و سایر جزئیات فنی ، لطفا به ادرس بالا مراجعه فرمایید .
با سلام مجدد خدمت کاربران گرامی .
در ادامه ی پستهای قبلی به اینجا رسیدیم که می بایست فیلد مربوط به تاریخ و ساعت تولید نرم افزار را با دست پر کنیم . همانطور که می دانید اینکه نرم افزار مورد نظرمان در چه روزی و چه ساعتی یا چه دقیقه ای ساخته می شود اصلا مهم نیست . لذا می توانید مقدار کد هگز 00000000 را در این فیلد قرار دهید .
من فرض را بر این می گیرم که شما هم اکنون نرم افزار قدرتمند c32asm را اجرا کرده اید و تا به فیلد تاریخ نیز رسیده اید .
از منوی View در برنامه ی c32asm روی pe info کلیک کنید تا پنجره ی مربوط به معماری ویندوز در سمت راست برنامه ی c32asm باز شود .
به عناوین درون این پنجره نگاه کنید .
چیزهایی که تا به این لحظه به شما گفتم به Dos Header و File Header مربوط می شد .
فیلد مربوط به تاریخ ، در File Header قرار دارد . من از این لحظه به بعد این هدر را بصورت هدر فایل ، یا فایل هدر ، تلفظ می کنم .
خب حالا در پنجره ی pe info که در نوار عنوان اش با عبارت Properties مواجه می شوید ، روی مربع مربوط به File Header کلیک کنید تا این منوی کشویی برای شما باز شود . حالا از این منوی کشویی ، روی فیلد PointerToSymbolTable دابل کلیک کنید تا کد هگز مربوط که در ستون وسط هگز ادیتور قرار دارد هایلایت شود .
خب حالا به سمت چپ کد هگزی که هایلایت شده بروید و روی اولین کد از سمت چپ ، کلیک کنید و بعد به نوار وضعیت پایین برنامه ی c32asm نگاه کنید .
در سمت راست عبارت Cursor با عدد 0000008C که همان آدرس مربوط به مکان این کد هگز است روبرو می شوید . حالا در آدرس 0000008C در ستون وسط هگز ادیتور ، کد هگز 00000000 را با دست تایپ کرده و کلیدهای CTRL+S را فشار دهید تا تغییرات ذخیره شود . اگر پیامی از طرف برنامه ی c32asm مبنی بر پشتیبانگیری صادر شد روی دکمه ی ok کلیک کنید .
خب حالا در همان File Header روی فیلد NumberOfSymbols دابل کلیک نمایید تا در ستون وسط هگز ادیتور شاهد هایلایت شدن کد هگز باشیم .
نکته ی بسیار مهم :
قبل از شروع تمام اینکارها سعی کنید یک فایل باینری کاملا خالی را به روشی که قبلا گفتم با حجمی بالغ بر 1 کیلو بایت بسازید . زیرا برنامه تغییر کرد و قرار است که یک نرم افزار حرفه ای و قدرتمند را با کمک هگز ادیتور بسازیم که طبعا حجم چنین نرم افزاری که بدبختانه چندین سکشن دارد ، بیش از یک کیلوبایت خواهد بود .
برای اینکار سعی کنید تا جای ممکن کد هگز 00 را با دست بنویسید و تمام فایل را با کد هگز 00 پر کنید و نتیجه را با نامی دلخواه مثلا example.exe ذخیره نمایید. اینطوری وقتیکه در پنجره ی Properties روی فیلد مربوطه دابل کلیک کنید اینکار ، کدهای هگز 00 را که ساخته اید هایلایت می کند .
حالا خوب شد . خیالم راحت شد که شما شاهد هایلایت شدن کدهای هگز هستید
پس یادتان نرود که حتما یک فایل آزمایشی را با کدهای هگز 00 پر کنید یعنی دست تان را روی کلید 0 بگذارید و نگه دارید تا یک فایل حجیم که محتوایش فقط از کد هگز 00 تشکیل شده است ایجاد شود .
اگر اینکار را انجام ندهید پیام خطایی مبنی بر بی اعتبار بودن فایل pe صادر می شود . البته تا زمانیکه من تمام معماری را به شما یاد ندهم ممکن است بارها و بارها با این پیام خطا روبرو شوید.
لذا سعی می کنم خیلی سریع ، سرو ته قضیه را جمع کنم و یک فایل pe معتبر را برای شما بسازم . یعنی با کمک خودتان و از طریق وبلاگنویسی ، اینکار را انجام دهم .
نکته ی جالب :
برای فهم بهتر کاراکترهای ستون راست هگز ادیتور ، از منوی Advanced برنامه ی c32asm روی عبارت HEX Edit کلیک کنید تا به تنظمیات مربوط به محیط هگز ادیتور وارد شوید .
از تب Color در پایین به عبارت Misc Setting نگاه کنید .
سپس به عبارت Font نگاه کرده و روی ردیف سمت راست این عبارت کلیک کنید تا فونت برنامه را عوض کنید .
فونت Terminal را انتخاب کنید . بزرگنمایی را روی عدد 14 بگذارید و سپس تغییرات را اوکی کنید .
حالا کاراکترهای ستون سمت راست هگز ادیتور ، به شکل کاراکترهای جالب دوران سیستم عامل داس و برنامه ی معروف و مخرب و مرگبار NC تبدیل می شوند !!!
این نوع فونت یک فونت سیستمی است که به دوران داس و یونیکس و ... برمی گردد .
فونت نقش مهمی در برنامه نویسی با هگز ادیتور بازی می کند . پس سعی کنید از فونت مناسب استفاده نمایید .
اینجا عمدا فونت Terminal را به شما معرفی کردم تا شما بتوانید با کاراکترهای کد اسکی که شبیه به صورت انسان یا برگ صنوبر یا خاج یا نت های موسیقی یا ....... هستند و بیشتر نوعی سمبول و نماد می باشند ، خاطره بازی نمایید !!!
اینها شما را به دوران سیستم عامل داس و قبلتر ، برمی گرداند . یادش به خیر ...
ادامه ی درس :
در ادامه ی درس ، در پنجره ی Properties و در بخش File Header روی فیلد SizeOfOptionalHeader دابل کلیک نمایید . تا کد هگز 0000 که قبلا ساخته اید ، هایلایت شود . البته امیدوارم که پیام خطا صادر نکند !!
خب حالا نشانگر ماوس را به منتی الیه سمت چپ این کد دو بایتی بردید روی آن کلیک کنید و باز هم به پایین صفحه نگاه کنید . در سمت چپ عبارت Cursor (کرسر ماوس ) با کد هگز 00000094 مواجه می شوید که همان آدرس مورد نیازمان می باشد . حالا در همین آدرس فوق الذکر در ستون وسط هگز ادیتور ، کد هگز E000 را با دست تایپ کرده و تغییرات را ذخیره نمایید .
این به هدر اختیاری مربوط می شود . به توضیحات پایین این کادر نگاه کنید . با توجه به توضیحات ، رفتار نمایید .
به آخرین عضو از ساختار File Header رسیدیم .
روی عبارت Characteristics دابل کلیک کنید . باز هم شبیه به همان روال قبلی کد هگز مربوطه باید هایلایت شود .
در آدرس 00000096 کد هگز 2F01 را با دست تایپ کرده و سپس کارتان را ذخیره نمایید .
خب حالا به مهمترین بخش از معماری نرم افزارها و درایورها و کتابخانه های سیستم عامل ویندوز ، رسیدیم یعنی هدر اختیاری !
در پنجره ی Properties به عبارت Optional Header نگاه کنید .
حالا روی عبارت Magic دابل کلیک کنید تا کد هگز ستون وسط هگز ادیتور ، هایلایت شود .
در آدرس 00000098 کد هگز 0B01 را با دست نوشته و ذخیره نمایید .
به توضیحات پایین کادر نگاه کنید . این توضیحات می توانند به شما کمک کنند که دچار اشتباه نشوید .
حالا در Optional Header یا همان هدر اختیاری ، و در پنجره ی مربوطه ، روی عبارت MajorLinkerVersion دابل کلیک کنید .
به محض اینکه کد هگز 00 تان هایلایت شد در ادرس 0000009A این کد را به کد 01 تغییر بدهید . به توضیحات مربوطه نگاه کنید .
حالا روی عبارت MinorLinkerVersion دابل کلیک نمایید . در آدرس 0000009B کد هگز 49 را تایپ نمایید .
دقت کنید :
از منوی View حالت Edit mode را روی Normal قرار دهید تا خدای ناکرده ، کدهای جدید که تایپ می کنید در کنار کدهای قدیمی درج نشوند . اگر درج شوند کل معماری نرم افزار از اول تا آخر بهم می ریزد و نرم افزارتان هرگز اجرا نمی شود .
بنابراین حتما دقت کنید که روی حالت نرمال باشد و هیچ کدی ، درج نشود بلکه جایگزین شود . یعنی کدهای جدید که تایپ می کنید باید دقیقا در ادرس مربوطه روی کد قبلی رونویسی شوند و کد قبلی نباید دیده شود . اگر غیر از این باشد ، یعنی اگر حالت درج ( اینزرت یا اینسرت ) فعال باشد تمام ادرسها بهم می ریزند و تمام زحمات تان به باد می رود .
خب ، می دانم که خسته شده اید . درس بعدی مان (!!) مربوط به فیلد SizeOfCode می باشد که این فیلد را در پست بعدی معرفی می کنم . البته به توضیحات زیر هر فیلد با دقت نگاه کنید .
همچنین به محتویات فایل pe.txt که لینک مربوط به او را در بالای همین پست قرار دادم با دقت نگاه کنید .