نماد سایت بلاگ ایران هاست

مهندسی معکوس نرم افزار چیست و چه کاربردی دارد؟

مهندسی معکوس نرم افزار چیست

واژه مهندسی معکوس علاوه بر کاربرد های مختلفی که دارد، هنگامی که در نرم افزار و علوم نرم افزاری بکار گرفته می شود نیز میتواند معانی مختلفی را برای افراد مختلف تداعی نماید. در این مقاله به بررسی مهندسی معکوس نرم افزار می پردازیم و با دلایل استفاده و تکنیک های آن آشنا می شویم.

مهندسی معکوس چیست؟

مهندسی معکوس یا Reverse Engineering به زبان ساده فرایند حل مسئله است از پاسخی که وجود دارد به جای اینکه از پرسش سوال آغاز شود. مهندسی معکوس بیشتر زمانی استفاده می شود که به دنبال استخراج دانش یا روش طراحی یک خدمات، کالا و یا … هستید.

در نرم افزار مهندسی معکوس چیست ؟

chikofsky یکی از پیشگامان این عرصه در مقاله ای با نام Reverse engineering and design recovery: a taxonomy بیان کرده است می توان معنی مهندسی معکوس نرم افزار را اینگونه بیان داشت که ” مهندسی معکوس، پروسه آنالیز و بررسی موضوعی از سیستم است که امکان ساخت و  نمایش آن سیستم را در سطوح انتزاعی بالاتر فراهم می آورد. یا میتوان به نوعی اینطور بیان کرد که مهندسی معکوس نرم افزار در واقع طی کردن مسیر به صورت معکوس در چرخه تولید نرم افزار است.”

در مدل مهندسی معکوس نرم افزار در واقع خروجی فاز پیاده سازی، مهندسی معکوس شده و در حقیقت کد منبع آن (Source Code) به فاز آنالیز و طراحی برگشت داده می شود و از این نوع مهندسی معکوس با نام مهندسی مجدد یا Re-Engineering یاد می شود.

دلایل استفاده از مهندسی معکوس نرم افزار

در حقیقت امروزه دلایل مختلفی برای استفاده از مهندسی معکوس در جهان پدیدار شده است که در ادامه شرح مختصری بر وجود این دلایل آمده است:

در واقع مورد دوم ذکر شده در  استفاده از مهندسی های معکوس، موردی است که بیشتر افراد با آن آشنا هستند و در واقع آنرا فرآیند بازخوانی یک بخش یا زیرمجموعه سیستم نرم افزاری بدون کمک گرفتن از طرح ها و اسناد و مدل های کامپیوتری آنان است.

تاریخچه مهندسی معکوس نرم افزار

در دهه ۱۹۸۰ شرکت کامپیوتری IBM (international business machines) کامپیوتر های شخصی را برای کاربران خانگی و غیره معرفی کرد و توانست در آن زمان بازار را در اختیار خود نگه دارد و تا چندین سال حاکم بلافصل بازار کامپیوتر های شخصی بود و رمز همه ی موارد ذکر شده تنها در Bios این کامپیوتر ها که رابط بخش سخت افزاری و نرم افزاری این کامپیوتر ها بود.در این حین شرکت Compaq که بزرگترین شرکت تولید کننده PC در ایالت تگزاس آمریکا بود هزینه ای بالغ بر ۱۰۰۰۰۰۰ دلار در آن زمان را به طرح مهندسی معکوس بر روی Bios کامپیوتر های شرکت IBM اختصاص داد و موفق شد توسط شبیه سازی اولین کامپیوتر های شخصی سازگار با IBM را وارد بازار نماید که فروشی بالغ بر ۵۳۰۰۰ عدد در آن زمان داشت.

مهندسی معکوس به صورت کلی شامل موارد زیر است :

مهندسی معکوس نرم افزار دودویی چیست ؟

تحلیل و طراحی سیستم ها در مهندسی نرم افزار این فرآیند گاها مهندسی کد معکوس یا Reverse Code Engineering نامیده می شود (RCE) .به عنوان مثال Decompile کردن یک نرم افزار دودیی نوشته شده تحت Platform جاوا را میتوان با نرم افزاری با عنوان Jad انجام داد و یکی از معروف ترین موارد استفاده شده از این مهندسی معکوس را می توان همان مهندسی معکوس بیان شده در تاریخچه مهندسی معکوس نرم افزار دانست که در آن شرکت Comapq  موفق به ساخت کامپیوتر های شخصی سازگار با IBM PC شد.

امروزه در عرصه مهندسی معکوس نرم افزار گروه های بیشماری وجود دارند که این کار را به عنوان تفریح انجام داده و کرک های نرم افزاری را گسترش میدهند که به عنوان نمونه یکی از معروف ترین این گروه ها میتوان گروه CORE یا Challenge Of Reverse Engineering را نام برد .

از پروژه های نرم افزاری که مهندسی معکوس نرم افزار در آنها نقش بسزایی داشته است میتوان به پروژه Samba Software و یا Wine اشاره کرد که در آن Windows API مهندسی معکوس شده و به عنوان مثال فایلهای MS Office به راحتی در آن اجرا می شوند.

تکنیک و روش مهندسی معکوس نرم افزار

مهندسی معکوس نرم افزار می تواند توسط متد های مختلفی صورت پذیرد  و ۳ متد به همراه  نرم افزار ها یا ابزار اصلی مهندسی معکوس عبارتند از :

