مهندسی معکوس یکی از مقوله های بسیار مهم برای تست نفوذ می باشد، زیرا برای (به اصطلاح) هک کردن هر چیزی، اول باید بدونیم که چطوری کار میکنه.
مهندسی معکوس فرآیندی برای درک نحوه ی کار کرد داخلی و ساخت یک چیز می باشد، حالا چه یک جاروبرقی باشد، چه یک cpu، چه یک سیستم عامل و چه یک برنامه ای مثل Chrome Browser. در دنیای سایبری مهندسی معکوس معمولا به معکوس کردن یک برنامه کامپایل شده برای درک کردن نحوه دقیق کارکرد داخلی آن گفته میشود. در این پست به برنامه هایی که با زبان C نوشته میشن اکتفا میکنیم و بیشتر در لینوکس. به موارد اختصاصی ویندوز، سایر زبان های برنامه نویسی در پست های دیگه خواهیم پرداخت.
خب بهتره اول از همه بپردازیم به اینکه کامپایل کردن چیست؟ کامپایل کردن درست مثل ترجمه کردن است، در کامپایل کردن یک کد برنامه کامپایلر اون کد رو نسبت به ساختارهای تعریف شده تبدیل به یک ساختار قابل فهم برای cpu میکنه. بعد از اون لینکر قطعات ترجمه شده رو به هم وصل میکنه و پک کننده نتیجه رو به یک فایل اجرایی در میاره.
از طریق ابزارها شما میتونید اون محتویات رو به شکل قابل درک تری شامل segment های مختلف، آدرس ها و کد اسمبلی اون برنامه رو ببینید، که البته اون کد رو خود ابزارها میسازن و hint میدن. برای مهندسی معکوس شما باید اون کدها و داده ها و متاداده ها رو بخونید و طرح control flow برای آن کد ترسیم کرده و اون رو درک کنید. چند سگمنت خیلی مهم وجود دارن که از همه پرکاربردترن:
همیشه یه آدرس بعنوان entry point قرار داده میشه که اغلب با برچسب یا همون label بنام _start شناخته میشه. در برنامه های C که کامپایل میشن توی این قسمت کارهایی از قبیل load کردن کتابخونه ها، تخصیص و init حافظه و یکسری کارهای دیگه انجام میشه و بعد تابع main شما صدا زده میشه.
برای مهندسی معکوس کردن به شخصه معمولا یطرف صفحه کد assembly یا شبه کد C که با ابزارها گرفتم رو میزارم و یه طرف دیگه یه ادیتور (vim!!!) باز میکنم شروع میکنم یه شبه کد خوانا و قابل درک برای خودم بنویسم یا نکات رو یادداشت کنم. به شما هم همین پیشنهاد رو میکنم.
میتوان گفت یکی از شاخه های پرکاربرد و غیر تکراریه علم سایبری، مهندسی معکوس هست که هر روزه نیاز به آن بیشتر احساس میشود.
برای انجام دادن هر کاری به صورت فوری و به شکل صحیح، قطعا باید از ابزارهایی استفاده کنیم که مخصوص همون کار درست شده اند.
همونطور که از اسمش پیداست اطلاعات در مورد فایل باینری رو دامپ میکنه و میتونین کد اسمبلی هم ازش بگیرین.
اصولا یک دیباگر هست، ولی بدرد مهندسی معکوس و کشف اسیب پذیری ها هم کاربرد دارد.
ابزاری بسیار قوی و گرافیکی برای مهندسی معکوس که قابلیت دیباگ، ادیت، نقشه control flow کشیدن و خیلی امکانات دیگه رو داره.
برنامه ای که اخیرا سازمان NSA در دسترس عموم قرار داده، که البته بنده هنوز باهاش کار نکردم.
درست مثل IDA بسیار قوی هستش، هدف از ساختش کارهای فارنزیک بوده که بعدا تبدیل شده به یک ابزار فوق العاده قوی برای مهندسی معکوس و دیباگ. البته هنوز هم برای manipulation روی هر فایل باینری میتونین ازش استفاده کنین.
همونطور که از اسمش پیداست برای تحلیل فایل های ELF بکار میره، باهاش میتونین تمام داده ها و متاداده های یک فایل elf رو نگاه کنید.
یک ابزار خیلی خوب برای خواندن و ویرایش فایل در حالت باینری. بعضی وقت ها باید توی 0 و 1 ها رفت…
به عنوان مثال برای مهندسی معکوس سخت افزاری، میتونیم به پهباد RQ170 آمریکایی اشاره کنیم که توسط سپاه پاسداران انقلاب اسلامی ایران به زمین نشانده شد و در حال حاضر چندین مورد از آن به صورت مهندسی معکوس طراحی و ساخته شده اند.
به عنوان مثال مهندسی معکوس نرم افزاری، میتوانیم به تمامی برنامه های پولی اشاره کنیم که امروزه ما از آنها به صورت رایگان استفاده میکنیم. اکثر این نرم افزارها برای فعال سازی خود نیاز به لایسنس یا … دارند که از طریق مهندسی معکوس راه فعال سازی نرم افزار را پیدا میکنند.