در دهه ی گذشته با توزیع نرم افزارهایی مانند مرورگرها، فروشگاه های آنلاین، بانکداری اینترنتی، سیستم های پست الکترونیکی روی اینترنت، حملات گسترده ای برای انجام مهندسی معکوس، استفاده غیر قانونی از نرم افزار و یا تکثیر غیر قانونی آن انجام شده است. به دلیل ماهیت غیر قابل اعتماد محیط ماشین های میزبان، بحث محافظت از نرم افزار در برابر حملات تحلیل، دستکاری و دزدی نرم افزار افزایش پیدا کرده است و روش های محافظتی متعددی که تاکنون ارائه شده اند با آن که بطور مقطعی مقاومت نسبی ایجاد نموده است، اما پس از گذشت مدتی، حملات جدید آن روش ها را با شکست مواجه کرده است و این باعث ایجاد رقابت میان مهاجمان و توسعه دهندگان نرم افزار شده است. تا کنون راه حل های زیادی برای محافظت مبتنی بر معماری سخت افزار و نرم افزاری معرفی شده است که هر کدام از جنبه ای به محافظت از نرم افزار می پردازند. در این مقاله ابتدا انواع تهدیدهای موجود در برابر امنیت کد های نرم افزاری را معرفی می کنیم و سپس سعی در دسته بندی و مرور تکنیک های معرفی شده برای محافظت از نرم افزار داریم.