ج-. یک برنامه شناسایی کننده ایجاد کنید.:
دو مرحله قبلی معمولاً توسط یک انسان، یا برنامههایی مانند برنامههای شبکه عصبی که در ارتباط با بستهای شدههای اختصاص داده شده به گروههای شناخته شده آموزش دیدهاند، انجام میشدند. این مرحله، در مقابل، نوشتن برنامهای است که عملکردش فقط شناسایی آن گروه، و احتمالاً آن عضو خاص است.
د-. یک برنامه ضد بستهای شده ایجاد کنید.:
برخلاف برنامه شناسایی کننده، که هدفش فقط شناسایی بستهای شده است، برنامه آنبستهای شده در واقع اقدامات عکس بستهای شده مربوطه را انجام میدهد، و باینری بستهای شده شده را تا حد ممکن به شکل اصلی آن، از جمله فرادادههای آن مانند بر نامههای قابل حمل و اجرابرای باینریهای Win32، بازیابی میکند. ایجاد برنامههای شناسایی کننده بستهای شده و برنامههای آنبستهای شده به تلاش چشمگیری نیاز دارد.
(( اینجا فقط تکه ای از متن درج شده است. برای خرید متن کامل فایل پایان نامه با فرمت ورد می توانید به سایت feko.ir مراجعه نمایید و کلمه کلیدی مورد نظرتان را جستجو نمایید. ))
همانطور که در بالا ذکر شد، Symantec حدود ۱۲۰۰ عضو در ۹۰ گروه کار عقب مانده دارد. افزودن پشتیبانی از آنبستهای شده کردن به یک بستهای شده معمولی، به طور متوسط حدود شش ساعت طول میکشد. این بدین معنی است که اگر روزانه پنج نیروی تمام وقت دو آنبستهای شده ایجاد کنند، جبران این کارهای عقب مانده شش ماه طول میکشد. با این وجود، در مورد بستهای شدههای پیچیده مانند Themida ، ممکن است تا شش ماه طول بکشد تا یک نیروی با تجربه بتواند ضد بستهای شده آن را ایجاد کند. بستهای شدههای دارای این سطح پیچیدگی کم نیستند.
۱-۵-چگونگی کارکرد بسته ای شده ها
بیایید از UPX شروع کنیم، که مسلماً در میان سادهترین بستهای شدههایی است که امروزه مورد استفاده قرار میگیرند. وقتی UPX یک باینری پرونده اجرایی قابل حمل[۴] را فشرده میکند، با ادغام کردن تمام قسمتهای آن به استثنای قسمت منبع، در یک قسمت شروع میکند. سپس یک نسخه کپی دوباره فرمت شده از جدول ورودی باینری اصلی که دوباره فرمت شده است با هدرپرونده اجرایی قابل حمل و قسمت داده باینری اصلی ترکیب میشود.
دادههای ترکیب شده سپس در یک قسمت از باینری بستهای شده شده حاصل فشرده میشود. هدرپرونده اجرایی قابل حمل اصلی این امکان را برای UPX فراهم میسازد تا به طور اختیاری عملیات فشرده سازی را بر عکس کند و یک فایل غیر فشرده شده ایجاد نمایید که دقیقاً شبیه فایل اصلی فشرده نشده است.
بعد از اینکه UPX یک باینری پرونده اجرایی قابل حمل را فشرده میکند، یک باینری پرونده اجرایی قابل حمل جدیدی میدهد که سه قسمت دارد. اندازه اولین بخش آن با اندازه ایمیج میزبان اصلی برابر است، – هرچه قابلیت فشرده شده دادهها کمتر باشد،
قسمت اول کاملاً مجازی است – دارای هیچ داده فیزیکی نیست و فقط محل نگهداری دادههای خارج شده از حالت فشرده شده است. قسمت دوم حاوی دادههای فشرده شده است که بلافاصله کد آنبستهای شده همراه آنها میآید.
قسمت سوم حاوی دادههای منبع است، در صورتی که باینری اصلی یک قسمت منبع و جدول است.
دو قسمت اول، صرف نظر از اینکه قبلاً چه چیزی بودند، به طور همیشگی برای خواندن/نوشتن/ اجرا تنظیم میشوند، و در حین اجرا تغییر نمیکنند. بنابراین UPX با NX سازگار است، اما محافظت از قسمتهای فقط خواندنی باینری اصلی را کاهش میدهد. قسمت سوم فقط برای خواندن/نوشتن تنظیم میشود، زیرا نباید هیچ اجرایی در آن قسمت صورت پذیرد.
بعد از ضد بستهای شده کردن، UPX امکان نوشتن هدر باینری حاصل را فراهم میکند، سپس دو قسمت اول را به فقط خواندنی تغییر میدهد، و هدر را دوباره در برابر نوشتن محافظت میکند. این کار سازگاری با برخی برنامههای کاربردی که به جای ویژگیهای واقعی قسمت، جدولهای قسمت داخل حافظه را بررسی میکند، را تضمین می کند، زیرا این قسمتها باید قابل نوشتن باشند.
۱-۶-انواع ضد بسته ای ها
در عمل، باینریهای بستهای شده شده که توسط برخی بستهای شدهها ایجاد شدهاند ممکن است دوباره با سایر بستهای شدهها بستهای شده نشوند. همچنین، استفاده از بستهای شده کردن چندلایهای ممکن است نشانهای از یک بدافزار باشد، بنابراین وجود چند لایه – پشتیبانی میشود یا نمیشود میتواند امکان شناسایی اکتشافی را فراهم کند.
روشهای ضدبستهای شده کردن به منظور مشکل ساختن کشف منطق ضد بستهای شده طراحی شدهاند، و به دو دسته اصلی تقسیم میشوند:
– غیرفعال
– فعال
۱-۶-۱-ضد بسته ای غیر فعال
روشهای ضد بستهای شده کردن غیرفعال برای مشکل ساختن جداسازی اجزاء طراحی شدهاند، که به نوبت شناسایی و معکوس کردن الگوریتم آن بستهای شده کردن را مشکل میسازند.
۱-۶-۲- ضد بسته فعال
روشهای فعال برای محافظت از باینری در حال اجرا در مقابل نفوذ کامل در ایمیج ضد بستهای شده شده و استخراج آن، طراحی شدهاند، و میتوانند به سه دسته فرعی دیگر تقسیم شوند: ضدنسخه برداری، ضدعیب یابی، ضدتقلید. بستهای شدههای تجاری متعددی مانند Enigma و Themida وجود دارند که استفاده از همه این روشها را ترویج میدهند. آسانترین روش برای به دست آوردن ایمیج آنبستهای شده، نسخه برداری از فضای نشانی پردازش در حال اجرا است.
سادهترین شکل ضدنسخه برداری شامل تغییر مقدار اندازه ایمیج در مسدودسازی محیط پردازش است، و پیوستن به پردازش یا نسخه برداری از تعداد صحیح صفحات را برای برنامه عیبیاب مشکل میسازد. روشهای ضدنسخه برداری پیشرفتهتر شامل محافظتهای سطح-صفحه هستند، که در آنها هر صفحه به طور جداگانه بستهای شده میشود و فقط هنگام دسترسی به آن ضد بستهای شده میشود. حتی بعداً میتوان آن را دوباره بستهای شده کرد. این روش توسط بستهای شدههایی مانند Armadillo استفاده میشود. Shrinker یک نوع از این روش را با ضد بستهای شده کردن ناحیهها در هنگام دسترسی به کار میبرد، اما این امر احتمالاً به دلایل عملکردی است تا به خاطر مکانیسم ضدنسخه برداری، زیرا صفحات آنبستهای شده شده در حافظه باقی میمانند.
یک روش بسیار متداول برای به دست آوردن ایمیج بستهای شده نشده، استفاده از برنامه عیب یاب برای یافتن کد، یا تعیین نقاط انفصال در محلهای خاص است. دو شکل رایج ضدنسخه برداری شامل بررسی برخی مقادیری هستند که سیستم عامل در هنگام وجود برنامه عیب یاب عرضه میکند. مورد اول از یک (رابط برنامه کاربردی) بخش (۲-۲) عمومی به نام IsDebuggerPresent بخش ۴-۲ استفاده میکند، که یک مقدار بولی میدهد که با وجود یا عدم وجود برنامه عیب یاب مطابقت دارد. به کمک همین روشهای میباشد که ما روش مترسک را ارائه میدهیم (فصل ۵).
۱-۷-فصل های این پژوهش
با توجه به فصلهای این پژوهش میتوان آنها را به صورت زیر تقسیم بندی نمود:
در فصل دوم مفاهیم پایهای و اصلی و لازمه این پژوهش مانند رابط برنامه نویسی کاربردی و غیره مطرح میشود در فصل سوم این پژوهش میتوانیم راجب بستهای شدن و روشهایی که میتوانیم برای دفاع از آن به کار ببریم گفتگو میکنیم در فصل چهارم راجع به ضد اشکال زاداها صحبت میکنیم و در فصل پنچم راجب موضوع اصلی پژوهش بحث میکنیم در خصوص اینکه که به چه روشهایی میتوانیم از باز شدن بدافزارهای بستهای شده جلوگیری نمایم همانا پیش گیری بهتر از درمان است.
۱-۸-نتیجه گیری
بستهای شدههای پیچیدهتر انواع روشهای مورد استفادۀ نویسندگان ویروس را به کار میگیرند تا تلاشها جهت مهندسی معکوس، دور زدن، و غیرفعال کردن آن بستهای شدههای موجود در باینریهای بستهای شده شده را با شکست مواجه کنند. ما برخی از آنها را در زیر مورد بحث قرار خواهیم داد. بستهای شده کردن چندلایهای از ترکیب بستهای شدههای بالقوه مختلفی برای بستهای شده کردن باینری داده شده استفاده میکند، و به آسانی تعداد زیادی باینریهای بستهای شده شده را از همان باینری ورودی ایجاد می کند.
فصل ۲
مفاهیم بنیادی
۲-۱- مقدمه
اگر یک بدافزار بر روی یک سیستم باشد می تواند از نوع کرم[۵] و ویروس[۶] و … باشد هدف تمام انواع بد افزارها ایجاد یک خرابی عمدی و در حالتی استقاده از آن میباشد وبرای اینکه شناسایی نگردند سعی در پنهان سازی خود دارند. تا با روشهای تشخیص آشکار نگردند برخی از انواع بد افزارها سعی میکنند که خود را قبل از سیستم عامل در حافظه قرار دهند که به اصطلاح میگویند مجوز ریشه[۷] دارند. که به اصطلاح به آن روت کیتها میگویند پس با داشتن این مجوز میتوانند خود از دید انواع آنتی بد افزارها پنها ن سازند. مثلا این نوع از بد افزارها میتوانند اطلاعات ورودی را از صفحه کلید[۸] بربایند و انرادر فایلی ذخیره سازند و یا ارتباط بین انواع احراز را تحت کنترل قرار دهند و یا منحرف سازند و یا به شکلی خود را میخواهند تغییر دهند در تمام انها عملیات نرم افزار یا روش نرمافزاری هوک به کار میرود، پس در ساختار روت کیتها عمل هوک نقش اساسی را بازی میکنند. حال اگر این نوع عملیات در هسته سیستم پدید آید میتواند نتایج خطر ناک و بسیار مخربی از خود باقی بگذارد پس با این سا ختار و عملکرد این نوع بدافزار باید این نتیجه گرفت بحث شناسایی و دفاع بسیار عمل دشواری خواهد بود.
۲-۲- رابط برنامه نویسی کاربردی[۹]
در واقع رابط برنامه نویسی کاربردی یک کتابخانه سیستمی شامل صدها تابع استاندارد قابل دسترسی است که شرکت میکروسافت آنها را داخل یکسری فایل DLL برای برنامه نویسی سیستمی قرار داده است. رابط برنامه نویسی کاربردی را اصطلاحا قلب سیستم عامل ویندوز مینامند، هر کاری که در این سیستم عامل انجام میشود توسط همین توابع رابط برنامه نویسی کاربردی صورت میگیرد، در حقیقت رابط برنامهنویسی کاربردی بر خلاف نام آنکه نشان دهنده یک رابط مستقل برای ایجاد
برنامه های کاربردی تحت ویندوز است، که بیشتر توسط خود سیستم عامل ویندوز مورد استفاده قرار میگیرد، به بیانی دیگر تعداد زیادی از رابط برنامه نویسی کاربردیها را میکروسافت جهت کارهای داخلی ویندوزاستفاده کرده و هیچ نامی از آنها برده نشده است و هیچ مستنداتی برای آنها نداریم درنتیجه بهتر است آنها را فراموش کنیم.
۲-۲-۱- اما نقش رابط برنامه نویسی کاربردی در برنامه نویسی
رابط برنامهنویسی کاربردی سنگ بنای برنامه نویسی تحت ویندوز را فراهم میآورد. بهتر است بگوییم برنامهنویسی تحت ویندوز بدون توابعرابط برنامهنویسی کاربردیغیر ممکن است.
با بهره گرفتن از رابط برنامهنویسی کاربردی میتوانید برای برنامهها یک رابط گرافیکی فراهم نمایید، تصاویر را نمایش دهید و شیهای سیستم مانند حافظه، فایلها و پردازشها را مدیریت نمایید. ویندوز برای کنترل خود توابع و روالهایی را در اختیار برنامه نویسان میگذارد، این توابع دارای قدرت و توانایی بالایی میباشند و قابل استفاده توسط برنامه نویسان Delphi، C++، Visual c، Visual Basic و غیره میباشند. رابط برنامه نویسی کاربردیها به برنامه ها امکان استفاده کامل از قدرت خانواده ویندوز ۳۲ بیتی را میدهد. با بهره گرفتن از آنها میتوان برنامهها را توسعه داد بطوری که بصورت موفقیتآمیزی بر روی تمامی نسخههای ویندوز ۳۲ بیتی اجرا شده ضمن اینکه از امکانات و
قابلیت های هر نسخه به بهترین نحو استفاده کرد.
۲-۲-۲- علت استفاده از توابع رابط برنامه نویسی کاربردیدربرنامهنویسی
دلایل استفاده از توابع رابط برنامهنویسی کاربردی در زبانهای مختلف برنامهنویسی میتواند این باشد که:
۱-توابع رابط برنامهنویسی کاربردی به دلیل آنکه در فایلهای DLL هر سیستم عامل ویندوز میباشد و در هر مکان مانند یکدیگر میباشند پس نیازی به ارائه آن فایل DLL در نسخه برنامه نمیباشد و درنتیجه حجم نسخه کم میشود و درضمن سندیت برنامه نیز بیشتر میشود و میتوان گفت که شما از منابع ویندوز به بهترین نحو استفاده کردهاید.
۲-نسخههای ویندوز به طور مداوم تغییر میکند ولی به دلیل آنکه سازندگان همیشه حالتی را در نظر میگیرند که نسخههای قبلی را نیز پشتیبانی کند. درنتیجه اگر شما برنامهای را به کمک توابع رابط برنامهنویسی کاربردی بنویسید با تغییر نسخه ویندوز نیازی به تغییر جدی در توابع رابط برنامهنویسی کاربردی نمیباشد.
۳-بیشتر زبانهای برنامهنویسی، (به خصوص زبانهای تحت ویندوز که خود به صورت پنهان از توابع رابط برنامه نویسی کاربردی استفاده میکنند، ممکن استبه علت محدودیتهایی نتوانند تمام امکانات توابع را در اختیار قرار دهند. شما بادسترسی مستقیم به توابع میتوانید از حداکثر قابلیت های تابع استفاده کنید.
۴-در بعضی از زبانهای برنامهنویسی برای آنکه بتوان یک حالت را بوجود آورد و یا کارمشخصی را انجام داد، باید کدهای زیادی بنویسیم و یا در زمان خطاگیری مدت زیادی راصرف کنیم و به طور حتم کاربر استفادهکننده از برنامه شما نیز باید زمان بیشتری رابرای گرفتن جواب صرف کند. این موارد ذکر شده هر کدام به نوبه خود میتوانند از محبوبیت، قدرتمند و خوانابودن برنامه بکاهند. ولی توابع رابط برنامهنویسی کاربردی به دلیل آنکه روتین شده و از قبل نوشته شده میباشند پس فقط کافیست تابع را فراخوانی کنیم و به آن ورودی دهیم و خروجی مورد نظر خود را دریافت کنیم.
۵-بیشتر توابع رابط برنامهنویسی کاربردی کارهایی را انجام میدهند که زبانهای برنامهنویسی قادر به انجام آن نمیباشند. به عنوان مثال به تابع SetlateradwindowAttributes مراجعه کنید که باعث میشود یک پنجره (فرم و یا کنترلهای داخل آن) و با یک رنگ مشخص در آنها به مقدار دلخواه به حالت شفاف و جدی تبدیل شوند. و یا توابع دیگر مانند StretchBlt، TransparentBlt، LokworkStation، TimGetTim و SHShutDownDialog و… .
۲-۲-۳ پرونده های DLL