![شبیه سازی محیط برای جلوگیری از unpack شدن packer ها word](http://kialink.ir/img_project/10573_1485588780.jpg)
فهرست مطالبعنوان صفحهچکیده1مقدمه2فصل 1: آغاز سخن 1-1-مقدمه41-2- بدافزار های بسته ای 61-3- اثر مخرب بد افزار های بسته ای61-4-انواع بدافزار های بسته ای شده71-4- روش دفاع81-5-چگونگی کارکرد بسته ای شده ها91-6-انواع ضد بسته ای ها101-6-1-ضد بسته ای غیر فعال111-6-2- ضد بسته فعال111-7-فصل های این پژوهش121-8-نتیجه گیری12فصل 2 : مفاهیم بنیادی 2-1- مقدمه142-2- رابط برنامه نویسی کاربردی142-2-1- اما نقش رابط برنامه نویسی کاربردی در برنامه نویسی152-2-2- علت استفاده از توابع رابط برنامه نویسی کاربردیدربرنامهنویسی152-2-3 پرونده های DLL162-2-4 مشخصات توابع رابط برنامه نویسی کاربردی182-2-5 ارائه چند کد برخی از توابع رابط برنامه نویسی کاربردی192-3 بلوک محیطی فرآیند292-4- جدول آدرس واردات322-5- پرونده اجرایی قابل حمل322-5-1 - روند اجراي فايل هاي پرونده اجرایی قابل حمل34فصل 3 : پک و آنپک 3-1-مقدمه373-2-شکل برنامه های بسته ای شده ها373-3-زیربر نامه باز کننده بسته383-4- بارگذاری برنامه قابل اجرا393-5- تجزیه و تحلیل داده ها ی ورودی403-6- talijamp413-7 محاسبه بی نظمی ها423-8 غیر بسته ای کردن433-8-1 خودکار433-8-2-غیر خودکار443-9- یافتن نقطه اصلی ورودی463-9-1-استفاده از یک ابزار خودکار در یافتن نقطه ورودی اصلی463-9-2-یافتن نقطه ورودی اصلی بصورت دستی473-10- اصلاح جدول ورودی بطور دستی513-11- راه ها و روش ها برای بسته بندی های رایج533-11-1-UPX1533-11-2- PE Compact543-11-3- ASPack543-11-4- Petit553-11-5-WinUpack563-11-6Themida-583-12 آنالیز بدون باز کردن کامل593-13- DLL بسته شده60نتیجه گیری61فصل 4 : ضد اشکال زدایی 4-1- مقدمه634-2- آشکار سازی اشکال زدایی634-2-1- به وسیله رابط برنامه نویسی کاربردیویندوز634-3- بررسی دستی ساختارها664-3-1- بررسی نشانه BeingDebugged664-3-2- بررسی نشانه ProcessHeap684-3-3- بررسی NTGlobalFlag694-4- بررسی باقی مانده سیستم704-5- تشخیص رفتار اشکال زدا714-5-1- اسکن INT714-5-2-اجرای حاصل جمع کنترل کد724-6- بررسی های زمان734-6-1- استفاده از دستور rdtsc734-6-2- استفاده از Qurey PErformance counter و Get tikcount744-7- رویارویی با قابلیتهای اشکال زدا754-7-1- استفاده از فراخوانی های انبار محلی764-8-استفاده از استثناها794-9- وارد کردن وقفه ها804-9-1- وارد کردن INT3814-9-2- واردکردنINT2D814-9-3- وارد کردنICE824-10- آسیب های اشکال زدا824-10-1- آسیب های سرآیند824-10-2-آسیب output debug string854-11- نتیجه گیری85فصل 5 : مترسک 5-1- مقدمه885-2- مترسک چیست؟885-3- نمودار کلی کار905-4- استفاده از رابط برنامه نویسی کاربردی915-3- استفاده از مسیر دستی ساختارها91۵-۳-۱- الگورینم مترسک با کمک نشانهها925-3-2- نمودار الگوریتم قبلی935-4- پیاده سازی عملی مترسک945-4-2- تابع Get tick count945-4-3- الگوریتم ساخت مترسک به کمک تابع Get tick count955-4-3- نمودار ساخت مترسک به کمک تابع Get tick count955-4-4- نمودار الگوریتم ساخت مترسک به کمک تابع Get tick count965-4-5-ساخت فایل ها985-4-3- ساخت مترسک با تابع NtGlobalFlag101فصل 6 : نتیجه گیری 6-1- مقدمه1046-2-آنالیز بدافزارها1056-2-1– پویا1056-2-2– ایستا1066-2-3- مطالعه روشهاي ضد تحليل1076-3-روشهای مطرح در این پژوهش1086-4- نتیجه پایانی109منابع و مأخذ منابع و مأخذ111چکیده انگلیسی................................... 114 فهرست جداولعنوان صفحهجدول 2-1 لیستی از DLL ها18جدول 2-2 زمینه های بلوک محیطی فرآیند که توسط مایکروسافت مستند شده است30جدول 2-3 زمینه هایی از PEB که از متغیرهای جهانی هسته شروع شده اند31جدول 2-4 ساختار فایل پرونده اجرایی قابل حمل34جدول 4-1 بررسی دستی نشانه BeingDebugged67جدول 5-1 واکنش توابع91 فهرست شکلهاعنوان صفحهشکل3-1 یک نمونه از جهش ته47شکل3-2 بایت های دستور نگهداری شده در نقطه ورودی اصلی پیش از اینکه برنامه اصلی باز شود.48شکل 3-3 برنامه قابل اجرا را زمان بارگذاری در حافظه است نشان میدهد48شکل3-4 یک تابع ورودی را فرا می خواند52شکل3-5: جهش ته برای یک برنامه بسته شده با Upack56شکل4-1: تکنیک ضداشکال زداییoutputdebugstring65شکل4-2: ساختار بلاک محیط پردازش بلوک شده ثبت شده67شکل4-3: بررسی دستی نشانه ProcessHeap69شکل4-4 بررسی NTGlobalFlag70شکل4-5: کد C برای تشخیص FindWindow71شکل4-6: اسکن کد برای نقاط توقف72شکل4-7: تکنیک زمان rdtsc74شکل4-8 تکنیک زمان بندی Get tick count75شکل 4-9 : نمونه فراخوانی TLS- جدول TLS درنمای PE77شکل 4-10: نمای یک تابع فراخوانی TLS در IDApro( ctrl-E برای نمایش فشاردهید)78شکل 4-11 : گزینه های اولین توقف ollyDbg78شکل 4-12: گزینه های پردازشی استثنا OllyDbg80شکل4-13: تکنیک INT381شکل 4-14: PE IMAGE-OPTIONAL- HEADER و آسیب NUMBER OF REVA AND SIZES83شکل 4-15:ساختار PE IMAGE- SECTION- HEADER84شکل 5-1:نمودار مترسک90شکل 5-2 نمودار الگوریتم مترسک93شکل 3-5 نمودار ساخت الگوریتم97 چکیدهروش معمولی که با پکرها برخورد میکند، شامل مراحل زیر میشود:۱. یک پکر را شناسایی کنید. برای شناسایی یک پکر، باید آن به یک گروه پکر اختصاص داده شود. انجام این کار به همین آسانی که به نظر میرسد نیست. پکرهای بسیاری وجود دارند که کدهایشان ثابت است، و با استفاده از رشتههای ساده قابل شناسایی هستند. اما بسیاری پکرها از کد چندشکلی برای تغییر ظاهرشان استفاده میکنند، و برخی از پکرها عمداً از رشتههای قلابی متعلق به سایر پکرها یا کد کامپایلر استاندارد استفاده میکنند، تا برنامه شناسایی کننده را فریب دهند.۲. یک پکر را تعیین هویت کنید. این مرحله فراتر از شناسایی است. برای تعیین هویت یک پکر، باید آن را در یک نسخه موجود طبقه بندی کنید یا آن را به یک نسخه جدید اختصاص دهید. توانایی تعیین هویت یک پکر، برای آنپک کردن موفق ضروری است، زیرا ممکن است به اندازه کافی اعضای مختلفی در یک گروه وجود داشته باشد که آنپکر مخصوص یک عضو گروه نتواند برای عضوی دیگری از همان گروه به کار برده شود.۳. یک برنامه شناسایی کننده ایجاد کنید. دو مرحله قبلی معمولاً توسط یک انسان، یا برنامههایی مانند برنامههای شبکه عصبی که در ارتباط با پکرهای اختصاص داده شده به گروههای شناخته شده آموزش دیدهاند، انجام میشدند. این مرحله، در مقابل، نوشتن برنامهای است که عملکردش فقط شناسایی آن گروه، و احتمالاً آن عضو مخصوص است.۴. یک برنامه آنپکر ایجاد کنید. برخلاف برنامه شناسایی کننده، که هدفش فقط شناسایی پکر است، برنامه آنپکر در واقع اقدامات عکس پکر مربوطه را انجام میدهد، و باینری پک شده را تا حد ممکن به شکل اصلی آن، از جمله فرادادههای آن مانند PE header برای باینریهای Win32 ، بازیابی میکند.در این پژوهش بر اساس یک ایده جدید میخواهیم بدون استفاده از روشهای معمولی ذکر شده بتوانیم با جلوگیری از آن پک شدن پکرها بدون حضور اشکال زداها روشی را ابداع نماییم. در این حالت با کمک شناسایی انواع رد پاهایی که یک اشکال زدا در محیطی که در آن حضور دارد میگذارد میتوانیم با تغییر محیط به صورتی که نشانههای حضور بد افزار را نشان دهد از باز شدن بستهایها جلوگیری نماییم.درصد فزایندهای از برنامههای بدافزاری که به طور کنترل نشده منتشر میشوند، توسط پکرها پک میشوند. پکرها برنامههایی هستند که شکل باینری ورودی را بدون تغییر دادن معنای اجرایی آن تغییر میدهند تا انواع جدید بدافزار ایجاد شوند که میتوانند از ابزارهای شناسایی بدافزارهای مبتنی بر امضاء فرار کنند.امروزه نویسندگان بدافزار به جای مستقیماً پیچیده کردن کد بدافزار، بیشتر به پکرها متکی هستند. پکرها برنامههایی هستد که شکل باینری قابل اجرا را به شکلی دیگر تغییر میدهند تا با کوچکتر شدن و یا داشتن ظاهری متفاوت از شکل اصلی خود، از پویشگرهای ضد ویروس مبتنی بر امضاء فرار کند. در موارد بسیاری، نویسندگان بدافزار به طور مکرر ترکیبهای متفاوتی از چندین پکر را برای یک بدافزار به کار میبرند تا به طور سریع تعداد زیادی از باینریهای دارای اشکال مختلف برای منتشر شدن به طور کنترل نشده، ایجاد شوند. این امر که باینرهای بیشتر و بیشتری پک میشوند به طور جدی تأثیر پویشگرهای ضدویروس مبتی بر امضاء را کاهش میدهد؛ همچنین منجر به افزایش نمایی اندازه امضای ضدویروس میشود، زیرا وقتی برنامه ضدویروس نتواند تهدید پک شده را به طور مؤثری آنپک کند، گزینهای غیر از ایجاد یک امضای جداگانه برای آن تهدید ندارد.اندازه گیری دقیق درصد برنامههای مخرب (بدافزار) و برنامههای بیخطر (خوب افزار) که پک میشوند، مشکل است. شرکتهای گوناکون اعداد مختلفی را گزارش کردهاند، اما به طور کلی پذیرفته شده است که بیش از ۸۰ درصد بدافزارها پک میشوند. این نمونههای بدافزار اغلب به جای پک شدن «بسته بندی» میشوند، زیرا بسیاری از پکرها شکل اصلی باینریهای ورودی را به گونهای تغییر میدهند که الزاماً شامل فشرده سازی نمیشوند. 1-1-مقدمهاولین ویروسهای کامپیوتری در اوایل دهه ۸۰ ظاهر شدند و اکثراً فایلهای خود تکرار شونده سادهای بودند که برای سرگرمی و خنده ایجاد شده بودند. در سال ۱۹۸۶ گزارش اولین ویروسی که سیستم عامل ام اس داس مایکروسافت را بر روی کامپیوترهای شخصی مورد هدف قرار داد، منتشر شد. در واقع ویروس Brain به عنوان اولین ویروس از این نوع شناخته میشود. همچنین اوایل سال ۱۹۸۶ شاهد اولین ویروس فایلی به نام Virdem و اولین تروجان (برنامهای که به نظر مفید یا بیخطر میرسد ولی در واقع برای دزدی اطلاعات و یا صدمه زدن به رایانه میزبان طراحی شده است) به نام PC-Write بودیم. تروجان مذکور خود را به عنوان یک برنامه کاربردی و محبوب Word Processor جا زده بود. همچنان که افراد بیشتری از تکنولوژی ویروسها اطلاع پیدا میکردند، تعداد ویروسها، تعداد سكوهای[1] هدف حملات، پیچیدگی ویروسها و تنوع آنها رو به افزایش پیدا کرد. در یک بازه زمانی ویروسها بر روی سکتورهای راهاندازی[2] تمرکزکرده و بعد از آن شروع به آلوده سازی فایلهای اجرایی کردند. در سال ۱۹۸۸ اولین کرم اینترنتی (نوعی از بدافزار که از یک کد خرابکار برای گسترش خودکار از یک رایانه به رایانه دیگر از طریق شبکه استفاده میکند) ظاهر شد. کرم Morris منجر به کند شدن قابل توجه ارتباطات اینترنتی شده که در پاسخ به این حمله و تعدادی حملات مشابه، گروه پاسخگویی به رخدادهای رایانهای به منظور حفظ ثبات اینترنت از طریق هماهنگی در پاسخگویی به رخدادها، پایه گذاری شد. گروه مذکور از طرف دانشگاه کارنگی ملون آمریکا پشتیبانی میشود. در سال ۱۹۹۰،، به عنوان محلی برای تبادل و به اشتراک گذاشتن دانش نویسندگان ویروس، راه اندازی شد. همچنین اولین کتاب در مورد نوشتن ویروس منتشر شد و اولین ویروس چندریختی (معمولاً به آن chameleon یا Cas پرونده اجرایی قابل حمل r اطلاق میشود) گسترش پیدا کرد. یک ویروس چندریختی نوعی از بدافزار است که از تعداد نامحدودی الگوریتم رمزنگاری برای مقابله با تشخیص استفاده میکند. ویروسهای چندریختی توانایی تغییر خود در هربار تکرار را دارا میباشند. این توانایی آنها را از دید برنامههای آنتی ویروس مبتنی بر امضا که برای تشخیص ویروسها طراحی شدهاند، پنهان میدارد. به این ترتیب، در اوایل دهه ۹۰ خبر اولین حمله ویروسی چندریختی با نام Tequila منتشر شد و سپس در سال ۱۹۹۲ اولین موتور ویروس چندریختی و ابزار ویروسنویسی پا به عرصه ظهور گذاشت. بعد از آن ویروسها روز به روز کاملتر شدند. برخی ویروسها شروع به دسترسی به دفترچه آدرسهای ایمیل و ارسال خود به آن آدرسها کردند؛ ویروسهای ماکرو خود را به فایلهای برنامههای کاربردی مانند آفیس متصل کرده و به آنها حمله میکنند؛ و ویروسهایی که مشخصاً برای سوءاستفاده از آسیبپذیریهای سیستم عاملها و برنامههای کاربردی نوشته میشوند. ایمیلها، شبکههای به اشتراکگذاری فایل (P2P)، وب سایتها، درایوهای مشترک و آسیبپذیریهای محصولات، همه و همه برای گسترش و حمله ویروسها مورد سوء استفاده قرار میگیرند. (راههای نفوذ یانقاط سری ورود به شبکه که توسط بدافزارها ایجاد میشوند) بر روی سیستمهای آلوده ایجاد شدند تا راه را برای بازگشت مجدد نویسندگان ویروس و هکرها جهت اجرای نرمافزارهای دلخواه، باز کنند. در این مقاله منظور ما از هکر یک فرد برنامه نویس رایانه یا کاربر آن است که قصد دسترسی به یک رایانه یا شبکه را به صورت غیر قانونی دارد. بعضی از ویروسها دارای موتور ایمیل جاسازی شده هستند که رایانه آلوده را وادار میسازد تا مستقیماً از طریق ارسال ایمیل، ویروس را انتشار دهد. همچنین نویسندگان ویروس شروع به طراحی دقیق معماری حملههای خود با استفاده از مهندسی اجتماعی کردهاند. همراه با این تکامل بدافزارها، آنتی ویروسها نیز به خوبی تکامل پیدا کردهاند. در حال حاضر بیشتر آنتی ویروسهای موجود در بازار بر مبنای امضای ویروس یا همان شناسایی مشخصههای یک بدافزار برای تشخیص کدهای مضر، عمل میکنند. به همین دلیل در فاصله زمانی بین انتشار یک ویروس جدید و شناسایی امضای آن و پخش آن بین آنتی ویروسهای مختلف، یک رشد ناگهانی در میزان آلوده سازی ویروس مشاهده میشود.