محبوبترینها
قیمت انواع دستگاه تصفیه آب خانگی در ایران
نمایش جنگ دینامیت شو در تهران [از بیوگرافی میلاد صالح پور تا خرید بلیط]
9 روش جرم گیری ماشین لباسشویی سامسونگ برای از بین بردن بوی بد
ساندویچ پانل: بهترین گزینه برای ساخت و ساز سریع
خرید بیمه، استعلام و مقایسه انواع بیمه درمان ✅?
پروازهای مشهد به دبی چه زمانی ارزان میشوند؟
تجربه غذاهای فرانسوی در قلب پاریس بهترین رستورانها و کافهها
دلایل زنگ زدن فلزات و روش های جلوگیری از آن
خرید بلیط چارتر هواپیمایی ماهان _ ماهان گشت
سیگنال در ترید چیست؟ بررسی انواع سیگنال در ترید
بهترین هدیه تولد برای متولدین زمستان: هدیههای کاربردی برای روزهای سرد
صفحه اول
آرشیو مطالب
ورود/عضویت
هواشناسی
قیمت طلا سکه و ارز
قیمت خودرو
مطالب در سایت شما
تبادل لینک
ارتباط با ما
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
آمار وبسایت
تعداد کل بازدیدها :
1831513837
مهندسي معكوس در دنياي نرمافزار
واضح آرشیو وب فارسی:پی سی سیتی: مهندسي معكوس در دنياي نرمافزار
http://www.jamejamonline.ir/Media/images/1387/06/03/100947272281.jpg
در مقالات پيشين به اختصار درباره مهندسي معكوس صحبت كرديم. خوب است كمي بيشتر به اين مساله بپردازيم تا با شناخت بهتر زمينههاي كاربرد آن بتوانيم به فعاليت در آن رابطه پرداخته و دانش خود را در جاي مناسب بهكار گيريم.
مفهوم مهندسي معكوس
به هر گونه تلاش و فعاليت در راستاي رسيدن از مراحل بالاتر طراحي و توليد به يك يا چند مرحله پايينتر، مهندسي معكوس گويند. اين مفهوم در تمامي شاخهها و زمينههاي مهندسي از جمله نرمافزار و سختافزار مطرح است. براي مثال دستيابي به ايدهها و روشهاي توليد يك محصول، از نمونه محصول نهايي نمونهاي از مهندسي معكوس است.
يكي از اهداف مهندسي معكوس، شناسايي اجزاي سازنده يك محصول و روابط بين آنهاست كه گاهي از آن اجزا براي ساخت يك محصول جديد نيز بهره گرفته ميشود.
گاهي نيز بهمنظور ايجاد تغييرات در سيستمي است كه طرح و اجزاي اوليه آن در دسترس نيست. اين كار كه بهمنظور مطابقت سيستم جديد با خواستهها و نيازهاي جديد صورت ميگيرد، مهندسي دوباره(Reengineering) نيز ناميده ميشود. همچنين با اين كار ميتوان مشكلات موجود در يك سيستم را رديابي و بررسي كرد: طي بررسي يك سيستم ميتوان به مستندسازي آن سيستم نيز پرداخت تا با ايجاد درك بهتر از سيستم در جهت بهبود آن گام برداشت.
البته بايد توجه داشت كه بهكارگيري فنون مهندسي معكوس در هر رشتهاي، دشواريها و مشكلات خاص خود را دارد و به ابزار و امكانات خاصي نياز دارد و گاهي با وجود كامل بودن ابزار و امكانات ممكن است نتيجه مطلوب نهايي حاصل نشود. بنابراين در بهكارگيري اين فنون بايد تمامي هزينهها و زمان مصرفي و نتيجه نهايي در نظر گرفته شوند. بهعبارتي بايد توجه داشت كه ميزان هزينه مورد نظر در مقابل دسترسي به چه هدفي صرف ميشود.
در ادامه تلاش خواهيم كرد كه به چند مورد از كاربردهاي مهندسي معكوس در شاخه نرمافزار اشارهاي كوتاه داشته باشيم تا هدف از اين شاخه از علم رايانه نيز تا حدي روش شود.
كشف رمزها و كدها
بايد توجه داشت كه از هر ابزاري ميتوان در راه خوب يا بد استفاده كرد. اين كه شخص از مهارت خود و ابزارهاي موجود استفاده نادرست كند، خود مسوول آن كار خواهد بود.
معمولا كشف كدها يا شكستن رمز، ذهن را به سمت اعمال غيرقانوني ميبرد. كشف كدها و رمزها و كدهاي يك نرمافزار بانك از جمله اين موارد است. اما شكستن رمز هميشه بد و غيرقانوني نيست. اغلب اطلاعات رد و بدل شده بين مجرمان نيز رمزگذاري ميشود و براي جلوگيري از فعاليت آنها، پليس بايد اطلاعات بهدست آمده از آنها را كشف رمز كند. بايد توجه داشت كه معمولا عمل رمزگشايي با استفاده از كليد صورت ميگيرد و در صورت در دسترس نبودن كليد، ناچار به شكستن رمز يا كشف رمز هستيم. بنابراين خوب است در بهكارگيري اين اصطلاحات دقت كنيم.
معمولا در شكستن رمزها از تكنيكهاي مهندسي معكوس استفاده ميشود. بدون استفاده از اين تكنيكها اگر بخواهيم اقدام به كشف رمز كنيم،چارهاي جز حدس، آزمون و خطا و يا بررسي كليه حالتهاي ممكن (Brute force) نخواهيم داشت كه كار بس زمانگير، دشوار و طاقتفرساست.
مبارزه با ويروسها
مبارزه با ويروسها و كشف نرمافزارهاي مخرب، از ديگر كاربردهاي مهندسي معكوس است. معمولا نويسندگان ويروسها و توليدكنندگان نرمافزارهاي مخرب از زبانهاي سطح پايين و اغلب از زبان اسمبلي استفاده ميكنند. دليل اين امر نيز آن است كه اولا ويروسها قصد دارند به نقاطي از سيستم دسترسي پيدا كنند كه شايد زبانهاي سطح با امكان دستيابي به آن را نداشته باشند. در ثاني ميخواهند تا جاي ممكن اندازه ويروس كوچك بوده و سرعت اجراي بالايي داشته باشد. پس از نوشتن ويروس آن را به كد ماشين تبديل كرده و اجرا ميكنند. حال براي اينكه بتوان از كاركرد آن ويروس مطلع شده و جلوي فعاليت آن را بگيريم، بايد با استفاده از تكنيكهاي مهندسي معكوس، به كد آن دسترسي پيدا كنيم. در طراحي نرمافزارهاي ضدويروس، با استفاده از تكنيكهاي گفته شده، به نشانههاي مختص هر ويروس پي برده ميشود و با توجه به طريقه عمل آن ويروس، راههاي بازگرداني تغييرات طراحي شده و در نهايت راه از بين بردن آن ويروس تعيين ميشود.
تغيير در كار يا ظاهر نرمافزار
ممكن است نرمافزاري در اختيار داشته باشيم كه كدهاي برنامهنويسي آن در دسترس ما نباشد و بخواهيم تغييركوچكي در روند اجراي برنامه اعمال كنيم. همچنين ممكن است بخواهيم تغييري در ظاهر برنامه ايجاد كنيم. حتي برخي اوقات لازم است قابليتهاي جديدي به يك نرمافزار اضافه شود و يا اشكالات موجود در آن رفع شوند. در كليه اين موارد نيز جز تكنيكهاي مهندسي معكوس، راه ديگري نخواهيم داشت. اغلب اين مسايل در مواقعي رخ ميدهد كه كد برنامه در دسترس نبوده و شركت توليدكننده نرم افزار نيز ديگر از آن پشتيباني نميكند.
يكي از اين مشكلات، مشكل سال2000 (Y2K) بود كه شايد آن را بهخاطر داشته باشيد. اين مشكل با آغاز هزار جديد بهوجود آمد و در آن زمان بسياري از سازمانها و كاربران در حال استفاده از نرمافزارهايي بودند كه شايد سالها با آن كار كرده بودند و مشكلات آن را رفع كرده و اطلاعات زيادي در آنها جمعآوري كرده بودند. بسياري از اين نرمافزارها بهعلت آن كه قديمي شده بودند، ديگر از جانب شركت توليدكننده، پشتيباني نميشدند و يا شركتها بهطور كامل منحل شده بودند. اما همچنان براي آن سازمان پركاربرد بودند. با مطرح شدن مشكل سال 2000، شركتها و سازمانهاي زيادي بار مالي زيادي را براي رفع اين مشكل با استفاده از تكنيكهاي مهندسي معكوس، متحمل شدند.
طراحي مجدد
يكي از كاربردها و زمينههاي فعاليت براي مهندسي معكوس كه بسياري مفيد است، طراحي مجدد يك نرمافزار بر اساس يك نمونه موجود است. اين كار معمولا بهدلايل زيادي، از جمله تغيير سيستم عامل، صورت ميگيرد و كاري بسيار پيچيده و دقيق است كه معمولا بهصورت كار گروهي و توسط شركتهاي بزرگ انجام ميشود.
مراحل اين كار كه به دو قسمت مهندسي معكوس و مهندسي مستقيم (Forward Engineering)تقسيم ميشود، به اين صورت است كه ابتدا كليه ايدهها و روشهاي پيادهسازي نرمافزار مورد نظر تشخيص داده شده و سپس با توجه به اطلاعات بهدست آمده، نرمافزار جديدي طراحي و پيادهسازي ميشود. شايد اين يكي از دشوارترين و مفيدترين زمينههاي كار در مهندسي معكوس باشد.
مستندسازي
براي برنامهها و يا توابع كتابخانهاي كه بدون كد برنامهنويسي عرضه ميشودند معمولا مستنداتي نيز وجود ندارد. مانند توابع محلي ويندوزNT كه شامل چندين هزار تابع است كه براي آنها جز چند صفحه اطلاعات ابتدايي، مستنداتي از سوي شركت سازنده يعني مايكروسافت ارايه نشده است. براي مستندسازي اينگونه برنامهها يا توابع نيز، تكنيكهاي مهندسي معكوس چارهساز خواهند بود.
Crack
يكي از كاربردهاي غيرقانوني مهندسي معكوس، كرككردن يك نرمافزار است. معمولا شركتهاي توليدكنده نرمافزار، كل امكانات مربوط به برنامه را در بسته نرمافزاري قرار ميدهند.
اما براي مجبور كردن كاربران به خريد برنامه، براي آن محدوديت زماني ميگذارند. افراد بسياري هستند كه با نفوذ به اين نرمافزارها، محدوديت آن را برداشته و يا كد توليد و تشخيص كليد را از درون برنامه استخراج ميكنند و در اختيار ديگران قرار ميدهند.
به اين ترتيب كاربران بدون پرداخت هزينه، از نرمافزار مورد نظر براي مدت زمان نامحدود استفاده ميكنند. البته همه جاي دنيا افرادي وجود دارند كه براي حمايت از توليدكنندگان نرمافزار از نسخههاي كركشده استفاده نكرده و اصل آن را خريداري ميكنند. مسلما كاربردهاي مهندسي معكوس به همين چند مورد خلاصه نميشود و با توجه به شرايط و زمانهاي مختلف ميتواند كاربردهاي ديگر و حتي كاربردهاي ديگري نيز داشته باشد.
پارسا ستودهنيا
كسب اطلاعات،اساسيترينگام در مهندسي معكوس
http://www.jamejamonline.ir/Media/images/1387/06/03/100947272361.jpg
همانطور كه براي طراحي و پيادهسازي يك نرمافزار گامهاي مشخص و سلسله مراتب وجود دارد، مهندسي معكوس نيز بايد با برداشتن يك قدم آغاز شود و آن قدم مهم و اساسي چيزي نيست جز جمعآوري اطلاعات اوليه.
زبان و كامپايلر
پيش از هر چيزي، لازم است بدانيم، نرمافزاري را كه ميخواهيم بررسي كنيم با چه زباني نوشته شده است و با چه كامپايلري به فايل اجرايي تبديل شده است. معمولا كامپايلرها با روشهاي بهخصوصي اقدام به ساخت فايلهاي اجرايي ميكنند. با توجه به آن روشها كه در همه فايلهاي اجرايي نيز يكسان است ميتوان فهميد كه آن برنامه با چه كارهايي ساخته شده است. البته بهدليل آن كه شناخت كامپايلرها و طريقه ساخت فايلهاي اجرايي توسط هر كدام از آنها نيز مستلزم داشتن آگاهي و شناخت كافي از آنهاست، اين كار با استفاده نرمافزارهاي ويژهاي انجام ميشود. برنامههاي بسياري هستند كه پس از اجراي آنها و انتخاب فايل اجرايي دلخواه، اطلاعات كاملي در مورد زبان برنامهنويسي، كامپايلر مورد نظر و حتي نگارش كامپايلر و اطلاعات مفيد ديگر را در اختيارتان قرار ميدهد. خوب است بدانيم كه شناسايي نوع كامپايلر ميتواند استراتژي ما را در مراحل بعد، كاملا تحت تاثير قرار دهد. زيرا معمولا هر كامپايلر ساختار خاصي را براي مديريت و سازماندهي كدها، دادهها و منابع در فايل اجرايي خاص خود در نظر ميگيرد كه با كامپايلرهاي ديگر كاملا متفاوت است.
فايلهاي وابسته
بسياري از نرمافزارها و فايلهاي اجرايي، بههنگام اجرا از كتابخانهها و فايلهايي استفاده ميكنند كه معمولا اين فايلها با پسوند.dll شناخته ميشوند. گاهي لازم است بدانيم كه هرdll شامل چه توابعي است و يك فايل اجرايي در هنگام كار به كدام فايلها وابسته است و كداميك را فراخواني ميكند. نرمافزارهايي وجود دارند كه قادر هستند كليه فايلهاي مورد نياز يك برنامه در هنگام اجرا را بهصورت چند سطحي تشخيص دهند، به اين معنا كه اگر يك فايل وابسته، خود به فايل ديگري نيز وابسته بود، آن را هم شناسايي كنند.
منابع بهكار رفته
يكي از اجزاي مهم بهكار رفته در فايلهاي اجرايي، به منابع (Resources) معروف هستند كه در واقع دادههاي از پيش تعريفشده را براي برنامه نگهداري ميكنند. پنجرههاي از پيش تعريفشده، آيكونها، تصاوير گرافيكي موجود در برنامه، رشتههاي متني، فايلهاي صوتي و تصويري و ... از جمله منابع يك فايل اجرايي بهشمار ميروند. يك برنامهنويس ميتواند به هر تعداد و از نوع منبع به فايل ارجايي خود بيافزايد و در مهندسي معكوس ميتوان اين منابع را استخراج كرده يا تغيير داده و يا نمونه ديگري جايگزين كرد.
نرمافزارهاي ويژهاي هستند كه ميتوان با استفاده از آنها به منابع يك فايل اجرايي دسترسي پيدا كرد و آنها را مطابق ميل خود تغيير داد و يا آنها را از دل فايل اجرايي بيرون كشيد. با استفاده از همين برنامههاست كه ميتوان زبان منوها، پنجرههاي و محيط برنامه را بدون دسترسي داشتن به كد برنامه تغيير داد. انواع نرمافزارهاي فارسيساز با استفاده از همين تكنيكها طراحي ميشوند
Disassemblerها
هر برنامه، مستقل از زبان برنامهنويسي آن به كد ماشين تبديل ميشود. حال اگر بخواهيم كه ماشين را دوباره به كدهاي زبان برنامهنويسي تبديل كنيم، ممكن است اين كار امكانپذير نباشد. اما با توجه به اينكه هر دستور زبان ماشين معادل يك دستور زبان اسمبلي است، ميتوان هر برنامهاي را بهزبان اسمبلي برگرداند كه اين عمل را Disassemble يا عكس عمل اسمبل گويند. با اين كار، اگر شخص بهقدر كافي به زبان اسمبلي مسلط باشد، ميتواند هر تغييري در كد برنامه بدهد و مجددا آن را اسمبل كرده و فايل اجرايي جديد با اعمال تغييرات ايجاد كند. نرمافزارهاي توانمندي هستند كه ميتوانند علاوه بر عمل disassemble ، امكانات بسياري را براي اعمال تغييرات در فايل اجرايي در اختيار كاربران قرار دهند.
فعاليتهاي فايل اجرايي
بهعنوان اطلاعات اوليه، شايد لازم باشد كه بدانيم يك فايل اجرايي در زمان اجرا چه رفتاري از خود نشان ميدهد و فعاليت آن چگونه است. بهعنوان مثال چه ميزان حافظه اصلي را اشغال ميكند و چه ميزان از حافظه مجازي روي ديسك را به خود اختصاص ميدهد يا در زمان اجرا تا چه حد از توان پردازنده را در اختيار خود ميگيرد. اين اطلاعات و بسياري اطلاعات ديگر، از جمله مواردي هستند كه ميتوان در زمان اجرا، از يك فايل اجرايي كسب كرد. براي اين كار نيز نرمافزارهاي متنوعي وجود دارند. سادهترين ابزار موجود در اين زمينه Task Manager موجود در ويندوز است كه تا حدي، اطلاعات مفيدي در مورد برنامههاي در حال اجرا در اختيار كاربران قرار ميدهد.
ورودي و خروجي
بيشتر برنامهها عمل ورودي و خروجي روي فايل دارند. يعني يا از فايل خواند يا بر روي آن مينويسند. اطلاعات مربوط به اين فعاليتها نيز ممكن است در جايي لازم باشد.
نرمافزارهايي وجود دارند كه بهمحض اجراي يك برنامه، تمامي فعاليتهاي ورودي و خروجي مربوط به فايل آن را تحت نظارت و كنترل قرار ميدهند. با استفاده از اينگونه نرمافزارها ميتوان اطلاعات ارزشمندي در مورد اين نوع فعاليت فايلهاي اجرايي نيز كسب كرد.
فعاليت در رجيستري و شبكه
دو نوع فعاليت ديگر وجود دارد كه در حوزههاي جداگانه بررسي ميشوند و ميتوانند اطلاعات خوبي در اختيار كار برقرار دهند و يكي تاثيرات كه يك فايل اجرايي در رجيستري ويندوز اعمال ميكند و ديگري ارتباطات و اتصالهايي كه برنامه با شبكه و اينترنت برقرار ميكند. در اين زمينهها نيز نرمافزارهايي وجود دارند كه كليه كارهاي يك برنامه را براي تغيير دادن رجيستري در نظر ميگيرد و ميتوان با بررسي آن به رفتارهاي فايل اجرايي پي برد. برنامههايي نيز تحت عنوان كليNetwork monitor هستند كه كليه اتصالها، نوع اتصال و پروتكل بهكار رفته در آن و ديگر جزييات مربوط به ارتباطات و شبكه را كنترل ميكنند.
ارتباطات سختافزاري
و بالاخره يك فايل اجرايي ممكن است در طول اجرا با سختافزارهاي مختلف و درگاهها، تبادل اطلاعات و ارسال و دريافت داده داشته باشد. ارتباط با درگاههاي سريال، موازي، USB و ... . ارسال اطلاعات به نمايشگر و تبادل اطلاعات با ديسكها و درايوها و ديگر لوازم جانبي رايانه از جمله مواردي هستند كه ميتوانند در بررسي رفتار يك فايل اجرايي و كسب اطلاعات اوليه در گام اول مهندسي معكوس موثر واقع شوند.
ضميمه كليك جام جم
این صفحه را در گوگل محبوب کنید
[ارسال شده از: پی سی سیتی]
[مشاهده در: www.p30city.net]
[تعداد بازديد از اين مطلب: 650]
-
گوناگون
پربازدیدترینها