گاها شده برنامه ای نوشتید و برای تست به مشتری و یا یکی از دوستان دادی بعد متوجه شدی که برنامه شما کرک شده
یا به اصلاح دی کامپایل شده و کدهایی که اختصاصی برای اون برنامه نوشتید لو رفته
خب برای محافظت از کدهای نوشته شده راههای مختلفی هست مثلا اسمارت اسمبلی میتونه کدهای شما رو از مهندسی معکوس محافظت کنه
البته راههای ابتکاری هم هست که این راهکارهای برای کرکرهای حرفه ای مانند اسمارتیز هستن
من سعی میکنم از طرفداران کپی رایت باشم یعنی واضح بخوام بگم کپی برنامه نصب بدون رضایت مالک همانند دزدی یک شی بدون اجاز مالک اونه
اما از اونجاییکه طراحان و برنامه نویسان حتی ماکروسافت بخش اعظمی از محصولات خود رو برای ما تحریم کرده است ما هم از مهندسین ایرانی عزیز تشکر میکنیم
این اقدام نه به معنای دزدی بلکه به معنای اعتراض به این شرکتها هستش

یعنی انصاف نیست الکی بیان مارو بخاطر هرچی تحریم کنن انوقت انتظار داشته باشن برنامه قانونی نصب کنیم و در قبال همین مهندسی معکوس مثلا روی ویندوز 
صورت گرفته و برای ما بصورت قانونی در اومده -- معروفه که میگن ایران بهشت نرم افزاریه !!!!
خب بگذریم گاها لازمه برنامه ای که نوشتیم کدهاش رو اختصاصی بکنیم
مثلا میتوینم برای برنامه 2 تا کلاس تعریف کنیم اسم هر دوتا رو  EncryptionClass  و EncriptionClass مثلا تو مهندسی معکوس کرکر رو به اشتباه میندازه
اما یکی از موثرترین روشها تبدیل فایل های پروژه به Dll هست Dynamically loaded library
یعنی کتابخانه پویا
تو این پست نحوه رمزگاری رشته ها رو مثال زدم
کدها رو قبلا توضیح دادم اینجا نحوه ساخت dll رو اموزش میدم
این کدهای پروژه ساده رمزنگاریه با استانداد AES
کدهای کلاس

class AESCrypto
    {
        public static string Encrypt(string Decrypt)
        {
            byte[] txttobyte = new byte[1024];
            txttobyte = ASCIIEncoding.UTF8.GetBytes(Decrypt);
            AesCryptoServiceProvider AESEncod = new AesCryptoServiceProvider();
            AESEncod.BlockSize = 128;
            AESEncod.KeySize = 256;
            AESEncod.IV = new byte[128/8];
            AESEncod.Key = new byte[128/8];
            AESEncod.Mode = CipherMode.CBC;
            AESEncod.Padding = PaddingMode.PKCS7;

            ICryptoTransform icrpt = AESEncod.CreateEncryptor(AESEncod.IV,AESEncod.Key);
            byte[] enctobyte = icrpt.TransformFinalBlock(txttobyte,0,txttobyte.Length);
            icrpt.Dispose();
            return Convert.ToBase64String(enctobyte);
        }
    }
کدهای main
class Program
    {
        static void Main(string[] args)
        {
            string txt;
             txt=  Console.ReadLine();
            Console.WriteLine(AESCrypto.Encrypt(txt));
            Console.ReadKey();
        }
    }



نتیجه اجرا و یه خروجی==>Test


خوب الان این پروژه حتی بصورت پکیج exe هم دربیاد با برنامه هایی مانند دات نت رفلکتور میشه مهندسی معکوس رو انجام داد
برای شروع یه پروژه با هر نامی با موضوع  Class librery ایجاد میکنیم

خب کدهای داخل فایل class AESCrypto داخل پروژه جدید کپی مکنیم و یه اجرا ازش میگیریم 
در اولین اجرا یه پیغام خطا مشاهده میکنید  مهم نیست در پوشه debug یه فایل dll  ایجاد شده و برای استفاده از اون به پوشه debug پروژه اصلی کپی کنید
خب پس از کپی کلاسی که کدهای اصلی قرار داشت حذف کردم
و در رفرنس اون dll  رو اضافه میکنیم
و بدون دستکار خاصی پروژه استارت میشه من سورس رو براتون میزارم
در این صورت دیگه مهندسی معکوس روی پروژه انجام نمیشه

                                                                                http://s8.picofile.com