آنچه که دنبال آن هستیم

مهندسی معکوس یاد می‌گیریم که:

  1. با تحلیل نرم‌افزارها ایرادهای امنیتی آن‌ها را کشف و یا رفع کنیم.
  2. با تحلیل نرم‌افزارها و تغییر کد اجرایی آن‌ها محدودیت‌ها را حذف کنیم و به قابلیت ها بیفزاییم.
  3. با تحلیل بد افزارها اثر مخرب آن‌ها را خنثی کنیم.
از آنجایی که نویسنده‌ی این آموزش در حال حاضر از سیستم‌عامل لینوکس استفاده می‌کند، آموزش خود را با مهندسی معکوس برنامه‌ها در محیط لینوکس و با کمک GDB آغاز می‌کنیم. با توجه به این که حجم خیلی زیادی از مفاهیم مهندسی معکوس بین سیستم‌عامل‌های مختلف مشترک است، در آینده ممکن است به برنامه‌های سیستم‌عامل ویندوز یا اندروید نیز بپردازیم.

چیزهایی که باید یاد بگیریم
هرچند که دانش محدود و صرفا آشنایی ساده با بعضی ابزارهای debugging توانایی انجام تغییرات جذابی در فایل‌های اجرایی به ما می‌دهد، ولی یادگیری اصولی و حرفه‌ای مهندسی معکوس، نیازمند دانش گسترده ای است. این دانش گسترده به معنی تسلط کامل است بر همه‌ی فرایندهایی که یک برنامه‌ی رایانه‌ای از اولین چرخه‌ی حیات خود (یعنی هنگام نوشته شدن برنامه) تا آخرین چرخه‌ی حیات خود (یعنی زمان اجرا شدن برنامه توسط سیستم‌عامل و پایان یافتن اجرای آن) طی می‌کند. شناخت این فرایند‌ها مستلزم تسلط نسبی بر مبحث‌های ذکر شده در زیر است و بدون شک یادگیری همه‌ی این موارد مستلزم تلاش و پشتکار بالا و صرف زمان طولانی مدت است. از آنجایی که این آموزش نمی‌تواند همه‌ی موارد را پوشش دهد، انتظار می‌رود با نام بردن از سرفصل‌های مربوطه و ارائه معرفی کوتاهی از هر کدام، خواننده خود به مطالعه‌ی بیشتر و موشکافی آن بخش‌ها بپردازد.
  • C/C++ Programming
  • How to work with GCC
  • Compiler & Compiling Process
  • How to work with GDB
  • Assembly Language
  • CPU and its Registers
  • Structure of Executable Files
  • Operation Systems
  • Memory Management in OS
  • Some Tools
  • Boot Procedure
  • Anything else?
منابعی که استفاده می‌کنیم
با توجه به گسترده بودن دانش‌های مورد نیاز برای مهندسی معکوس، خارج از انتظار نیست که منابع مورد استفاده نیز شامل طیف گسترده ای از کتاب‌ها و صفحات اینترنتی باشد (البته حجم زیادی از این منابع با هم مشترک می‌باشند ولی احتمالا هر کدام نیز مطلب منحصر به خود نیز برای ارائه دارند). آنچه در ادامه آورده می‌شود لیست ناقصی است که به مرور زمان به تعداد آن‌ها افزوده خواهد شد:

GDB (gnu debugger)

Reversings & Finding Bugs & Exploition