در صورتی که قصد بومی سازی یک نرم افزار و یا سخت افزار خارجی را داشته – reverse engineering software – و نیاز به دانستن الگوریتم آنها را دارید می توانید این وظیفه را به دپارتمان مهندسی معکوس ما بسپارید
مهندسی معکوس (به انگلیسی: reverse engineering software) به علمی گفته میشود که از پاسخ به سوال میرسند و در واقع فرایند کشف اصول تکنولوژیکی یک دستگاه، شیئ یا یک سیستم میباشد که از طریق تجزیه و تحلیل ساختار و عملکرد آن حاصل میشود. در اکثر مواقع موضوع مورد بررسی یک دستگاه مکانیکی، الکتریکی، برنامه نرمافزاری یا یک ماده بیولوژیکی یا شیمیایی میباشد که بدون داشتن دانش قبلی و تنها با جداسازی اجزا و تجزیه و تحلیل شیوه عملکرد آن، سعی در ایجاد یک نمونه جدید از آن میگردد. مهندسی معکوس به طور عمده در استفادههای تجاری و نظامی به کار میرود و هدف آن استنباط پارامترهای طراحی یک محصول موجود بدون داشتن دانش کافی در زمینه تولید آن محصول و فقط با پیمودن فرایند معکوس و به کارگیری تکنیکهای مشابه میباشد.
دلایل استفاده از مهندسی معکوس (reverse engineering software):
نوسازی نرمافزار: مهندسی معکوس به صورت کلی برای درک وضعیت موجود برنامه مورد نیاز است. این عمل به منظور برآورد درست کوششهای مورد نیاز برای مهاجرت اطلاعات سیستم به یک وضعیت دلخواه است.
نگهداری نرمافزار: مهندسی معکوس نرمافزار میتواند مستندات لازم را برای درک وضعیت فعلی نرمافزار سیستم فراهم کند.
آنالیز محصول: برای بررسی اینکه یک محصول چه گونه کار میکند، از چه اجزایی تشکیل شده، برآورد هزینهها و مشخص کردن حقوق مالکیت بالقوه.
بازبینی امنیتی
بدست آوردن اطلاعات حساس به کمک دیس اسمبل و تجزیه و تحلیل طراحی اجزای سیستم
حذف محافظ کپی، دور زدن محدودیتهای دسترسی.
ایجاد کپیهای بدون مجوز / تایید نشده.
اهداف علمی / آموزشی.
مهندسی معکوس در حوزه نرمافزار(reverse engineering software):
در عمل دو نوع عمده از مهندسی معکوس وجود دارد. در حالت اول، سورس کد برای برنامه وجود دارد، اما سطوح بالاتری از جنبههای این برنامه، شاید مستندات ضعیف یا مستنداتی که دیگر اعتبار ندارد، مشاهده میشوند. در حالت دوم، سورس کدی برای برنامه موجود نیست و هرگونه تلاشی در جهت استخراج یک سورس کد ممکن برای نرمافزار به عنوان مهندسی معکوس در نظر گرفته شده است. بسیاری از مردم با استفاده دوم از این اصطلاح آشنا هستند. مهندسی معکوس نرمافزار برای جلوگیری از نقض کپی رایت میتواند از تکنیک طراحی اتاق پاک استفاده کند.
مهندسی معکوس کد (سورس کد):
این فرایند برخی مواقع مهندسی معکوس کد یا(Reverse Code Engineering) نامیده میشود. به عنوان یک مثال، دیکامپایل کردن باینری برای پلتفرم جاوا از طریق برنامه JAD میتواند انجام شود. یک مثال از گروهی که مهندسی معکوس نرمافزار را برای لذت بردن (و انتشار کدهای ثبت) انجام میدهند CORE هست که مخفف «چالش مهندسی معکوس» است. مهندسی معکوس نرمافزار در قانون کپی رایت ایالات متحده در صورت استفاده منصفانه محافظت میشود. برنامه Samba که به سیستمهای غیر مایکروسافت ویندوز اجازه میدهد به اشتراک فایل با سیستمهای ویندوزی بپردازند یک مثال کلاسیک از مهندسی معکوس نرمافزار هست. به این خاطر پروژه Samba باید به مهندسی معکوس اطلاعات منتشر نشده در مورد چگونگی به اشتراک گذاری فایل ویندوز میپرداخت، تا که کامپیوترهای غیر ویندوزی بتوانند آنرا شبیهسازی کنند. پروژه Wine همین کار را برای API ویندوز و OpenOffice.org این کار را برای فرمت فایلهای مایکروسافت آفیس انجام میدهد.
تکنیکهای مهندسی معکوس نرمافزار( reverse engineering software tech ):
مهندسی معکوس نرمافزار از روشهای گوناگونی میتواند بدست آید. سه گروه اصلی مهندسی معکوس نرمافزار عبارتند از:
۱-تجزیه و تحلیل از طریق مشاهده تبادل اطلاعات – شایع ترین در مهندسی معکوس پروتکل- که شامل استفاده از آنالیزورهای درگاه باس و اطلاعات انتقالی شبکه است. الگوی رفتاری درگاه باس یا شبکه بعدا میتواند مورد تجزیه و تحلیل قرار گیرد. به منظور تولید یک اجرای مستقل که آن رفتار را تقلید میکند. این امر به ویژه برای مهندسی معکوس درایورهای دستگاه مفید است. برخی مواقع مهندسی معکوس بر روی سیستمهای بسته به وسیله ابزارهایی که عمدا توسط تولید کننده معرفی شده بسیار کمک کننده است. در مایکروسافت ویندوز دیباگر سطح پایین مانند SoftICE طرفداران بسیاری دارند.
۲-تولید فایل اسمبل برنامه به وسیله دیس اسمبلر: به معنی خواندن کدهای خام زبان ماشین و درک این اطلاعات با اصطلاحات خواص دیس اسمبلر. این عمل بر روی تمام برنامههای کامپیوتری میتواند اعمال شود اما درک آن ممکن است مدتی زمان بر باشد، مخصوصا برای کسانی که با زبان ماشین آشنا نیستند.
۳-دستیابی به سورس کد با استفاده از یک دیکامپایل کننده، فرایندی که تلاش میکند سورس کد را در بعضی زبانهای سطح بالا برای برنامهای که فقط در حالت بایت کد یا کدهای ماشین است فراهم کند.