نمایش نتایج: از 1 به 1 از 1

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

906
  1. بالا | پست 1

    عنوان کاربر
    کاربر فعال
    تاریخ عضویت
    Jun 2015
    شماره عضویت
    17397
    نوشته ها
    458
    تشکـر
    279
    تشکر شده 591 بار در 267 پست
    میزان امتیاز
    9

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

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

    معنای Reverse Engineering به فارسی مهندسی معکوس هست و همانطور که از معنای آن مشخص هست ، این علم طرف مقابل مهندسی نرم افزار می باشد. در واقع مهندسی نرم افزار و مهندسی معکوس دو روی یک سکه هستند. برای درک بهتر این مطلب، موضوع ر بازتر می کنیم:
    فرض کنیم که نتیجه نهایی کار یک برنامه نویس (یا همان مهندس نرم افزار) یک فایل exe هست که با اجرای آن یک سری محاسبات انجام می شود. به عنوان مثال این برنامه عددی را از شما می گیرد و با انجام محاسباتی، تغییراتی بر روی آن عدد اعمال می کند و نتیجه را به شما نشان می دهد. تمامی این کارها در پشت پرده انجام می شود و شما فقط عددی را به برنامه می دهید و بلافاصله نتیجه ای می بینید. ولی نحوه رسیدن به این نتیجه را نمی بینید. حال شما می خواهید با طریقه انجام محاسبات و نحوه رسیدن به نتیجه آشنا شوید. اولین راه برای آشنایی با نحوه انجام محاسبات این برنامه داشتن Source Code1 آن است. اما در خیلی از موارد شما سورس کد برنامه ها را در اختیار ندارید. تنها چیزی که برای شما موجود هست همان فایل exe و بقیه فایل های جانبی مربوط به برنامه می باشد.شاید در اولین نگاه فکر کنیم که آشنایی با نحوه انجام محاسبات یک برنامه بدون داشتن سورس کد آن غیر ممکن باشد. ولی با استفاده از علم Reverse Engineering این کار غیر ممکن نیست و ما می توانیم بدون داشتن سورس کد برنامه و یا اطلاعات دقیقی در رابطه با طراحی آن به مراحل طراحی و کد نویسی برنامه پی ببریم و با طریقه انجام محاسبات آن آشنا شویم.تعریف زیر یک تعریف ابتدایی از Reverse Engineering هست. وقتی به بخش رابطه بین Reverse Engineering و Assembly برسیم مفهوم دقیق تری از مهندسی معکوس بیان می کنیم :

    Reverse Engineering علمی است که توسط آن می توان بدون داشتن سورس کد یک برنامه به نحوه انجام محاسبات آن برنامه پی برد.

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

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

    کاربرد مهندسی معکوس در نرم افزار :

    سازمان دهی مجدد و تغییر دادن در یک نرم افزار موجود بدون اخلال در کار آن نرم افزار از دلایل عمده استفاده از مهندسی معکوس در صنعت نرم افزار است.

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

    در عین حال هزینه مهندسی معکوس ، معمولاً از ایجاد یک نرم افزار جدید خیلی کمتر است و همچنین در ایجاد یک نرم افزار جدید ، مخاطرات زیادی از جمله تغییر کادر برنامه نویسی ، و خطاهای جدید وجود دارد که این موارد تمایل به استفاده از مهندسی معکوس را به شدت افزایش می دهد.

    همچنین گاهی برای آن که یک گروه کاری دستاوردهای گر.وه کاری را که قبلاً ر.وی یک زمینه یا یک نرم افزار کار کرده اند ، متوجه شوند و بتوانند آن را بهبود داده و ارتقا ببخشند ، به این روش ها نیاز است . در این رابطه می توان به کار افراد بر روی پروژه های open source مثل develop کردن Samba یا Open Office اشاره کرد.


    روند اصلی کار :

    ابتدا فرض می کنیم که یک برنامه داریم که می خواهیم آن را معکوس کنیم در این میان، نخستین مرحله انجام source code translation است که به معنای تبدیل کد از یک زبان حتی زبان ماشین به زبان برنامه نویسی دیگر است که خود این کار نیز می بایست توسط برنامه تخصصی در این زمینه صورت پذیرد، زیرا تبدیل کد های بسیار بلند برای انسان کار مشکلی است و همچنین میزان اشتباه انسان دائماً زیاد تر می شود ( برخی از نرم افزار ها از هزاران یا صدها هزار سطر برنامه نویسی تشکیل شده اند و در برنامه هایی از جمله سیستم عاملها ، از میلیون ها سطر برنامه نویسی استفاده شده است) پس از این مرحله source code به دست آمده توسط انسان یا برنامه مورد تحلیل قرار گرفته و اطلاعات لازم از آن اسخرتاج شده و در صورت لزوم تغییراتی در ساختار برنامه داده میشود

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

    1. Hex Editor


    2. Debugger

    3. Disassembler


    4. Decompiler

    مفهوم مهندسی معكوس

    به هر گونه تلاش و فعالیت در راستای رسیدن از مراحل بالاتر طراحی و تولید به یك یا چند مرحله پایین تر، مهندسی معكوس گویند. این مفهوم در تمامی شاخه ها و زمینه های مهندسی از جمله نرم افزار و سخت افزار مطرح است. برای مثال دستیابی به ایده ها و روش های تولید یك محصول، از نمونه محصول نهایی نمونه ای از مهندسی معكوس است. یكی از اهداف مهندسی معكوس، شناسایی اجزای سازنده یك محصول و روابط بین آنهاست كه گاهی از آن اجزا برای ساخت یك محصول جدید نیز بهره گرفته می شود.گاهی نیز به منظور ایجاد تغییرات در سیستمی است كه طرح و اجزای اولیه آن در دسترس نیست. این كار كه به منظور مطابقت سیستم جدید با خواسته ها و نیازهای جدید صورت می گیرد، مهندسی دوباره(Reengineering) نیز نامیده می شود. همچنین با این كار می توان مشكلات موجود در یك سیستم را ردیابی و بررسی كرد: طی بررسی یك سیستم می توان به مستندسازی آن سیستم نیز پرداخت تا با ایجاد درك بهتر از سیستم در جهت بهبود آن گام برداشت.البته باید توجه داشت كه به كارگیری فنون مهندسی معكوس در هر رشته ای، دشواری ها و مشكلات خاص خود را دارد و به ابزار و امكانات خاصی نیاز دارد و گاهی با وجود كامل بودن ابزار و امكانات ممكن است نتیجه مطلوب نهایی حاصل نشود. بنابراین در به كارگیری این فنون باید تمامی هزینه ها و زمان مصرفی و نتیجه نهایی در نظر گرفته شوند. به عبارتی باید توجه داشت كه میزان هزینه مورد نظر در مقابل دسترسی به چه هدفی صرف می شود.در ادامه تلاش خواهیم كرد كه به چند مورد از كاربردهای مهندسی معكوس در شاخه نرم افزار اشاره ای كوتاه داشته باشیم تا هدف از این شاخه از علم رایانه نیز تا حدی روش شود.

    كشف رمزها و كدها

    باید توجه داشت كه از هر ابزاری می توان در راه خوب یا بد استفاده كرد. این كه شخص از مهارت خود و ابزارهای موجود استفاده نادرست كند، خود مسوول آن كار خواهد بود. معمولا كشف كدها یا شكستن رمز، ذهن را به سمت اعمال غیرقانونی می برد. كشف كدها و رمزها و كدهای یك نرم افزار بانك از جمله این موارد است. اما شكستن رمز همیشه بد و غیرقانونی نیست. اغلب اطلاعات رد و بدل شده بین مجرمان نیز رمزگذاری می شود و برای جلوگیری از فعالیت آنها، پلیس باید اطلاعات به دست آمده از آنها را كشف رمز كند. باید توجه داشت كه معمولا عمل رمزگشایی با استفاده از كلید صورت می گیرد و در صورت در دسترس نبودن كلید، ناچار به شكستن رمز یا كشف رمز هستیم. بنابراین خوب است در به كارگیری این اصطلاحات دقت كنیم.معمولا در شكستن رمزها از تكنیك های مهندسی معكوس استفاده می شود. بدون استفاده از این تكنیك ها اگر بخواهیم اقدام به كشف رمز كنیم،چاره ای جز حدس، آزمون و خطا و یا بررسی كلیه حالت های ممكن (Brute force) نخواهیم داشت كه كار بس زمان گیر، دشوار و طاقت فرساست.

    مبارزه با ویروس ها

    مبارزه با ویروس ها و كشف نرم افزارهای مخرب، از دیگر كاربردهای مهندسی معكوس است. معمولا نویسندگان ویروس ها و تولیدكنندگان نرم افزارهای مخرب از زبان های سطح پایین و اغلب از زبان اسمبلی استفاده می كنند. دلیل این امر نیز آن است كه اولا ویروس ها قصد دارند به نقاطی از سیستم دسترسی پیدا كنند كه شاید زبان های سطح با امكان دستیابی به آن را نداشته باشند. در ثانی می خواهند تا جای ممكن اندازه ویروس كوچك بوده و سرعت اجرای بالایی داشته باشد. پس از نوشتن ویروس آن را به كد ماشین تبدیل كرده و اجرا می كنند. حال برای این كه بتوان از كاركرد آن ویروس مطلع شده و جلوی فعالیت آن را بگیریم، باید با استفاده از تكنیك های مهندسی معكوس، به كد آن دسترسی پیدا كنیم. در طراحی نرم افزارهای ضدویروس، با استفاده از تكنیك های گفته شده، به نشانه های مختص هر ویروس پی برده می شود و با توجه به طریقه عمل آن ویروس، راه های بازگردانی تغییرات طراحی شده و در نهایت راه از بین بردن آن ویروس تعیین می شود.

    تغییر در كار یا ظاهر نرم افزار

    ممكن است نرم افزاری در اختیار داشته باشیم كه كدهای برنامه نویسی آن در دسترس ما نباشد و بخواهیم تغییركوچكی در روند اجرای برنامه اعمال كنیم. همچنین ممكن است بخواهیم تغییری در ظاهر برنامه ایجاد كنیم. حتی برخی اوقات لازم است قابلیت های جدیدی به یك نرم افزار اضافه شود و یا اشكالات موجود در آن رفع شوند. در كلیه این موارد نیز جز تكنیك های مهندسی معكوس، راه دیگری نخواهیم داشت. اغلب این مسایل در مواقعی رخ می دهد كه كد برنامه در دسترس نبوده و شركت تولیدكننده نرم افزار نیز دیگر از آن پشتیبانی نمی كند.یكی از این مشكلات، مشكل سال 2000 (Y2K) بود كه شاید آن را به خاطر داشته باشید. این مشكل با آغاز هزار جدید به وجود آمد و در آن زمان بسیاری از سازمان ها و كاربران در حال استفاده از نرم افزارهایی بودند كه شاید سال ها با آن كار كرده بودند و مشكلات آن را رفع كرده و اطلاعات زیادی در آنها جمع آوری كرده بودند. بسیاری از این نرم افزارها به علت آن كه قدیمی شده بودند، دیگر از جانب شركت تولیدكننده، پشتیبانی نمی شدند و یا شركت ها به طور كامل منحل شده بودند. اما همچنان برای آن سازمان پركاربرد بودند. با مطرح شدن مشكل سال 2000، شركت ها و سازمان های زیادی بار مالی زیادی را برای رفع این مشكل با استفاده از تكنیك های مهندسی معكوس، متحمل شدند.


    طراحی مجدد

    یكی از كاربردها و زمینه های فعالیت برای مهندسی معكوس كه بسیاری مفید است، طراحی مجدد یك نرم افزار بر اساس یك نمونه موجود است. این كار معمولا به دلایل زیادی، از جمله تغییر سیستم عامل، صورت می گیرد و كاری بسیار پیچیده و دقیق است كه معمولا به صورت كار گروهی و توسط شركت های بزرگ انجام می شود.مراحل این كار كه به دو قسمت مهندسی معكوس و مهندسی مستقیم (Forward Engineering)تقسیم می شود، به این صورت است كه ابتدا كلیه ایده ها و روش های پیاده سازی نرم افزار مورد نظر تشخیص داده شده و سپس با توجه به اطلاعات به دست آمده، نرم افزار جدیدی طراحی و پیاده سازی می شود. شاید این یكی از دشوارترین و مفیدترین زمینه های كار در مهندسی معكوس باشد.


    مستندسازی

    برای برنامه ها و یا توابع كتابخانه ای كه بدون كد برنامه نویسی عرضه می شودند معمولا مستنداتی نیز وجود ندارد. مانند توابع محلی ویندوزNT كه شامل چندین هزار تابع است كه برای آنها جز چند صفحه اطلاعات ابتدایی، مستنداتی از سوی شركت سازنده یعنی مایكروسافت ارایه نشده است. برای مستندسازی این گونه برنامه ها یا توابع نیز، تكنیك های مهندسی معكوس چاره ساز خواهند بود.

    Crack

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

    مهندسی معکوس فرایند اکتشاف فن آوری‌های بکار رفته در یک دستگاه، شی و یا سیستم از طریق تحلیل ساختار، عملکرد و وظیفه آن می‌باشد. معمولاً از این فرایند برای دست یابی به (برای مثال یک دستگاه مکانیکی، قطعه الکترونیکی و یا برنامه نرم‌افزاری) و تحلیل جزییات نحوه عملکرد آن در نگهداری یا ساخت یک دستگاه یا برنامه مشابه استفاده می‌شود. حاصل این فرایند مشابه کپی کردن یک چیز از روی اصل آن می‌باشد.درک سیستم نرم‌افزاری بر هر نوع تغییر مقدم است. فرآیند درک، مقدار زیادی از کل زمان صرف شده را در اِعمال تغییر می‌گیرد. نگهدارندگان دلایلی از جمله مستندات ناصحیح یا قدیمی، نبود مستندات، پیچیدگی سیستم و عدم شناخت کافی از قلمرو را علت فقدان درک صحیح از سیستم می‌دانند. راه تسهیل این مسایل، خلاصه کردن اطلاعات مربوط به سیستم (مثل تبین مشخصات و طرح) از طریق کد منبع است، به‌شکلی که درک آن‌را بالا برد.مهندسی معکوس تکنیکی است که می‌توان از آن برای این کار استفاده مهندسی معکوس به تنهایی منجر به تغییر در برنامه نمی‌شود، بلکه فقط راه را برای اجرای آسان‌تر تغییراتِ مطلوب هموار می‌نماید. تغییرات با استفاده از فنونی چون مهندسی پیشرو، بازسازی، و مهندسی مجدد پیاده‌سازی می‌شوند.هدف از مهندسی معکوس تسهیل در اِعمال تغییر از طریق فهمیدن سیستم نرم‌افزاری با توجه به ماهیت کار، چگونگی کار و نمایش معماری آن است. به‌عنوان اهداف پیگیریِ این مقصود می‌توان به ترمیم اطلاعات از دست رفته، تسهیل جابه‌جایی بین بسترها، بهبود و (یا) تهیهٔ مستندات جدید، استخراج عناصر قابل استفادهٔ مجدد، کاهش تلاش برای نگهداری، مقابله با پیچیدگی، کشف عوارض جانبی، کمک به انتقال به محیط CASE و ایجاد محصولات مشابه یا رقابتی اشاره کرد. از دیگر مزایای مهندسی معکوس کاهش هزینه‌ها و سریع آماده شدن نرم افزار است.
    امضای ایشان
    ᓄ ـنابع בر پاییـטּ هر پست בرج شـבه است
    امام صادق سلام الله عليه : مَن عَيَّرَ مُؤمِناً بِذَنبٍ لَم يَمُت حَتّى يَركَبَهُ
    كسى كهـ ᓄـؤـᓄـنى را براى گناهــى سرزنش كند، نـᓄـيرد تا خودش آטּ گناهـ را ᓄـرتكب شود ᓄـيزاטּ الحكـᓄـة: ح 14854
    اوجتنهــــــــــــــــــــای ــیـ ...




  2. کاربران زیر از CÆSAR بابت این پست مفید تشکر کرده اند


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. درمان مشکل جنسی من چیست؟
    توسط hsaramad در انجمن تجاوز یا سوء رفتار جنسی
    پاسخ: 15
    آخرين نوشته: 08-22-2015, 12:32 PM
  2. دلایل سرد شدن مردان در رابطه جنسی چیست؟
    توسط mahastey در انجمن سرد شدن رابطه
    پاسخ: 0
    آخرين نوشته: 07-13-2015, 07:34 PM
  3. *آموزش رابطه جنسی برای تازه عروس ها*
    توسط farimah در انجمن روانشناسی ازدواج
    پاسخ: 5
    آخرين نوشته: 04-09-2015, 07:14 PM
  4. چطوری به دوس پسرم پیشنهاد رابطه جنسی بدم؟
    توسط دیوونه در انجمن روابط دختر و پسر
    پاسخ: 60
    آخرين نوشته: 09-28-2014, 05:52 PM
  5. روانشناسی تکاملی چیست؟
    توسط R e z a در انجمن رویکـردها و درمان های روانشناسی
    پاسخ: 0
    آخرين نوشته: 09-30-2013, 12:59 AM

لیست کاربران دعوت شده به این موضوع

کلمات کلیدی این موضوع

© تمامی حقوق برای مشاورکو محفوظ بوده و هرگونه کپی برداري از محتوای انجمن پيگرد قانونی دارد