مهندسی معکوس چگونه کار می کند؟ 5 مثال ساده از کاربرد آن
مهندسی معکوس عبارت است از جدا کردن یک شی برای بررسی اینکه چگونه کار می کند. این کار اصولا برای تجزیه و تحلیل و به دست آوردن اطلاعات درباره نحوه عملکرد شی به کار می رود اما اغلب برای تکرار یا تقویت شی نیز استفاده می شود. بسیاری از چیزها را می توان مهندسی معکوس کرد از جمله نرم افزارها، ماشین های فیزیکی، فناوری نظامی و حتی عملکردهای بیولوژیکی مربوط به نحوه عملکرد ژن ها.
روش مهندسی معکوس هم در سخت افزار و هم نرم افزار کامپیوتر کاربرد دارد. مهندسی معکوس نرم افزار روی کد ماشین برنامه تمرکز دارد یعنی رشته های صفر و یک که به پردازنده منطقی ارسال می شود. از دستورات زبان برنامه نویسی برای تبدیل کد دستگاه به کد منبع اصلی استفاده می شود.
بسته به نوع فناوری، دانش به دست آمده در طی مهندسی معکوس می تواند برای استفاده مجدد از اشیای منسوخ شده، تجزیه و تحلیل امنیت، کسب مزیت رقابتی و یا فقط برای آموزش نحوه عملکرد شی مورد استفاده قرار گیرد. صرف نظر از نحوه استفاده از دانش یا چگونکی ارتباط آن، مهندسی معکوس فرایند به دست آوردن این دانش از یک شی تکمیل شده است.
هدف مهندسی معکوس چیست؟
هدف از مهندسی معکوس فهمیدن نحوه عملکرد یک شی یا سیستم است و دلایل مختلفی برای انجام این کار وجود دارد.
از مهندسی معکوس می توان برای یادگیری نحوه کارکرد یک شی و بازسازی آن یا ایجاد یک شی مشابه با پیشرفت های بیشتر استفاده کرد.
بیشتر هدف مهندسی معکوس نرم افزاری یا سخت افزاری پیدا کردن راهی برای ایجاد یک محصول مشابه است که محصول اصلی یا گران می باشد و یا دیگر در دسترس نیست. مهندسی معکوس در فناوری اطلاعات نیز برای رفع مشکلات سازگاری کاربرد دارد و باعث می شود تا سخت افزار یا نرم افزاری که با سایر سخت افزارها، نرم افزارها یا سیستم عامل های دیگری که با آنها سازگار نبوده سازگار شود.
یک مثال خوب نرم افزار Logic Pro اپل است که برای نوازندگان امکان آهنگسازی، ضبط، تنظیم، ویرایش و ترکیب موسیقی ها را فراهم می کند. Logic Pro فقط برای دستگاه های مک (Mac) در دسترس است و تقریبا گران هم می باشد. این برنامه چند ابزار موسیقی دیجیتالی اختصاصی دارد. یک برنامه نویس با کمی تحلیل و بررسی می تواند این ابزارهای موسیقی دیجیتالی را مهندسی معکوس کند، نحوه عملکرد آنها را تشخیص داده و آنها را برای استفاده در Logic Pro سفارشی کند یا بین آنها و سایر نرم افزارهای موسیقی سازگار با ویندوز تعامل برقرار کند.
فرایند مهندسی معکوس چگونه کار می کند؟
فرایند مهندسی معکوس برای هر شی متفاوت خاص است. با این حال صرف نظر از زمینه کاری سه مرحله کلی وجود دارد که در همه فعالیت های مهندسی معکوس مشترک است. این سه مرحله عبارتند از:
- استخراج اطلاعات: همه اطلاعات مربوط به طراحی شی مورد مطالعه استخراج می شود و سپس مورد بررسی قرار می گیرند تا نحوه قرارگیری قطعات در کنار یکدیگر تشخیص داده شود. در مهندسی معکوس نرم افزاری کد منبع و اطلاعات اسناد طراحی مرتبط برای مطالعه جمع آوری می شود. علاوه بر این احتمالا از ابزارهایی مانند دستگاه جدا کننده برای جدا کردن برنامه به اجزای تشکیل دهنده آن استفاده می کنند.
- مدل سازی: اطلاعات جمع آوری شده در یک مدل مفهومی انتزاعی می شود و هر قسمت از مدل عملکرد خودش را در یک ساختار کلی توضیح می دهد. هدف این مرحله این است که اطلاعات مخصوص به هر قسمت خاص دریافت شده و آن را به یک مدل کلی تبدیل کند که می تواند برای هدایت طراحی اشیا یا سیستم های جدید استفاده شود. در مهندسی معکوس نرم افزاری این مرحله به شکل یک نمودار ساختار یا نمودار جریان داده نشان داده می شود.
- بازبینی: این مرحله شامل بررسی مدل و آزمایش آن در سناریوهای مختلف است تا اطمینان حاصل شود که یک انتزاع واقعی از شی یا سیستم اصلی به دست آمده است. در مهندسی نرم افزار به شکل آزمایش نرم افزار می باشد. مدل را پس از تست می توان برای مهندسی مجدد شی اصلی پیاده سازی کرد.
جزئیات فرایند مهندسی معکوس بسته به نوع متفاوت است اما به طور کلی در این سه مرحله قرار می گیرد.
مهندسی معکوس نرم افزار از چندین ابزار استفاده می کند. یکی از ابزارها دستگاه دامپر (dumper) هگزا دسیمال است که اعداد باینری یک برنامه را به صورت هگزادسیمال چاپ یا نمایش می دهد. مهندس معکوس با شناخت الگوهای بیتی که دستورات پردازنده را نشان می دهند و همچنین طول دستورالعمل ها می تواند قسمت های مختلف برنامه را شناسایی کرده و نحوه عملکرد آنها را بررسی کند.
یکی دیگر از ابزارهای مهندسی معکوس نرم افزاری دیس اسمبلر (بازگرداننده اسمبلی یا disassembler) است. کد باینری را می خواند و هر دستور قابل اجرا را به صورت متن نمایش می دهد. یک دیس اسمبلر نمی تواند تفاوت بین دستور اجرایی و داده ها مورد استفاده برنامه را تشخیص دهد، بنابراین از یک اشکال یاب یا دیباگر (debugger) برای جلوگیری از جدا کردن قسمت های داده برنامه توسط دیس اسمبلر استفاده می شود. این ابزارها ممکنه توسط یک کراکر کامپیوتر مورد استفاده قرار گیرند و این افراد وارد سیستم شوند و آسیب های دیگری ایجاد کنند.
CAD (Computer-aided design) یک تکنیک مهندسی معکوس است که برای بازسازی یک قطعه ساخته شده است و هنگامی استفاده می شود که نقشه اصلی در دسترس نیست. شامل تولید تصاویر سه بعدی از قطعه است تا بتوان آن را دوباره ساخت.
یک دستگاه اندازه گیری مختصات، قطعه را اندازه گیری می کند و یک تصویر سه بعدی از طرح اولیه با استفاده از نرم افزار CAD می سازد و روی مانیتور نمایش داده می شود. پس از اتمام اندازه گیری، ابعاد تصویر طرح اولیه داده می شود. هر قطعه را می توان با استفاده از این روش مهندسی معکوس کرد.
نمونه هایی از مهندسی معکوس
مهندسی معکوس بسته به نوع کاربرد و هدف آن در فناوری متفاوت است. نمونه های رایج عبارتند از:
نرم افزار
در موارد زیادی از مهندسی معکوس برای دیس اسمبل کردن نرم افزار استفاده می شود. یک مثال رایج تطبیق برنامه نوشته شده برای استفاده یک ریزپردازنده به دیگری است. مثال های دیگر نیز وجود دارد مثل بازسازی کد منبع از دست رفته، مطالعه نحوه انجام برخی عملکردها در برنامه، بهبود کارایی و رفع باگ ها یا تصحیح خطاها هنگامی که کد منبع در دسترس نیست.
Phoenix یک مثال خوب است، Phoenix یک شرکت نرم افزاری آمریکایی است که نرم افزار BIOS می سازد که با نسخه اختصاصی IBM سازگار است. برای انجام این کار Phoenix با ضبط مراحل و عدم مراجعه به کد اختصاصی، نسخه IBM را به گونه ای مهندسی معکوس کرد که از آنها در برابر هزینه های کپی رایت محافظت کند.
بدافزارها حوزه دیگری است که در آن از مهندسی معکوس نرم افزار استفاده می شود. تهدید کننده ها در بیشتر موارد از کدهای مبهم برای جلوگیری از کشف یا فهم کد مخرب خود استفاده می کنند. صاحبان نرم افزار یا سیستم های آلوده می توانند از مهندسی معکوس برای شناسایی محتوای مخرب مانند ویروس استفاده کنند.
آژانس اطلاعات دفاعی آمریکا گفته که قصد دارد از این تکنیک ها برای مهندسی معکوس بدافزارهای دشمن برای ایجاد سلاح های سایبری تهاجمی خود استفاده کند. چند ابزار برای مهندسی معکوس بدافزارها در دسترس است، مانند نرم افزار National Security Agency’s Ghidra که برای مهندسی معکوس بدافزار WannaCry استفاده می شود.
قطعات کامپیوتر
یک تولید کننده پردازنده برای بررسی و فهم نحوه عملکرد پردازنده شرکت رقیب می تواند پردازنده را بخرد، مهندسی معکوس کند و در نهایت از چیزهایی که یاد گرفته برای ساخت پردازنده خود استفاده کند. این فرایند در بسیاری از کشورها غیرقانونی است و نیاز به تخصص زیادی دارد و هزینه بر نیز هست. مهندسی معکوس برای ساخت قطعات جایگزین بیشتر زمانی استفاده می شود که قطعات اصلی تجهیزات قدیمی دیگر در دسترس نباشند. مهندسی معکوس قطعات کامپیوتر نیز برای افزایش امنیت انجام می شود. به عنوان مثال پروژه Zero گوگل با استفاده از مهندسی معکوس آسیب پذیری ها در ریزپردازنده ها را شناسایی کرد.
ارزیابی امنیت شبکه
شرکت هایی که ارزیابی امنیت شبکه انجام می دهند از مهندسی معکوس به عنوان یکی از ابزارهای خود استفاده می کنند. آنها گروه امنیتی خود را به دو تیم تقسیم می کنند، یک تیم حملات را شبیه سازی می کند و تیم دیگر شبکه را کنترل و ردیابی کرده و حملات تیم دیگر را مهندسی معکوس می کند. اطلاعات به دست آمده از این حملات ساختگی برای تقویت شبکه مورد استفاده قرار می گیرد.
چالش های حقوقی و اخلاقی مهندسی معکوس
در ایالات متحده مهندسی معکوس بیشتر به عنوان یک راه قانونی برای یادگیری در مورد یک محصول در نظر گرفته می شود به شرط اینکه نسخه اصلی به صورت قانونی تهیه شده و هیچگونه توافق نامه قرارداد نقض نشود. قوانین تجارت ایالات متحده مهندسی معکوس را مجاز می کند اگر برای بهبود محصول یا ایجاد قابلیت همکاری با سایر محصولات ناسازگار قبلی استفاده شود.
مهندسی معکوس نرم افزار به منظور کپی یک برنامه دارای حق کپی رایت می تواند نقض قانون به حساب آید. برخی از لایسنس های نرم افزاری به طور خاص مهندسی معکوس را ممنوع می کنند. بعضی توافق نامه ها نیز استفاده از مهندسی معکوس برای دسترسی به کد را محدود می کنند از جمله شرایط خدمات یا هشدارهای استفاده و عدم افشای اطلاعات و سایر انواع توافق نامه ها.
اقدامات حفاظت فناوری (TPM) مانند رمزهای عبور و دستگاه های کنترل دسترسی و رمزگذاری اغلب برای کنترل دسترسی به نرم افزار و سایر محتواهای دیجیتالی دارای حق کپی رایت استفاده می شود و دور زدن TPM می تواند مسائل حقوقی را مطرح کند.
قوانین مختلف مربوط به مهندسی معکوس شامل موارد زیر است:
- قانون ثبت اختراع
- قانون حق کپی رایت و استفاده منصفانه
- قانون حمایت از اسرار تجاری
- قوانین جلوگیری از دور زدن قانون کپی رایت هزاره دیجیتال
- قانون حفظ حریم خصوصی ارتباطات الکترونیکی
- هر گونه قرارداد خاص برای محصول مورد نظر
یکی از راه های مهندسی معکوس و توسعه هدفمندانه یک محصول نرم افزاری جدید برای جلوگیری از نقض حق ثبت اختراع یا حق کپی رایت استفاده از تکنیک اتاق تمیز (clean room) یا دیوار اخلاقی است که در آن دو گروه برنامه نویس جداگانه روی پروژه کار می کنند و اطمینان حاصل می شود که نسخه اصلی به طور مستقیم کپی نشده است.
مهندسی معکوس یک حوزه پیچیده در اخلاق و قانون است و گسترش فناوری اطلاعات در بسیاری از بخش های زندگی روزمره آن را پیچیده تر کرده است.
نتیجه گیری
مهندسی معکوس کاربردهای زیادی در فناوری اطلاعات دارد. می تواند یک روش قانونی و اخلاقی برای رفع مسائل سازگاری، بازسازی قطعات قدیمی، ارزیابی امنیت، بهبود محصول موجود و یا ارزان تر کردن هزینه های آن باشد.
مراحل آن پیچیده است و بسته به بخش مورد مطالعه در مهندسی معکوس متفاوت است. به عنوان مثال متخصصان تضمین کیفیت نرمافزار (QA) برای حل مشکلات کاربران با محصولات نرم افزاری می توانند لز مهندسی معکوس برای رسیدن به علت استفاده کنند. شناسایی علل اصلی مشکلات کاربران کار آسانی نیست اما تکنیک های مهندسی معکوس برخی از حدسیات را از بین می برد.
با این اپلیکیشن ساده، هر زبانی رو فقط با روزانه 5 دقیقه گوش دادن، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، همزمان تقویت حافظه، آموزش تصویری با کمترین قیمت ممکن!