در واقع شایع ترین نوع ابزار مهندسی معکوس را تشکیل می دهند که شامل استفاده از آنالیز کنند های Bus و Packet Sniffer ها می شوند که این روش بیشتر برای کرک کردن درایور های سیستمی کاربرد دارد. در برنامه های تحت ویندوز معمولا معمولا از اشکال زدا های سطح پایین مانند Numega SoftICE استفاده می شود.

بیشتر بخوانید: اسنیفر چیست

۱-اشکال زدا ها(Debuggers)

در واقع برنامه های نرم افزاری هستند که قادر هستند برنامه های دیگر را خط به خط اجرا کرده و خطاهای موجود در نرم افزار را ردیابی نمایند . نحوه عملکرد آنها هم بدین صورت است که ابتدا نقطه توقفی (BreakPoint) در برنامه ایجاد و سپس آنرا اجرا می نمایند و هنگامی که برنامه به این نقطه رسید متوقف شده و کاربر میتواند ارزش یا عبارت متغییر های را در هنگام اجرا مشاهده نماید.

Debugger های به دو دسته مد کاربر( User ) و مد هسته ( kernel ) تقسیم می شوند. و میتوان اینطور بین نمود که مد هسته بخشی از سیستم عامل است که میتواند برنامه های راه انداز سیستم را مهندسی معکوس نماید مانند نرم افزار Numega SoftICE که در ابتدا ذکر گردید.

۲-استفاده از دی اسمبل یا Disassembler

یکی از روش های رایج جهت مهندسی معکوس نرم افزار است ، که در آن از یک Disassembler استفاده میشود . Disassembler ها برای اولین بار توسط رخنه کننده های نرم افزاری یا Cracker ها نوشته شد و هدف اصلی آنها تبدیل ساختار کد ماشین به زبان سطح بالاتر (کد اسمبلی ) و ترجمه آن است که در این صورت شما شاهد میلیون ها خط کد اسمبلی بوده که شاید برای بسیاری قابل فهم و درک نباشد در واقع این کار عکس Assembler کردن و به نوعی مهندسی معکوس بحساب می آید .امروزه دی اسمبلر های مختلفی اعم از Shareware یا freeware وجود دارند اما میتوان در این عرصه از بزرگ ترین Disassembler حال حاضر نام برد که شاید هیچ دی اسمبلر دیگری را نمیوان از نظر امکانات با آن مقایسه کرد و آن محصولی تجاری با نام IDA Pro است که به طرزی ماهرانه به استفاده از پایگاه داده برنامه و API های آن قابلیت تحلیل سفارشی را برای کاربر محیا می سازد.

بیشتر بخوانید: github چیست

۳-استفاده از یک Decompiler

 در واقع Decompiler ها برنامه هایی هستند که عمل معکوس کامپایلر ها را انجام میدهند و کد ماشین یا کد اسمبلی میانی را به کد سطح بالا تبدیل می نمایند و هدف انها ایجاد فایلی حاوی اطلاعاتی است که توسط کامپیوتر قابل خواندن و در محله بعدی ترجمه این فایل به زبان قابل فهم توسط انسان است.

هدف از عمل Decompile به میزبان دسترسی اطلاعات در کد عرضه شده که در حال Decompile شدن است بستگی دارد و پیچیدگی در تحلیل کارایی آن وابسته به عواملی چون کد بایت به کار رفته در  ماشین های مجازی شامل metadata  با سطح بالایی از خصیصه ها است.

REC نام نرم افزاری است که عمل Decompile کردن به طور وسیع در سطوح پایین را انجام می دهد.

راههای جلوگیری از مهندسی معکوس نرم افزار چیست ؟

ابتدا بد نیست که به عنوان نویسنده این مطلب در بلاگ ایران هاست خدمت شما خواننده گرامی عرض کنم که تقریبا میتوان گفت در این زمینه هیچ راهکاری مطمئن و تضمین شده وجود ندارد و همانطور که همواره cracker های بزرگ و گروه های بزرگ به عنوان شعار خود بیان داشته اند:

“Nothing is uncrackable” یا هیچ چیز (سیستم نرم افزاری) غیرقابل کرک کردن نیست

در اینجا فقط برای آشنایی شما چندین روش که میتواند پروسه مهندسی معکوس نرم افزار شما را کمی به تاخییر بیاندازد و یا فهم آنرا برای کرکر های تازه کار کمی مشکل سازد را بیان خواهم کرد:

استفاده از روش های Anti-Debugging

همواره از debugg کردن برنامه خود که حالا در اینجا SoftICE  مثال زده شده جلوگیری بعمل آورید و یا حداقل این پروسس را کمی به تاخییر بیاندازید.

به عنوان مثال میتوان نصب بودن Display Driver های SoftICE را توسط API Function ها چک کرده و بدین صورت debugg کردن برنامه خود و تحلیل و آنالیز آنرا دچار اختلال سازید.

لازم به ذکر است امروزه debugger های دیگری و روش های مقابله گوناگون برای با آنها در این عرصه معرفی شده است. مانند ollydbg و روش Buffer overflows در مقابل این Debugger

در آخر باید توجه داشته باشید که میتوانید از همه ی روش های گفته شده در مهندسی معکوس استفاده کرده و برنامه خود را به چالش بکشید و فراموش نکنید هر چقدر که شما برای ایمن تر کردن نرم افزار خود تلاش نمایید ، کار را برای کرکر ها سخت تر خواهید کرد. امیدواریم با خواندن این مقاله با مفهوم مهندسی معکوس نرم افزار و در برنامه نویسی آشنا شده باشید.

خروج از نسخه موبایل