here

‫به نام خدا‬
‫دانشگاه صنعتی شریف‬
‫دانشکده مهندسی کامپیوتر‬
‫تمرین ‪ – 1‬درس توسعه امن نرمافزار – نیمسال دوم ‪29-29‬‬
‫‪ 93‬بهمنماه ‪1929‬‬
‫نکات‪:‬‬
‫‪‬‬
‫این تمرین انفرادی است و هر کس باید خودش مراحل را انجام داده و گزارش بنویسد‪.‬‬
‫‪‬‬
‫گزارش نهایی شما باید به فرمت ‪ PDF‬باشد‪ .‬این گزارش و دیگر موارد تحویلی را فشرده کرده و به صورت‬
‫فایلی به نام ‪ hw1-874-xxxxxxxx.zip‬بفرستید که به جای ایکسهاا شاماره دانشاجویی شاما ارار‬
‫میگیرد‪.‬‬
‫‪‬‬
‫فایل فشرده تحویلی را به آدرس ‪ [email protected]‬ایمیل کنید‪ .‬عناوا ایمیال شاما نیاز بایاد‬
‫حاوی ‪ hw1-874-xxxxxxxx‬باشد‪.‬‬
‫‪‬‬
‫سررسید تحویل این تمرین شنبه ‪ 11‬اسفندماه میباشد‪.‬‬
‫بخش ‪ :1‬در این بخش شما باید برنامه ‪ Altap Salamander 2.54‬را به طور کامل بشکنید‪.‬‬
‫‪‬‬
‫در بخش عملی درس‪ ،‬برنامه فوق را به طور نا ص شکستیم و دیدیم که عناوا برناماه هناوی ایاراد دارد و‬
‫همچنین پس ای گذشت یک ماه‪ ،‬هر ای چندی دوباره پیغام میدهد که شما هنوی ایان برناماه را خریاداری‬
‫نکردهاید‪ .‬هدف ای این تمرین‪ ،‬شکستن کامل نرم افزار است که دیگر این مشکالت را نداشته باشد‪ .‬در پایا‬
‫برنامه ‪ patch‬شده‪ ،‬باید فا د هر گونه نشانهای ای غیراصل بود خود باشد‪.‬‬
‫‪‬‬
‫شما مجایید که برنامه را ‪ patch‬کنید (یافتن سریال معتبر بدو ‪ patching‬بسیار سختتر اسات)‪ .‬تنهاا‬
‫فایلهای ‪ patch‬شده را همراه گزارش تحویل دهید (کل شاخه برنامه را نفرستید)‪.‬‬
‫‪‬‬
‫استفاده ای ‪ debugger‬های دیگر غیر ای ‪ ollydbg‬نسخه ‪ 1‬مجای است‪.‬‬
‫‪‬‬
‫بعالوه باید یک گزارش ای مراحل انجام کار تحویل دهید‪:‬‬
‫‪ o‬هر مرحله را در یک یا دو جمله بنویسید‪ .‬کسی که گازارش را مایخواناد باه ‪ ollydbg‬مسال‬
‫است پس الیم نیست هر کلیک موس را گزارش کنید ولی هماهی مراحال را ککار کنیاد‪ .‬ماالال‬
‫حتما بنویسید که اول فایل اجرایی را بای می کنیم و سپس دستور ‪ Run‬را اجارا مایکنایم (یاا‬
‫کلید ‪ F9‬را میینیم)‪.‬‬
‫‪ o‬حتما بنویسید که چگونه محلی را یافتهاید و یا چگونه به کارکرد یک تابع پی بردهاید‪.‬‬
‫‪ o‬ای مراحل مهم کار مالل یافتن رشتهها یا گذاشتن ‪ breakpoint‬در نقطهای خاص عکس بگیرید‬
‫و در گزارش بیاورید‪.‬‬
‫‪‬‬
‫برنامه فوق تعدادی پالگین دارد که مایبایسات جداگاناه خریاداری شاوند‪ .‬در ایان تمارین احتیااجی باه‬
‫شکستن پالگینها نیست‪.‬‬
‫بخش ‪ :2‬در این بخش شما باید یک برنامه کوچک بنویسید و سپس سعی کنید دو روش سااده بارای جلاوگیری ای‬
‫‪ crack‬این برنامه پیاده کنید‪ .‬در پایا نیز با کمک ‪ plugin‬های ‪ ollydbg‬این روشها را دور بزنید‪.‬‬
‫سمت الف‪ :‬ابتدا یک برنامه ‪ Command Line‬ساده به نام ‪ program-plane.exe‬بنویسید که یک ناام و یاک‬
‫سریال ای کاربر میگیرد‪ .‬این برنامه رار نیست کار خاصی کند و فق چک می کند که اگر سریال بارعکس ناام باود‬
‫(مالال برای نام ‪ ،Ahmad‬سریال ‪ damhA‬مناسب خواهد باود) ‪ Success‬چاا مایکناد و در غیار ایان صاورت‬
‫مینویسد ‪.Failure‬‬
‫‪‬‬
‫این برنامه حتما باید برای ویندوی نوشته شود ولی اساتفاده ای یباا ‪ C++‬اجبااری نیسات اگرچاه اکیادا‬
‫توصیه میشود‪ .‬ای یبا هایی که روی ‪ VM‬اجرا میشوند (مانند یبا های ‪ .Net‬و ‪ )Java‬و نیز ای یبا های‬
‫اسکریپتی (‪ Perl ،Python ،PHP‬و ‪ )...‬استفاده نکنید‪.‬‬
‫‪‬‬
‫فایل اجرایی و سورس کد برنامه ‪ program-plane.exe‬را ضمیمه کنید‪.‬‬
‫سمت ب‪ :‬حال شما باید برنامه بلی را کمی تغییر دهید تا دیباگ و مهندسی معکوس آ سختتر شود‪ .‬روشهاای‬
‫ییر را به کار برده و برنامه جدیدی به نام ‪ program-anticrack.exe‬ایجاد کنید‪:‬‬
‫‪‬‬
‫روش ‪CheckRemoteDebuggerPresent‬‬
‫‪‬‬
‫دو فیلاااااااد ‪ ProcessDebugFlags‬و ‪ ProcessDebugObjectHandle‬را ای سااااااااختار داده‬
‫‪ NtQueryProcessInformation‬اسااتخراک کاارده و ای روی آ هااا حرااور ‪ debugger‬را تشااخیص‬
‫دهید‪.‬‬
‫‪‬‬
‫روش ‪FindWindow‬‬
‫‪‬‬
‫روش ‪SetUnhandledExceptionFilter‬‬
‫‪‬‬
‫برای اطالعات بیشتر کمی در اینترنت جستجو کنید‪.‬‬
‫هر کدام ای روشهای باال باید در هنگام نبود ‪ debugger‬کامال خنالی باوده و برناماه باه درساتی کاار کناد و ناام و‬
‫سریال را ای کاربر بگیرد و ‪ . ...‬ولی یمانی که ‪ debugger‬داریم‪ ،‬باید بل ای رسید به تعامل با کااربر‪ ،‬برناماه بساته‬
‫شود‪.‬‬
‫‪‬‬
‫فایل اجرایی و سورس کد برنامه ‪ program-anticrack.exe‬را نیز ضمیمه کنید‪.‬‬
‫‪‬‬
‫برای دو سمت الف و ب الیم نیست گزارش بنویسید و سورس کد و فایل اجرایی کافی است‪.‬‬
‫سمت ‪ :‬در نهایت شما باید روشهایی که در باال پیاده کردید را دور بزنید‪ .‬برای این کاار بایاد پالگاینهاایی روی‬
‫‪ ollydbg‬نصب کنید که این روشها را خنالی کند‪ .‬در پایا میخواهیم برناماه ‪ program-anticrack.exe‬را باا‬
‫‪ ollydbg‬بای کرده و به مرحله پرسش ای کاربر برسیم (یعنی برناماه تشاخیص ندهاد کاه در حاال ‪ debug‬اسات و‬
‫بسته نشود)‪.‬‬
‫‪‬‬
‫پالگین های مناسب برای این کار ‪ Olly Advanced‬و ‪ Phant0m‬است‪ .‬آنها را ای آدرسهای ییر دانلود‬
‫کنید و فایل ‪ dll‬داخل آنها را در شاخه ‪ ollydbg‬بیاندایید‪ .‬ممکن است الیم باشد تا فایال ‪ollydbg.ini‬‬
‫را پاک کنید تا لیست پالگینها دوباره درست شود‪ .‬سپس باا باای کارد ‪ ollydbg‬مایتوانیاد در مناوی‬
‫‪ Plugins‬این پالگینهای جدید را ببینید‪.‬‬
‫‪‬‬
‫‪http://www.openrce.org/downloads/details/241/Olly_Advanced‬‬
‫‪‬‬
‫‪http://www.woodmann.com/collaborative/tools/index.php/PhantOm‬‬
‫‪‬‬
‫باید به این پالگینها بگویید که جلوی روشهای جلوگیری ای ‪ debug‬انجام شده را به طریقی بگیرند (این‬
‫گزینهها را در تنظیمات هر پالگین در منوی ‪ Plugins‬مییابید)‪ .‬البته مطلع باشید که ممکن اسات چناد‬
‫راه برای دور ید این روشها موجود باشد و برخی ای راهها کار نکنند‪.‬‬
‫‪‬‬
‫سپس برنامه ‪ program-anticrack.exe‬را اجرا کنید تا بدو بسته شد برنامه باه سامت تعامال باا‬
‫کاربر برسید‪ .‬این یعنی به هدف خود رسیدهایم‪.‬‬
‫‪‬‬
‫‪ OllyDbg‬و پالگین هایی که برای دور ید ترفند های ‪ Anti-Debug‬به کار میروند‪ ،‬بهتار اسات بار‬
‫روی ‪ XP‬اجرا شوند؛ در غیر این صورت ممکن است کار نکنند‪.‬‬
‫‪‬‬
‫مراحل تنظیم ‪ Olly Advanced‬و ‪ Phant0m‬و اجارای برناماه و رساید‬
‫مرحله به مرحله در گزارش بیاورید‪ .‬در مراحل مهم نیز عکس بگیرید‪.‬‬
‫سامت تعامال باا کااربر را‬
‫موفق باشید‬