گاها شده برنامه ای نوشتید و برای تست به مشتری و یا یکی از دوستان دادی بعد متوجه شدی که برنامه شما کرک شده
یا به اصلاح دی کامپایل شده و کدهایی که اختصاصی برای اون برنامه نوشتید لو رفته
خب برای محافظت از کدهای نوشته شده راههای مختلفی هست مثلا اسمارت اسمبلی میتونه کدهای شما رو از مهندسی معکوس محافظت کنه
البته راههای ابتکاری هم هست که این راهکارهای برای کرکرهای حرفه ای مانند اسمارتیز هستن
من سعی میکنم از طرفداران کپی رایت باشم یعنی واضح بخوام بگم کپی برنامه نصب بدون رضایت مالک همانند دزدی یک شی بدون اجاز مالک اونه
اما از اونجاییکه طراحان و برنامه نویسان حتی ماکروسافت بخش اعظمی از محصولات خود رو برای ما تحریم کرده است ما هم از مهندسین ایرانی عزیز تشکر میکنیم
این اقدام نه به معنای دزدی بلکه به معنای اعتراض به این شرکتها هستش
یعنی انصاف نیست الکی بیان مارو بخاطر هرچی تحریم کنن انوقت انتظار داشته باشن برنامه قانونی نصب کنیم و در قبال همین مهندسی معکوس مثلا روی ویندوز
صورت گرفته و برای ما بصورت قانونی در اومده -- معروفه که میگن ایران بهشت نرم افزاریه !!!!
خب بگذریم گاها لازمه برنامه ای که نوشتیم کدهاش رو اختصاصی بکنیم
مثلا میتوینم برای برنامه 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