pe.txt :: vahidmy (blog.ir)


به نام خدا


از این پست به بعد ، تنها کلمات  کلیدی این وبلاگ ، اینها می باشند:


برنامه نویسی با هگز ادیتور


programming by hex editor


hex editor


هگز ادیتور


pe.txt


pe file format


معماری نرم افزارهای ویندوز


معماری درایورهای ویندوز


ویندوز


machine code


بله اگر قرار باشد بسته ی کلمات کلیدی که خریده ام تا چند روز آینده منقضی شود و هر پست فقط 10 کلمه ی کلیدی داشته باشد ، من ترجیح می دهم که آن 10 کلمه شامل کلمات بالا باشند زیرا تنها هدفی که از ورود به دنیای وبلاگنویسی داشتم این بود که اسرار هگز ادیتورها را فاش کنم و به کاربران ویندوز ، آزادی و قدرت و استقلال را هدیه دهم . 



اگر هم پس از انقضای این بسته ، توانستم کماکان این ده هزار کلمه ی کلیدی را که خریده ام بکار ببرم ، بازهم در مورد هگز ادیتور و زبان ماشین و معماری فایلهای ویندوز مطلب می نویسم و کلمات کلیدی مربوط به همین مباحث را بکار می گیرم . باید چند روز صبر کنم ببینم شرکت بیان چه خوابی برایم دیده است !!!!


+

+

آموزش برنامه نویسی با هگز ادیتور بخش 3 :


خب کاربران عزیز ، در ادامه ی تدریس برنامه نویسی با هگز ادیتور باید اینکار را انجام دهیم . تا اینجا به شما گفتم که در برنامه ی  c32asm در ستون وسط و در آدرس  000000C   کد هگز  FFFF   را با دست تایپ کرده و نتیجه را ذخیره کنید و به پیامی که توسط برنامه صادر می شود جواب مثبت بدهید یعنی بگویید : OK ( یعنی روی دکمه ی OK کلیک کنید تا یک نسخه ی پشتیبان از فایل تان ایجاد شود )  


ادامه ی درس :


در آدرس  0000000E کد  هگز 0000  را با دست تایپ کرده و ذخیره نمایید . 


در آدرس  00000010  کد هگز 4001   را با دست تایپ کرده و ذخیره نمایید . 


در آدرس 00000012   کد هگز  0000 را با دست تایپ  و ذخیره نمایید. 


این همان چکسام (!!) است که مقدارش می تواند صفر باشد . ایرادی ندارد . 


در آدرس 00000014   کد هگز  0000   را با دست و در ستون وسط هگز ادیتور نوشته و نتیجه را ذخیره نمایید . 


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


آدرسها نیز باید براساس هگزادسیمال باشند . 


برای ذخیره کردن نیز کافیست از محیط برنامه ی c32asm  ، منوی File  و سپس  Save  یا  Save as را انتخاب نمایید تا یک نسخه ی پشتیبان از فایل تان ایجاد شود . 



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


فراموش نکنید که ما داریم در محیط کنترل شده و ایمن ویندوز و با کمک یک ابزار هوشمند ، برنامه نویسی می کنیم . لذا اینجا مکانیزمهای ایمنی وجود دارند و به پردازنده و سیستم عامل هیچ آسیبی نمی رسد . اینجا داس نیست . ویندوز است. 


شما دارید تحت ویندوز 10 ، اینکارها را انجام می دهید . پس نگران نباشید . 


ادامه ی درس :


در آدرس  00000014  کد هگز 0000  را تایپ کرده و  کارتان را ذخیره کنید . 


در آدرس 00000016   کد هگز  0000   را تایپ و نتیجه را ذخیره کنید . 


در آدرس 00000018   کد هگز 4000  را تایپ و نتیجه را ذخیره نمایید . 


در آدرس  0000001A کد هگز 0000 را تایپ و نتیجه را ذخیره  نمایید . 


از آدرس 0000001C تا آدرس  0000003B فقط کد هگز 00 را تایپ و ذخیره کنید . 


دقت کنید در این فضای آدرسدهی مذکور ، باید فقط یک بایت یعنی فقط کد 00 را تایپ و وارد کنید تا به آدرس 0000003B برسید . تکرار می کنم فقط یک کد 00 را تایپ کنید و به پیش بروید تا به یک مکان بسیار حساس برسید . 


در آدرس حساس و مهم 0000003C  کد هگز حساس و مهم  80000000  را وارد کنید  و نتیجه را ذخیره نمایید . 


کد هگز 80000000  عملا اشاره گر به نقطه ای است که معتبر بودن فایل PE را تعیین می کند . 


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


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


خب حالا به یکی از جذابترین و درواقع بی مصرفترین بخش نرم افزارهای سیستم عامل ویندوز وارد می شویم !!!


همانجایی که می گوید : این برنامه نمی تواند در مدل داس اجرا شود ! 


برای اینکار باید یک برنامه ی مخصوص سیستم عامل داس را با دست بنویسیم و سپس کدهایی را در ستون وسط هگز ادیتور بنویسیم تا پیام بالا به زبان انگلیسی در ستون سمت راست هگز ادیتور نمایان و دیده شود ! 


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


