در این سری از آموزشها به معرفی مهندسی معکوس و روشهای اجرای آن میپردازیم:
قسمت اول: مهندسی معکوس چیست؟
قسمت دوم: مهندسی معکوس فایلهای پکیج اندروید (APK Files.)
قسمت سوم: روشهای مقابله با مهندسی معکوس فایلهای پکیج اندروید (APK Files.)
مهندسی معکوس (به انگلیسی: Reverse Engineering) به علمی گفته میشود که از پاسخ به سوال میرسند و در واقع فرآیند کشف اصول تکنولوژیکی یک دستگاه، شیئ یا یک سیستم میباشد که از طریق تجزیه و تحلیل ساختار و عملکرد آن حاصل میشود. در اکثر مواقع موضوع مورد بررسی یک دستگاه مکانیکی، الکتریکی، برنامه نرم افزاری یا یک ماده بیولوژیکی یا شیمیایی میباشد که بدون داشتن دانش قبلی و تنها با جداسازی اجزا و تجزیه و تحلیل شیوه عملکرد آن، سعی در ایجاد یک نمونه جدید از آن میگردد. مهندسی معکوس به طور عمده در استفادههای تجاری و نظامی به کار میرود و هدف آن استنباط پارامترهای طراحی یک محصول موجود بدون داشتن دانش کافی در زمینه تولید آن محصول و فقط با پیمودن فرآیند معکوس و به کارگیری تکنیکهای مشابه میباشد.
دلایل استفاده از مهندسی معکوس
- نوسازی نرم افزار: مهندسی معکوس به صورت کلی برای درک وضعیت موجود برنامه مورد نیاز است. این عمل به منظور برآورد درست کوشش های مورد نیاز برای مهاجرت اطلاعات سیستم به یک وضعیت دلخواه است.
- نگهداری نرم افزار: مهندسی معکوس نرم افزار می تواند مستندات لازم را برای درک وضعیت فعلی نرم افزار سیستم فراهم کند.
- آنالیز محصول : برای بررسی اینکه یک محصول چه گونه کار می کند،از چه اجزایی تشکیل شده،برآورد هزینه ها و مشخص کردن حقوق مالکیت بالقوه.
- بازبینی امنیتی.
- بدست آوردن اطلاعات حساس به کمک دیس اسمبل و تجزیه و تحلیل طراحی اجزای سیستم.
- حذف محافظ کپی، دور زدن محدودیت های دسترسی.
- ایجاد کپی های بدون مجوز / تایید نشده.
- اهداف علمی / آموزشی.
مهندسی معکوس در حوزه نرم افزار
در عمل دو نوع عمده از مهندسی معکوس وجود دارد. در حالت اول، سورس کد برای برنامه وجود دارد، اما سطوح بالاتری از جنبه های این برنامه، شاید مستندات ضعیف یا مستنداتی که دیگر اعتبار ندارد، مشاهده می شوند.در حالت دوم ، سورس کدی برای برنامه موجود نیست و هرگونه تلاشی در جهت استخراج یک سورس کد ممکن برای نرم افزار به عنوان مهندسی معکوس در نظر گرفته شده است. بسیاری از مردم با استفاده دوم از این اصطلاح آشنا هستند. مهندسی معکوس نرم افزار برای جلوگیری از نقض کپی رایت می تواند از تکنیک طراحی اتاق پاک استفاده کند.
مهندسی معکوس کد (سورس کد)
این فرایند برخی مواقع مهندسی معکوس کد یا Reverse Code Engineering نامیده می شود. به عنوان یک مثال، دیکامپایل کردن باینری برای پلتفرم جاوا از طریق برنامه JAD می تواند انجام شود. یک مثال از گروهی که مهندسی معکوس نرم افزار را برای لذت بردن ( و انتشار کدهای ثبت ) انجام می دهند CORE هست که مخفف "چالش مهندسی معکوس" است. مهندسی معکوس نرم افزار در قانون کپی رایت ایالات متحده در صورت استفاده منصفانه محافظت می شود. برنامه Samba که به سیستم های غیر مایکروسافت ویندوز اجازه می دهد به اشتراک فایل با سیستم های ویندوزی بپردازند یک مثال کلاسیک از مهندسی معکوس نرم افزار هست. به این خاطر پروژه Samba باید به مهندسی معکوس اطلاعات منتشر نشده در مورد چگونگی به اشتراک گذاری فایل ویندوز می پرداخت، تا که کامپیوتر های غیر ویندوزی بتوانند آنرا شبیه سازی کنند. پروژه Wine همین کار را برای API ویندوز و OpenOffice.org این کار را برای فرمت فایل های مایکروسافت آفیس انجام می دهد.
تکنیکهای مهندسی معکوس نرم افزار
مهندسی معکوس نرم افزار از روش های گوناگونی میتواند بدست آید. سه گروه اصلی مهندسی معکوس نرم افزار عبارتند از:
1-تجزیه و تحلیل از طریق مشاهده تبادل اطلاعات - شایع ترین در مهندسی معکوس پروتکل- که شامل استفاده از آنالیزورهای درگاه باس و اطلاعات انتقالی شبکه است. الگوی رفتاری درگاه باس یا شبکه بعدا می تواند مورد تجزیه و تحلیل قرار گیرد. به منظور تولید یک اجرای مستقل که آن رفتار را تقلید میکند. این امر به ویژه برای مهندسی معکوس درایور های دستگاه مفید است. برخی مواقع مهندسی معکوس بر روی سیستم های بسته به وسیله ابزارهایی که عمدا توسط تولید کننده معرفی شده بسیار کمک کننده است. در مایکروسافت ویندوز دیباگر سطح پایین مانند SoftICE طرفداران بسیاری دارند.
2-تولید فایل اسمبل برنامه به وسیله دیس اسمبلر: به معنی خواندن کدهای خام زبان ماشین و درک این اطلاعات با اصطلاحات خواص دیس اسمبلر. این عمل بر روی تمام برنامه های کامپیوتری می تواند اعمال شود اما درک آن ممکن است مدتی زمان بر باشد، مخصوصا برای کسانی که با زبان ماشین آشنا نیستند.
3-دستیابی به سورس کد با استفاده از یک دیکامپایل کننده، فرایندی که تلاش می کند سورس کد را در بعضی زبان های سطح بالا برای برنامه ای که فقط در حالت بایت کد یا کدهای ماشین است فراهم کند.
طراحی اتاق پاک
طراحی اتاق پاک (همچنین به عنوان روش دیوار چینی شناخته می شود) روش کپی کردن یک طراحی به کمک مهندسی معکوس و سپس بازآفرینی آن بدون نقض کپی رایت و اسرار تجاری در ارتباط با طرح اصلی است. طراحی اتاق پاک به عنوان دفاع در برابر نقض قوانین کپی رایت و اسرار تجاری مفید است به این دلیل که به اختراع مستقل متکی است.
به طور معمول، طراحی اتاق پاک با داشتن شخصی که سیستم را برای طراحی دوباره بررسی میکند، انجام می گیرد و آن شخص مشخصات و خصوصیات سیستم مد نظر را می نویسد. این خصوصیات سپس به کمک یک وکیل بررسی میشود تا اطمینان حاصل شود که هیچ مورد کپی رایت را شامل نمیشود. این خصوصیات سپس توسط یک تیم بدون هیچ ارتباطی با تحلیلگر اصلی اجرا میشود.
یک مثال معروف این است که محصولات داده کلمبیا برای اولین بار یک کپی از کامپیوتر های IBM را از طریق اجرای اتاق پاک BIOS آن ساخت. ReactOS یک سیستم عامل منبع باز است که از اتاق پاک مهندسی معکوس اجزای ویندوز ساخته شده است.
منبع: ویکیپدیای فارسی