به نام خدا
از این پست به بعد ، تنها کلمات کلیدی این وبلاگ ، اینها می باشند:
برنامه نویسی با هگز ادیتور
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 مراجعه فرمایید .
کافیست روی لینک بالای همین پست کلیک کنید تا به این پست وارد شوید .
فعلا خداحافظ تا درس بعدی . انشاا...