در آدرس  00000040   این کد برنامه ی سیستم عامل داس را با زبان ماشین به دین روش و با دست در ستون وسط هگز ادیتور تایپ و ذخیره می کنیم . 


می توانید از ترکیب کلیدهای CTRL+S نیز برای ذخیره ی فوری و سریع  استفاده کنید . اینطوری در وقت صرفه جویی می شود . 


خب حالا در آدرس 00000040   برنامه ی سیستم عامل داس را بدین شکل تایپ می کنیم و نتیجه را ذخیره می نماییم :


0E1FBA0E00B409CD21B8014CCD21


کد بالا را دقیقا به همین شکل در آدرس 00000040  تایپ کرده و با فشردن کلیدهای CTRL+S نتیجه را ذخیره نمایید . 


کد بالا در واقع یک برنامه ی قابل اجرا در سیستم عامل داس می باشد ! 


جالب است نه ؟؟


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


بنابراین در آدرس  0000004E  این کدهای هگزادسیمال زیر  را در ستون وسط هگز ادیتور تایپ و ذخیره می کنیم و سپس به ستون سمت راست هگز ادیتور نگاه می کنیم تا شاهد یک اتفاق جالب باشیم :


کدهای زیر را با دست در آدرس  0000004E تایپ کنید :


546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0A24


چند نکته ی مهم :


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


2- کد هگز 54  بعنوان اولین کد و کد هگز 24 بعنوان آخرین کد باید نوشته شود. نوشتن کدهای 0D0A24 اجباری است . 


زیرا این سه کد عملا نوعی " نقطه سر خط "  و " انتقال به خط جدید "  و پایان یک رشته ی متنی را اجرا می کنند که از دورانهای قدیم یعنی ماشین تحریر و ماشینهای تایپ دستی  و البته از سیستم عاملهای مولتیکس و یونیکس به ارث رسیده است .  پس حتما این سه کد را به همین شکل که می بینید بنویسید . اینها اجباری هستند . 


این کدها درواقع در ویندوز بصورت ترکیبی از کد مربوط در یونیکس و مک می باشند . زیرا در یونیکس و لینوکس فقط یکی از این کدها و در مک نیز ان یکی بکار می رود ولی ویندوز بعنوان یک سیستم عامل مدرن و هوشمند ، از هردو کد 0D0A استفاده می کند . بهرحال ویندوز مدرن ترین و هوشمندترین و کاربردی ترین سیستم عامل دنیا می باشد که توسط گروهی از نوابغ برنامه نویسی و هک یعنی بیل گیتس و دوستان اش  ساخته شده است . این شوخی نیست . کاملا جدی است . ویندوز را هرگز با لینوکس یا مک یا یونیکس مقایسه نکنید . زیرا ویندوز اولین سیستم عامل کاربرپسند تجاری کاربردی واقعی جهان با یک معماری خاص و منحصر به فرد می باشد که هیچ  مشابه و رقیبی ندارد . بقیه تماما شبه یونیکس و ناقص الخلقه و معیوب  هستند  و اصلا  کاربرپسند نیستند . کافیست خودتان امتحان کنید تا به صحت حرفهایم برسید . 


 خب  حالا به ستون سمت راست هگز ادیتور نگاه کنید . چه می بینید ؟؟؟


جالب است نه ؟؟؟



ادامه ی درس 


در آدرس  00000078  کد هگز زیر را با دست تایپ و ذخیره کنید :


0000000000000000


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


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



در آدرس  00000080  کد هگز معروف و معتبر  50450000 را با دست تایپ و ذخیره کنید تا فایل تان به یک نرم افزار معتبر ویندوزی یعنی به یک فایل PE تبدیل شود . این در واقع یک امضا  می باشد که صحت و اعتبار فایل PE را تایید می کند .


به ستون سمت راست هگز ادیتور نگاه کنید :


نوشته است :  PE 


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



خب حالا قرار است تعیین کنیم که نرم افزار ویندوزی ، قرار است روی کدام پردازنده اجرا شود !!


بحث داغ قابلیت حمل زبان ماشین که قرار است یک بدعت در دنیا ایجاد کند :


در آدرس 00000084  کد هگز معروف  4C01 را تایپ و ذخیره می کنیم . 


4C01 در اصل به شکل 014C بوده که بخاطر خصوصیت عجیب پردازنده ی اینتل ، باید انرا بصورت معکوس بنویسیم . 


014C یا  4C01   یعنی پردازنده ی INTEL 80386  


درواقع وقتیکه کد 4C01  را در این ادرس و در ستون وسط هگز ادیتور تایپ و ذخیره می کنیم به ویندوز می فهمانیم که ما از پردازنده ی اینتل استفاده می کنیم ! 


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


اینجاست که می گویم : برخلاف تصورات تمام مردم دنیا و تمام نوشته ها و گفته ها ، زبان ماشین اصلا و ابدا مثل چسب دوقلو  به سخت افزار نچسبیده بلکه اتفاقا برعکس ، زبان ماشین ، قابل حمل ترین زبان برنامه نویسی دنیا می باشد . اما  چه کسی به این حرف اهمیت می دهد ؟؟؟  هیچکس . تا هزار سال دیگه نیز همچنان شاهد تکرار همان نوشته های اشتباه همیشگی خواهیم بود . افسوس . 


