دوست عزیز، به سایت علمی نخبگان جوان خوش آمدید

مشاهده این پیام به این معنی است که شما در سایت عضو نیستید، لطفا در صورت تمایل جهت عضویت در سایت علمی نخبگان جوان اینجا کلیک کنید.

توجه داشته باشید، در صورتی که عضو سایت نباشید نمی توانید از تمامی امکانات و خدمات سایت استفاده کنید.
نمایش نتایج: از شماره 1 تا 2 , از مجموع 2

موضوع: مهندسی معکوس (Reverse Engineering)

  1. #1
    کاربر جدید
    رشته تحصیلی
    نرم افزار
    نوشته ها
    45
    ارسال تشکر
    132
    دریافت تشکر: 128
    قدرت امتیاز دهی
    0
    Array

    پیش فرض مهندسی معکوس (Reverse Engineering)

    بحث در مورد علم مهندسی معکوس از سال 1990 میلادی آغاز شده و در بعضی مجله های علمی مثل IEEE Software به صورت یک طبقه بندی علمی از آن صحبت میشود.
    آیا شما مهندسی معکوس را نادیده میگیرید؟

    فرض کنید شما نرم افزاری را توسعه داده و به فروش رسانده اید! آیا نمیخواهید دیگران به حقوق کپی (Copyright) شما احترام بگذارند؟ این بحث معمولا" از معانی منفی عبارت مهندسی معکوس به خصوص در صنعت نرم افزار سازی شروع میشود.

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

    - یافتن کدهای مخرب: تعدادی از تکنیکهای ویروس یابی از مهندسی معکوس برای دستیابی به ساختار و عملکرد این کدهای مخرب استفاده میکنند. به وسیله این تکنیکها نرم افزارهایی تولید میشود که برای مبارزه با ویروس های کامپیوتری مورد استفاده قرار میگیرد.
    - کشف خطاهای ذاتی (Bug) و نقص های غیر منتظره: حتی بهترین سیستمهای نرم افزاری میتواند دارای خطا باشد که با استفاده از مهندسی معکوس میتوان آنها را پیدا کرده و رفع نمود (Debug).

    نرم افزارهای سطح پایین
    این نوع نرم افزارها شامل ابزارهای توسعه از قبیل Compiler، Linker، Debugger، سیستم های عامل (Operating System) و زبان های برنامه نویسی سطح پایین مثل Assembly میباشد. در واقع لایه ای است که جداکننده توسعه دهندگان نرم افزار و برنامه های کاربردی از سخت افزار میباشد. اگر شخصی بخواهد در زمینه مهندسی معکوس مهارت به دست آورد باید فهم کاملی نسبت به نرم افزارهای سطح پایین داشته باشد.

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

    Compiler و Machine Code
    با توجه به اینکه CPU فقط قادر است کدهای ماشین را اجرا کند با استفاده از Compiler کدهای زبانهای سطح بالا به زبان ماشین تبدیل میشوند.
    زبانهایی مثل C++ و Pascal دارای این نوع Compiler هستند.
    Virtual Machine و Byte Code
    زبانهایی مانند Java دارای کامپایلری هستند که به جای Object Code (کدهایی که Compiler آنها را تولید میکند)، Byte Code تولید میکنند. Byte Code ها شبیه به Object Code ها هستند با این تفاوت که توسط یک برنامه (به جای CPU) Decode میشوند. به این برنامه Virtual Machine گفته میشود. یکی از مزایای این نوع برنامه ها مستقل بودن آنها از محیط اجرا میباشد. مبحث مهندسی معکوس در مورد Byte Code ها نسبت به کدهای ماشین کاملاً متفاوت بوده و در مقایسه با آن ساده تر میباشد.

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

    برای شروع، کار به دو بخش کلی تقسیم میگردد:
    1- System Level: داشتن دیدی کلی از تمام برنامه.
    2- Code Level: به دست آوردن اطلاعات کامل و جزیی روی قسمتی از کد برنامه.
    ابزارهای System Monitoring
    برای بخش System Level ابزارهایی نیاز است که به وسیله آنها اطلاعات کلی در مورد برنامه (فایل اجرایی) را در اختیار قرار میدهد که معمولاً این اطلاعات توسط سیستم عامل ایجاد میگردد برای مثال مشخص میگردد که نرم افزار با چه ابزاری توسعه داده شده یا با چه ابزاری Protect شده است.

    ابزارهای Code Level

    Disassembler
    ابزاری است که یک فایل اجرایی را دریافت نموده و یک فایل متنی که شامل کدهای زبان Assembly که مربوط به قسمتهای مختلف برنامه است را تولید میکند. Disassembler های پیشرفته یکی از ابزارهای کلیدی مهندسی معکوس به شمار میروند.
    Debugger
    Debugger برنامه ای است که به توسعه دهنده (Developer) اجازه می دهد برنامه را در حال اجرا مشاهده نماید. Debugger یکی از مهمترین ابزارهای مهندسی معکوس بوده که از یک Disassembler برای برگرداندن کدها به زبان اسمبلی استفاده مینماید.
    زمانیکه یک فایل اجرایی با استفاده از یک Debugger باز میشود حالت Register های CPU، محتویات حافظه و Stack های فعال قابل مشاهده هستند.
    ویژگی های مهم Debugger ها :

    Disassembler قدرتمند: یکی از ویژگیهای مهم و لازم برای هر Debugger بوده به طوریکه محتوای فایل اجرایی به وضوح قابل مشاهده میباشد. همچنین متدهای برنامه قابل تجزیه و تحلیل بوده و Trace کردن آنها ساده میشوند.
    Breakpoint های سخت افزاری و نرم افزاری: یکی دیگر از ویژگیهای مهم Debugger ها بوده و هر Debugger دارای این ویژگی میباشد. Breakpoint های نرم افزاری دستوراتی هستند که در زمان اجرا (Runtime) توسط Debugger به برنامه اضافه میشوند و باعث میشوند اجرای برنامه توسط پردازشگر متوقف شده و کنترل برنامه به Debugger سپرده میشود. Breakpoint های سخت افزاری یکی از قابلیتهای ویژه CPU بوده که به پردازشگر اجازه میدهد اجرای برنامه را متوقف کرده و کنترل آنرا به Debugger منتقل نماید و زمانی اتفاق می افتد که یک آدرس از حافظه مورد دسترسی قرار گیرد.

    دیدن Register ها و حافظه: یکی از قابلیتهای خوب Debugger ها دیدن Register ها و محتوای حافظه سیستم میباشد.
    اطلاعات Process : یکی از قابلیتهای بسیار مفید Debugger ها دیدن جزییات Process ها در حال Debug کردن میباشد. دیدن ماجول های قابل اجرا و یا Thread هایی که در حال اجرا هستند را امکان پذیر میسازد.

    انواع Debugger
    1- User Mode Debugger
    بیشتر Debugger ها از این نوع هستند. این نوع Debugger ها برنامه هایی هستند که به Process های دیگر متصل شده و کنترل آنرا در دست میگیرند. مزیت دیگر آنها نصب و استفاده آسان از آنها میباشد. از طرف دیگر User Mode Debugger ها فقط میتوانند با یک Process کار کنند و کدهای User Mode درون آن Process را ببینند. گاهی اوقات شما با استفاده از این نوع Debugger برنامه ای را باز میکنید که چندین Process را شامل میشود که به نوعی به هم متصل هستند. در اینطور موارد شما ممکن است ندانید کد مورد نظر شما در کدام Process اجرا میشود. User Mode Debugger ها معمولاً مشکل خاصی ایجاد نمیکنند مگر اینکه برنامه ای که در حال Debug شدن میباشد دارای مولفه های Kernel Mode باشد (همانند Device Driver). بعضی از این نوع Debugger ها عبارتند از :

    - OllyDbg
    این Debugger توسط Oleh Yuschuk ساخته شده که شاید یکی از بهترین ها در نوع خود باشد، این Debugger دارای یک Disassembler بسیار قدرتمند بوده که برای افرادی که در زمینه مهندسی معکوس در سطح مبتدی هستند بسیار مناسب میباشد. وجود Analyzer در این Debugger باعث میشود که حلقه های تکرار و شرطها (for، switchو ...) و همچنین پارامترهای متدها به راحتی قابل تشخیص باشد. OllyDbg دارای امکان patching نیز میباشد به این ترتیب که میتوان تغییراتی در فایل اجرایی ایجاد نموده و آنرا ذخیزه نمود. این ابزار کاملا رایگان بوده و از سایت http://home.t-online.de/home/Ollydbg قابل دریافت میباشد.

    - WinDbg

    یک Debugger رایگان بوده که سازنده آن شرکت Microsoft میباشد. در حالیکه تعدادی از ویژگیهای آن از طریق رابط کاربر قابل دسترسی هستند، دارای یک کنترلگر دستوری نیز میباشد. دارا ی یک Disassembler ضعیف بوده و امکانات دیگر آن نیز چندان برای کاربران ساده نیست.
    http://www.microsoft.com/whdc/devtoo...g/default.mspx




    - IDA Pro
    یک User Mode Debugger است که دارای Assembler بسیار قدرتمند و همچنین امکانات Debug فراوان میباشد و میتوان گفت از قدرتمندترین Debuggerها میباشد. این Debugger رایگان نبوده ولی میتوان از نسخه های Trial آن استفاده نمود.


    Decompiler
    Decompiler یک سطح بالاتر از Disassembler میباشد. Decompiler یک فایل اجرایی را به عنوان ورودی دریافت نموده و سعی میکند کد سطح بالا را از آن تولید کند. با توجه به اینکه فایل اجرایی با چه ابزاری تولید شده باشد معمولاً Decompile کردن آنها غیر ممکن است.
    "هزاران نفر برای باریدن باران دعا می‌کنند غافل از آنکه خداوند با کودکی است که چکمه‌هایش سوراخ است."

  2. 4 کاربر از پست مفید NANY_HAMIN سپاس کرده اند .


  3. #2
    کاربر جدید
    رشته تحصیلی
    کامپیوتر
    نوشته ها
    1
    ارسال تشکر
    0
    سپاس شده 1 در 1 پست
    قدرت امتیاز دهی
    0
    Array

    پیش فرض پاسخ : مهندسی معکوس (Reverse Engineering)

    لطفا اگه مطلبی در مورد cellular automata دارین ارسال کنید با تشکر

  4. کاربرانی که از پست مفید ali_ansari62 سپاس کرده اند.


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

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

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

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

  1. ریاضی - فنی مهندسی >> مهندسی شیمی
    توسط Geek در انجمن مقالات و جزوات مهندسی شیمی
    پاسخ ها: 0
    آخرين نوشته: 21st November 2009, 03:44 PM
  2. معرفی: معرفی رشته مهندسی عمران (کارشناسی)
    توسط engeneer_19 در انجمن مهندسی سواحل
    پاسخ ها: 0
    آخرين نوشته: 26th July 2009, 01:38 PM

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

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •