عنوان پایان‌نامه

پالایش صوری کدهای مبهم



    دانشجو در تاریخ ۱۰ شهریور ۱۳۹۴ ، به راهنمایی ، پایان نامه با عنوان "پالایش صوری کدهای مبهم" را دفاع نموده است.


    محل دفاع
    کتابخانه مرکزی پردیس 2 فنی شماره ثبت: E 2784;کتابخانه مرکزی -تالار اطلاع رسانی شماره ثبت: 70416
    تاریخ دفاع
    ۱۰ شهریور ۱۳۹۴

    روش‌های پوشاندن، روش‌هایی هستند که توسط آنها، کدهای نرم افزارها، مبهم می شوند. لذا این روش‌ها نقش بسزایی را در مباحث مربوط به امنیت سیستم‌ها عهده دارند. گذشته از کاربردهای مثبت بسیاری که برای این روش‌ها برشمرده شده - که ضرورت پژوهش در این حوزه را ایجاب می کنند - استفاده از آنها برای مخفی سازی رفتار مجرمانه خصوصاً در بدافزارها امری رایج بوده، تا آنجا که امروزه تقریباً تمامی بدافزارها، به مدد همین روش‌ها، سعی در مخفی ماندن از چشم قربانیان خود دارند. به دلیل این اقبال گسترده از سوی بدافزارها، پژوهش برای یافتن روش هایی کارا جهت شفافسازی برنامه های پوشیده شده امری ضروری جلوه می کند. هدف از این پژوهش، یافتن راهکاری کارامد جهت شفافسازی و پالایش کد‌های پوشیده‌شده توسط یکی از رایج ترین روش های پوشاندن به نام ریختن مسطح سازی جریان کنترلی می باشد. این روش علاوه بر بهم ساختار جریان کنترلی برنامه‌ها، دشواری درک آنها را با اضافه کردن بلاک‌هایی که شامل کدهای بیهوده و مرده می‌باشند، دوچندان می‌سازد. جهت مقابله با این تبدیل پوشاندن، از چندین روش رایج صوری استمداد جسته‌ایم. برای شناسایی بلاک‌های بیهوده در برنامه پوشیده شده، دو الگوریتم طراحی شده است. در الگوریتم اول که بر اساس روش پالایش مبتنی بر مثال نقض بنا شده است، پراهمیت ترین معیار طراحی، وجود روشی برای مجردسازی برنامه‌ی در حال تحلیل بوده است. چراکه به برنامه‌های پوشیده شده، حجم زیادی کد اضافه شده که تحلیل آنها را غالباً پرهزینه و زمان بر می‌سازد. اصلی ترین چالش در طراحی این الگوریتم نیز مدل سازی حلقه‌ها می‌باشد. الگوریتم دوم که بر مبنای حل کننده‌های SMT بوده، جهت پوشاندن نقاط ضعف الگوریتم اول، طراحی شده است. اصلی‌ترین چالش پیش روی این الگوریتم نیز عبارت است از مدل کردن فراخوانی‌های تابع در برنامه‌های پوشیده‌شده. از دستاوردهای این پژوهش می‌توان به طراحی دو الگوریتم نظری برای پالایش کدهای پوشیده‌شده به روش مسطح سازی جریان کنترلی و پیاده‌سازی یکی از آنها در قالب یک ابزار کاملاً خودکار، و نیز ارائه الگوریتمی برای بازسازی جریان کنترلی برنامه‌ی پوشیده شده، اشاره کرد. کلمات کلیدی :پوشاندن، بدافزار، پالایش، شفافسازی، مسطح سازی جریان کنترلی، کدهای بیهوده و مرده، پالایش مبتنی بر مثال نقض.
    Abstract
    Obfuscation transforms are some kind of methods for transforming codes in such a way that makes it significantly less human readable. These methods modify code to hide it’s original purpose, which makes them the best kit for malware writers. So it’s vital to study them and find some novel deobfuscating ways for fighting malwares in the wild. Control Flow Flattening is one famous transformation that is very popular and our primary goal is to find a solution for simplifying programs that are obfuscated using this method. Despite of it’s aim at altering the order and flow of the program, This method can be empowered by means of Opaque Predicates, which will make it more stealthy and harder to recognize. Formal methods come in handy for designing the deobfuscation method. We’ve designed two algorithms to identify junk blocks and separate them from the real ones. The first algorithm which is based on Counter-Example Guided Refinement Abstraction, has some difficulties in the presence of iterations, so this is why the second algorithm is introduced. By using a SMT Solver engine, the second algorithm is developed. Finding a proper way for modeling Function calls in this algorithm, is the main challenge we’ve faced. Achievements of this study include two automatic algorithms for determining block types (which one of them is implemented using C#) and another algorithm for reconstructing the original control flow of the program. Keywords: Obfuscation, Transformation, Malware, Refinement, Control Flow Flattening, Dead Code, Junk Code, Counter-Example Guided Refinement.