بگذریم ....


ادامه ی درس :


در آدرس 00000086  کد هگز  0500  را تایپ کرده و ذخیره کنید . 

این عدد یعنی عدد 5 . یعنی تعداد سکشن های نرم افزار مورد نظرمان ، پنج سکشن می باشد. 


اگر تعداد سکشن ها فقط یک سکشن باشد باید بصورت 0100  نوشته شود . 


اگر تعداد سکشن ها سه سکشن باشد باید بصورت 0300  نوشته شود و الی آخر ...



این  به ویندوز می گوید که نرم افزار مورد نظرمان چه تعداد سکشن دارد یا  شامل چه نوع سکشن هایی می باشد :


سکشن کد  ( سورس کد اصلی و اجرایی نرم افزار که توسط برنامه نویس نوشته می شود ) 



سکشن داده ( دیتای ساده )



سکشن ریسورس  ( شامل عناصر گرافیکی رابط کاربر برنامه  مثل منو - تولبار - دیالوگ و .... و  البته پیامهای برنامه شامل پیامهای خوشامد گویی یا هشدارها و اخطارها و سایر انواع کادرهای پیام ) 



سکشن توابع ورودی 


شامل آدرس توابع و کتابخانه های سیستم عامل ویندوز و سایر عناصر مربوط به کرنل و هسته ویندوز 



سکشن توابع خروجی 


شامل توابع و کتابخانه های مربوط به  فایلهای خارجی مثل کتابخانه های خود برنامه و .... 



سکشن ..... 



سکشن کد که معمولا  با برچسب  Text  در درون هگز ادیتور دیده می شود ، به معنای کد اجرایی است . این برمی گردد به دوران سیستم عاملهای بسیار قدیمی که کد برنامه را در قالب تکست یا متن ، با دست می نوشتند و سپس با دست به درون برنامه و با کد ماشین تزریق می کردند یعنی دهه های 40 تا 70 میلادی !!


شما می توانید بجای Text خیلی راحت از لغت  code استفاده کنید تا براحتی بفهمید که این همان کد اجرایی یا سورس کد اصلی برنامه است که قرار است یکسری کارهای خاص را روی ویندوز انجام دهد ! 


ادامه ی درس :


در آدرس 00000088  کد  00000000 را که مربوط به تاریخ و ساعت تولید نرم افزار می باشد را بنویسید . اهمیتی ندارد که ما نرم افزارمان در چه روزی و چه ساعتی ساخته شده است . لذ می توانید از کد 00000000  که یک کد هگزادسیمال در اندازه ی 4 بایت یعنی به اندازه ی دی ورد می باشد ، استفاده کنید . 


از اینجا به بعد اکثر داده ها از نوع دی ورد Dword  می باشند . دقت کنید که یک وقت اشتباه نکنید . 


هر  ورد مساوی با 2 بایت و هر دی ورد مساوی با 4 بایت است . 


فراموش نکنید که  کوچکترین واحد اندازه گیری در دنیای کامپیوتر ، بایت می باشد . 

بیتها به تنهایی هیچ ارزشی ندارند و فقط برای برخی عملیات خاص مثل ماسک گذاری و محاسبات منطقی ( یا - و - یای انحصاری - جمع  و ... ) بکار می روند .


 با  بیت  ( ارقام 0 و 1 باینری )  می توان کارهای جالب و خفن انجام داد . مثلا می توانید یکی از پیکسلهای مانیتور را خاموش یا روشن یا تغییر رنگ کنید ولی کسی متوجه نشود !!!

هکرها معمولا برخی اوقات وبلاگها را با تغییر میزان رزولوشن ، هک می کنند  . الان همین وبلاگ وحیدمی را نگاه کنید . اکثر پستهای قدیمی وبلاگ وحیدمی کمرنگ و  یا رنگ پریده هستند ولی این مربوط به بعد از حملات سایبری بود که به این وبلاگ ارسال شد . این حملات از همین خاصیت بیت ها یعنی خاموش کردن یا تغییر رنگ پکسلها استفاده می کنند !!! 


این ثابت می کند که هکرهای لینوکس ، بر زبان ماشین تسلط کامل دارند ولی دوست ندارند دست زیاد شود !! 


به همین دلیل است که مرتبا وبلاگ وحیدمی را هک می کنند !!  


خب بگذریم ...


می دانم که خسته و کسل شده اید . لذا ادامه ی درس را به زمانی دیگر موکول می کنم . در درس بعدی ، سایر بخشهای معماری نرم افزارهای ویندوز را براساس آدرسها تشریح می نمایم . اما  نمی توانم رمزگشایی کنم زیرا  مطلب خیلی طولانی می شود . 


برای فهم دقیقتر معماری نرم افزارهای ویندوز به آدرسی که در بالای این پست آوردم یعنی پست  معروف و جنجالی  pe.txt  مراجعه فرمایید . 


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


فعلا خداحافظ تا درس بعدی . انشاا...