مهندسی معکوس (Reverse Engineering) یعنی رسیدن از کل به جزء یا بطور جامع تر ، درک و شناخت سیستم هاست. این سیستم میتونه یک بیماری ، مدار الکترونیکی ، یک محصول شیمیایی و … باشه . مهندسی معکوس هر کدوم میتونه با اهداف مختلف انجام بگیره، مثلا اگه یک بیماری باشه هدف اون تهیه یک دارو میتونه باشه.
مهندسی معکوس در حوزه ی نرم افزار (Software Reverse Engineering) هم کاربرد داره و با اهداف مختلفی مانند آنالیز بدافزار، کشف آسیب پذیری و توسعه ی اکسپلویت، کرک و باز تولید برنامه ها مورد استفاده قرار میگیره.
برای اینکه وارد هر کدوم از این فیلدهای کاربردی مهندسی معکوس در حوزه ی نرم افزار بشید، شما نیاز دارید یکسری موارد عمومی و موارد تخصصی رو یاد بگیرید. موارد عمومی مواردی هستن که بین این فیلدها مشترکه و موارد تخصصی ، نیازمندی های تحصصی اون فیلد رو شامل میشه.
برای مثال کار با ابزارهای دیس اسمبلر و دیباگر و همچنین درک کدهای اسمبلی ، جزء موارد عمومی هستن که شما اگه بخوایین وارد هر کدوم از این فیلدها بشید ، باید یاد بگیرید. اما مثلا در حوزه ی آنالیز بدافزار، شما علاوه بر موارد عمومی، نیاز دارید مثلا پروتکل های شبکه یا الگوریتم های رمزنگاری رو هم یاد بگیرید.
با توجه به این مطالب، دوره ای رو تدارک دیدیم با عنوان “دوره ی رایگان مهندسی معکوس نرم افزار” با تمرکز بر موارد عمومی، تا این موارد مشترک رو یاد بگیرید و بتونید راحتتر وارد فیلدهای مورد علاقه اتون بشید.
مواردی که باید در خصوص این دوره بدونید :
- تمرکز اصلی دوره ، روی یادگیری و درک کدهای اسمبلی و کار با ابزارهای X64dbg و WINDBG و IDAFree هستش.
- دوره هم شامل نسخه ی 32 بیتی و هم 64 بیتی میشه.
- پلتفرم مورد نظر ویندوز 10 هستش.
- دوره در 3 فصل تهیه میشه :
- فصل اول : پیش نیازها و ابزارها
- فصل دوم: دستورات زبان اسمبلی
- فصل سوم: درک مجموعه دستورات زبان اسمبلی
- وضعیت دوره : پایان فصل دوم (32 ویدیو + 21 ساعت و 43 دقیقه فیلم آموزشی)
- پایان فصل اول (07-02-1403) – 14 ویدیو – 4 ساعت و 35 دقیقه فیلم آموزشی – لیست پخش یوتیوب – اسلایدها و کدها
- پایان فصل دوم (04-08-1403) – 18 ویدیو – 17 ساعت و 8 دقیقه فیلم آموزشی – لیست پخش یوتیوب – اسلایدها و کدها
- زمان انتشار: بصورت هفتگی (جمعه ها)
- آخرین بروزرسانی : 04-08-1403
قسمت صفرام : معرفی دوره
برای آشنایی بیشتر با دوره، میتونید این ویدیو معرفی رو مشاهده کنید.[مشاهده در یوتیوب | مشاهده در آپارات | | اسلایدها]
فصل اول : پیش نیازها و ابزارها
در فصل اول ابزارهامون رو نصب میکنیم و یسری پیش نیاز برای یادگیری مهندسی معکوس رو با هم یاد میگیریم.
قسمت اول : نصب IDAFree 8.3 در ویندوز 10 :
در این قسمت، IDAFree 8.3 رو از سایتش دانلود میکنیم و هش اون رو با پاورشل بررسی و در نهایت روی ویندوز 10 نصبش میکنیم. [مشاهده در یوتیوب | مشاهده در آپارات | | دانلود همه ی فایلهای نصبی]
قسمت دوم : نصب x64dbg در ویندوز 10:
در این قسمت، x64dbg رو از سایتش دانلود میکنیم و در ویندوز 10 نصبش میکنیم. [مشاهده در یوتیوب | مشاهده در آپارات | | دانلود همه ی فایلهای نصبی]
قسمت سوم : نصب Windbg در ویندوز 10 :
در این قسمت، Windbg Classic رو از طریق SDK در ویندوز 10 نصب میکنیم. تفاوت بین نسخه ی Classic و Preview رو بررسی و در نهایت Windbg Preview رو از طریق مارکت نصب میکنیم. [مشاهده در یوتیوب | مشاهده در آپارات | | دانلود همه ی فایلهای نصبی]
قسمت چهارم: نصب Visual Studio 2019 Community در ویندوز 10 :
در این قسمت، Visual Studio 2019 Community رو در ویندوز 10 نصب میکنیم. [مشاهده در یوتیوب | مشاهده در آپارات | | دانلود همه ی فایلهای نصبی]
قسمت پنجم : نصب HxD روی ویندوز 10 :
در این قسمت برنامه هگزادیتور HxD رو در ویندوز 10 نصب میکنیم . [مشاهده در یوتیوب | مشاهده در آپارات | | دانلود همه ی فایلهای نصبی]
قسمت ششم: سیستم اعداد :
در این قسمت نگاهی به سیستم اعداد انداختیم، سیستم اعداد دسیمال، باینری و هگز رو معرفی و سه روش برای تبدیل این مبناها به هم رو بررسی کردیم. [مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت هفتم : معماری های پردازنده:
در این قسمت به بررسی کوتاه معماری های x86 و x64 پرداختیم. [مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت هشتم : انواع زبان های برنامه نویسی و روند کامپایل یک برنامه C:
در این قسمت به بررسی انواع زبان های برنامه نویسی پرداختیم ، همچنین مراحلی که یک کد C طی میکنه تا تبدیل به فایل اجرایی بشه رو با هم بررسی کردیم، همچنین روش تشخیص کامپایلر و زبانی که فایل اجرایی باهاش توسعه داده شده رو هم بررسی کردیم. [مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت نهم : روند اجرای یک فایل اجرایی در ویندوز 10
بروزرسانی جمعه 10 فروردین 1403
در این قسمت بصورت کلی، روند اجرای یک فایل PE در ویندوز رو بررسی کردیم.
مفاهیمی مانند PE، پروسس ها ، Virtual Memory ، آدرس های مجازی و … رو معرفی کردیم و با ابزارهایی مانند PE Bear ، Resource Hacker، Windbg و x64dbg کار کردیم. [مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت دهم : حافظه (تئوری)
بروزرسانی: جمعه 17 فروردین 1403
در این ویدیو نگاهی به سلسله مراتب حافظه انداختیم، واحدهای اندازه گیری Bit ، Byte ، Word ، Dword و Qword رو بررسی کردیم . همچنین نگاهی به بحث Big Endian و Little Endian انداختیم. [مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت یازدهم: حافظه (عملی)
بروزرسانی : جمعه 24 فروردین 1403
در این ویدیو مباحثی که هفته پیش بصورت تئوری در موردشون صحبت کردیم رو در دیباگرهامون یعنی Windbg و X64dbg بررسی میکنیم.
دستوراتی که در Windbg پوشش دادیم : db,dw,dd,dq,dc,da,s,eb,ew,ed,eq,da,ea
[مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت دوازدهم : رجیسترهای پردازنده (تئوری)
بروزرسانی : جمعه 31 فروردین 1403
در این جلسه به بررسی رجیسترهای پردازنده (رجیسترهای پایه) پرداختیم.
- رجیسترهای همه منظوره (RAX/EAX-RBX/EBX-RCX/ECX-RDX/EDX-RSP/ESP-RBP/EBP-RSI/ESI-RDI/EDI-R8-R15)
- رجیستر سگمنت
- رجیستر RFLAGS/EFLAGS
- رجیستر RIP/EIP
[مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت سیزدهم : رجیسترهای پردازنده (عملی)
بروزرسانی: جمعه 7 اردیبهشت 1403
در این قسمت به بررسی موارد عملی ، جلسه قبلی پرداختیم. بطور کلی رجیسترها رو در IDAfree و Windbg و X64dbg بررسی کردیم.
دستوراتی که در windbg بررسی کردیم :
r,rm,.formats,!teb
[مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
فصل دوم : دستورات مهم اسمبلی
قسمت اول: آشنایی با زبان اسمبلی :
بروزرسانی: جمعه 14 اردیبهشت 1403
در این قسمت نگاهی به زبان اسمبلی انداختیم. موضوعاتی که پوشش دادیم : زبان اسمبلی چیه و دلایل پیدایش اون، اهمیت یادگیری زبان اسمبلی برای مهندسین معکوس، نحوه ی یادگیری زبان اسمبلی برای مهندسین معکوس، قالب کلی دستورات اسمبلی ، مقایسه ی دو سینتکس اینتل و AT&T و معرفی دستورات مهم اسمبلی [مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت دوم: نحوه ی اجرای یک برنامه در x64dbg و windbg
بروزرسانی: جمعه 21 اردیبهشت 1403
در این قسمت به بررسی نحوه ی اجرای یک برنامه و دستورات اسمبلی، در دیباگرهای x64dbg و windbg پرداختیم، تا بتونیم راحتتر داخل دستورات اسمبلی حرکت کنیم. مواردی مانند run و step into و step over و pdb و symbol و … .
دستوراتی که در windbg بررسی کردیم:
g,gu,.restart,q,t,p,pa,pt,pa,pc
[مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت سوم: Software Breakpoints
بروزرسانی: جمعه 28 اردیبهشت 1403
در این قسمت به بررسی نقاط توقف یا بریک پوینت ها یا Breakpointها پرداختیم. بطور کلی Software Breakpoint هارو معرفی و نحوه تنظیم و کار با اونارو در دیباگرهای x64dbg و windbg بررسی کردیم. با پایان این ویدیو ، شما 5 درصد از زبان اسمبلی مورد استفاده در برنامه هارو درک میکنید.
دستوراتی که در windbg بررسی کردیم:
bp,bl,bd,be,bc,lm,x,bm,bu,.bpcmds
[مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت چهارم: Hardware Breakpoints
بروزرسانی: جمعه 4 خرداد 1403
در این جلسه به بررسی بریک پوینت های سخت افرازی یا نقاط توقف سخت افزاری یا Hardware BreakPoint ها در دیباگرهای x64dbg و Windbg پرداختیم.
دستوراتی که در Windbg استفاده کردیم:
s,db,ba
[مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت پنجم: Conditional Breakpoints
بروزرسانی: جمعه 11 خرداد 1403
در این جلسه به بررسی نقاط توقف شرطی یا Conditional Breakpoint یا بریک پوینتهای شرطی در دیباگرهای x64dbg و windbg پرداختیم. با استفاده از این بریک پوینتها، میتونید به فرایند مهندسی معکوستون سرعت بدید.
دستوراتی که در windbg استفاده کردیم:
bp,poi
[مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت ششم: بررسی دستور NOP
بروزرسانی: جمعه 18 خرداد 1403
در این جلسه به بررسی دستور NOP پرداختیم. همچنین نگاهی به کاربردهای این دستور در مهندسی معکوس و اکسپلویتینگ انداختیم. [مشاهده در یوتیوب | مشاهده در آپارات | | اسلاید]
قسمت هفتم: توسعه ی اسمبلی به روش Inline Assembly در ویژوال استدیو 2019 ( 32 بیتی و 64 بیتی)
بروزرسانی: جمعه 25 خرداد 1403
این جلسه میخوایم محیط توسعه اسمبلی رو در ویژوال استدیو 2019 فراهم کنیم تا جلسات بعدی بتونیم داخلش کد بزنیم. کل کاری هم که کردیم اینه که روش Inline Assembly رو در ویژوال استدیو 2019 برای نسخه های 32 بیتی و 64 بیتی فراهم کردیم. [مشاهده در یوتیوب | مشاهده در آپارات | | کدها]
قسمت هشتم: بررسی دستورات MOV و LEA
بروزرسانی: جمعه 15 تیر 1403
این جلسه رفتیم سراغ دو تا از دستورات مهم اسمبلی یعنی MOV و LEA که هر دو دستور کار انتقال داده رو انجام میدن. براشون کلی مثال زدیم و یسری نکات رو بررسی کردیم. همچنین هر دو دستور رو در x64dbg بررسی و فراخوانی تابع به روش call by value و call by reference رو بررسی کردیم. [مشاهده در یوتیوب | مشاهده در آپارات | | کدها و اسلایدها]
قسمت نهم (بخش اول) : آشنایی با دستورات ADD و SUB و XADD و INC و DEC
بروزرسانی: جمعه 22 تیر 1403
در این قسمت رفتیم سراغ 5 تا از دستورات اسمبلی که برای جمع و تفریق بکار میرن، یعنی دستورات ADD و SUB و XADD و INC و DEC .
در بخش اول دستورات ADD و SUB ، بهمراه جمع و تفریق باینری رو بررسی کردیم و کلی مثال براشون زدیم. همچنین دستور NEG رو هم معرفی کردیم.
[مشاهده در یوتیوب | مشاهده در آپارات | | کدها و اسلایدها]
قسمت نهم (بخش دوم) : آشنایی با دستورات ADD و SUB و XADD و INC و DEC
بروزرسانی: جمعه 29 تیر 1403
در این قسمت رفتیم سراغ 5 تا از دستورات اسمبلی که برای جمع و تفریق بکار میرن، یعنی دستورات ADD و SUB و XADD و INC و DEC .
در بخش دوم فلگهایی که دستورات ADD و SUB روشون تاثیر میزارن یعنی فلگهای زیر رو در ویژوال استدیو و X64dbg بررسی کردیم.
- Zero Flag (ZF-ZR-Z)
- Overflow Flag (OF-OV-O)
- Parity Flag (PF-PE-P)
- Auxiliary Flag (AF-AC-A)
- Carry Flag (CF-CY-C)
- Sign Flag (SF-PL-S)
همچنین نگاهی به سیستم اعداد BCD انداختیم.
در ادامه دستورات XADD و INC و DEC رو در ویژوال استدیو و X64dbg برای نسخه های 32 بیتی و 64 بیتی از دیدگاه برنامه نویسی و مهندسی معکوس (Software Reverse Engineering) بررسی کردیم.
در نهایت با پایان این جلسه، شما 54 درصد کدهای اسمبلی، دیس اسمبل شده از یک برنامه رو متوجه میشید.
[مشاهده در یوتیوب | مشاهده در آپارات | | کدها و اسلایدها]
قسمت دهم(بخش اول) : آشنایی با دستورات NOT و OR و XOR و AND و TEST و CMP
بروزرسانی: جمعه 5 مرداد 1403
در این قسمت از دوره رایگان مهندسی معکوس نرم افزار رفتیم سراغ دستورات NOT و OR و XOR و AND و TEST و CMP .
در بخش اول در خصوص ماهیت دستورات منطقی صحبت کردیم. همچنین دستورات NOT و OR و XOR رو در اسمبلی 32 بیتی و 64 بیتی در دو محیط برنامه نویسی (ویژوال استدیو) و مهندسی معکوس نرم افزار (X64DBG) بررسی کردیم.
[مشاهده در یوتیوب | مشاهده در آپارات | | کدها و اسلایدها]
قسمت دهم(بخش دوم) : آشنایی با دستورات NOT و OR و XOR و AND و TEST و CMP
بروزرسانی: جمعه 12 مرداد 1403
در این قسمت از دوره رایگان مهندسی معکوس نرم افزار رفتیم سراغ دستورات NOT و OR و XOR و AND و TEST و CMP .
در بخش دوم دستورات AND و TEST و CMP رو در اسمبلی 32 بیتی و 64 بیتی در دو محیط برنامه نویسی (ویژوال استدیو) و مهندسی معکوس نرم افزار (X64DBG) بررسی کردیم.
[مشاهده در یوتیوب | مشاهده در آپارات | | کدها و اسلایدها]
قسمت یازدهم: دستورات پرش شرطی و غیرشرطی
بروزرسانی: جمعه 19 مرداد 1403
در این قسمت رفتیم سراغ دستورات پرشی. بطور کلی دستور پرش غیرشرطی (JMP) و دستورات پرش شرطی (JZ,JE,JNZ,JNE,JG, …) رو بررسی کردیم و نکاتی در خصوص کاربرد و نحوه ی مواجهه با این دستورات از دید مهندسی معکوس نرم افزار ارائه دادیم.
[مشاهده در یوتیوب | مشاهده در آپارات | | کدها و اسلایدها]
قسمت دوازدهم: پشته
بروزرسانی: جمعه 26 مرداد 1403
این جلسه رفتیم سراغ پشته یا Stack. بصورت کلی بررسی کردیم که پشته چیه، چه کاربردی داره و چطوری میتونیم باهاش کار کنیم. رجیسترهای RSP, ESP, RBP, EBP رو معرفی کردیم و با دستورات POP, PUSH, ADD, SUB, MOV, LEA در زمینه ی پشته کار کردیم. در نهایت قاب پشته یا StackFrame رو معرفی کردیم.
[مشاهده در یوتیوب | مشاهده در آپارات | | کدها و اسلایدها]
قسمت سیزدهم [بخش اول]: آشنایی با توابع : دستورات CALL و RET
بروزرسانی: جمعه 2 شهریور 1403
این جلسه رفتیم سراغ توابع. بصورت کلی در خصوص مفهوم توابع، موارد تشکیل دهنده ی تابع، نحوه ی تعریف توابع در Inline Assembly نسخه 32 بیتی و 64 بیتی و دستورات CALL و RET صحبت کردیم.
[مشاهده در یوتیوب | مشاهده در آپارات | | کدها و اسلایدها]
قسمت سیزدهم [بخش دوم]: آشنایی با توابع : قراردادهای فراخوانی و متغیرهای محلی
بروزرسانی: جمعه 16 شهریور 1403
این جلسه در ادامه ی آموزشهای مربوط به توابع، رفتیم سراغ قراردادهای فراخوانی و متغیرهای محلی.
بصورت کلی مفهوم قراردادهای فراخوانی (Calling Convention) رو ارائه و 4 قرارداد فراخوانی CDECL و STDCALL و FASTCALL و THISCALL رو در نسخه ی 32 بیتی و قرارداد فراخوانی WINDOWS X64 CALLING CONVENTION رو در نسخه ی 64 بیتی بررسی کردیم. همچنین نگاهی به مفهوم متغیرهای محلی و نحوه ی دسترسی به اونا در نسخه های 32 بیتی و 64 بیتی انداختیم.
[مشاهده در یوتیوب | مشاهده در آپارات | | کدها و اسلایدها]
قسمت سیزدهم [بخش سوم]: آشنایی با توابع : بررسی Prolog و Epilog و ترسیم پشته
بروزرسانی: جمعه 20 مهر 1403
این جلسه در ادامه ی آموزش های مرتبط با توابع، رفتیم سراغ Prolog و Epilog و ترسیم پشته در نسخه 32 بیتی و 64 بیتی.
بصورت کلی با مفاهیم Prolog و Epilog و سازماندهی پشته صحبت کردیم. همچنین با مفاهیم call stack و رجیسترهای volatile و Non-Volatile، توابع leaf و non leaf، تراز 16 بایتی در ویندوز 64 بیتی و shadow space آشنا شدیم.
[مشاهده در یوتیوب | مشاهده در آپارات | | کدها و اسلایدها]
قسمت چهاردهم [آخر]: بررسی دستورات مهم در Windbg و IDA Pro
بروزرسانی: جمعه 4 آبان 1403
با توجه به اینکه در شروع این دوره آموزشی، اشاره کرده بودیم که یکی از اهداف این دوره، تمرکز روی ابزارهای ویژوال استدیو، x64dbg ، IDA و Windbg هستش، و در طول فصل دوم هم روی ویژوال استدیو و X64dbg تمرکز داشتیم، در ویدیوی آخر از فصل دوم دوره ی رایگان مهندسی معکوس نرم افزار، همه ی دستورات مهم اسمبلی، بهمراه قراردادهای فراخوانی و پشته و توابع رو در ابزارهای IDA و WINdbg هم بررسی کردیم. در صورتیکه به این دو ابزار هم علاقه مندید، میتونید این ویدیو رو ببینید.
دستوراتی که در Windbg استفاده کردیم:
r, k, formats, db, dw, dq, t, p
[مشاهده در یوتیوب | مشاهده در آپارات | | کدهای این جلسه]
سلام من سایت شمارو اتفاقی داخل یه کانال تلگرام دیدم وارد سایت گه شدم به این دوره اتفاقی یه نگاه انداختم بسیار خوب و جالب چون اکثرا برای دوره های مهندسی معکوس یا هزینه دریافت میکنن یا اینکه خیلی پیچیده بیانش کردن که کسی که تازه میخاد وارد این حوزه بشه و شروع به یادگیری کنه براش سخته و نمیتونه خیلی راحت ارتباط بگیره ممنون از اینکه وقت گذاشتین برای تهیه این دوره من هر هفته قسمت های جدید این دوره رو دنبال میکنم و بهش علاقه مند هستم❤️
❤️