امنیت در برنامه نویسی و توسعه نرم افزار - C#

MPERSIA4

Member
درود و خسته نباشید خدمت اساتید عزیز

1 - راه های افزایش امنیت و جلوگیری و یا مشکل کردن کرک شدن نرم افزار؟
2 - قبل از شروع نصب درخواست شماره سریال فعال سازی کاملا متفاوت در هر سیستم ؟
(چغر بد بدن کردن نرم افزار)


با سپاس فراوان
 

the_king

مدیرکل انجمن
درود و خسته نباشید خدمت اساتید عزیز

1 - راه های افزایش امنیت و جلوگیری و یا مشکل کردن کرک شدن نرم افزار؟

با سپاس فراوان
یک راه اساسی بیشتر نداره، استفاده از Obfuscator ها، که البته اگه به اندازه کافی موثر بود نمی توانستند برای خود Obfuscator های پولی کرک بسازند. همون نرم افزار های Obfuscator که قراره از نرم افزارتون محافظت کنند کرک شده در اینترنت موجود هستند.

2 - قبل از شروع نصب درخواست شماره سریال فعال سازی کاملا متفاوت در هر سیستم ؟
ابتدا در پروژه تون به System.Management رفرنس بدهید. در ویژوال استدیو منوی Project گزینه Add Reference رو انتخاب کرده و در زبانه NET. گزینه System.Management رو پیدا کنید (ممکنه چند تا باشه، انتخاب بر اساس نسخه NET Framework. ای که تو پروژه تون استفاده می کنید) و با OK اضافه کنید.
حالا با کد زیر سریال 4 گروه رقمی بر اساس شماره سریال پردازنده و مادربورد سیستم بسازید :
کد:
        private void Form1_Load(object sender, EventArgs e)
        {
            var serial = GetSerial();
            MessageBox.Show(serial);
        }

        private string GetSerial()
        {
            var processors = new System.Management.ManagementObjectSearcher("Select ProcessorID From Win32_processor");
            System.Management.ManagementObjectCollection processorList = processors.Get();
            var sb = new StringBuilder();
            foreach (System.Management.ManagementObject processor in processorList)
            {
                sb.Append(processor["ProcessorID"].ToString());
            }
            var motherboards = new System.Management.ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BaseBoard");
            System.Management.ManagementObjectCollection motherboardList = motherboards.Get();
            foreach (System.Management.ManagementObject motherboard in motherboardList)
            {
                sb.Append(motherboard["SerialNumber"].ToString());
            }
            var crypt = System.Security.Cryptography.MD5.Create();
            var hash = crypt.ComputeHash(Encoding.ASCII.GetBytes(sb.ToString()));
            string serial = "";
            for (int i = 0; i < 4; i++)
            {
                serial += ((int)hash[i] + hash[i + 4] + hash[i + 8] + hash[i + 12]).ToString() + ((i == 3) ? "" : "-");
            }
            return serial;
        }
 

MPERSIA4

Member
ممنون از جوابتون
-------------------
وقتی خود اون نرم افزار هم کرک شده ، پس رمزنگاری کردن کدها به چه دردی میخوره؟
خود اون نرم افزار چطور امنیت رو بالا میبره؟
چطور با کدنویسی این کار رو خودم انجام بدم؟
چ چیزهایی رو باید درنظر بگیرم؟
چطور میشه وارد سورس کد رمزنگاری شده یک برنامه شد؟ (بدون استفاده از یک نرم افزار خاص)
 

the_king

مدیرکل انجمن
ممنون از جوابتون
-------------------
وقتی خود اون نرم افزار هم کرک شده ، پس رمزنگاری کردن کدها به چه دردی میخوره؟
خود اون نرم افزار چطور امنیت رو بالا میبره؟
چطور با کدنویسی این کار رو خودم انجام بدم؟
چ چیزهایی رو باید درنظر بگیرم؟
همیشه هدف کرک کردن برنامه نیست، گاهی اصلا الگوریتم و کد برنامه تون رو برای استفاده در جایی دیگه لازم دارند، نه فایل اجرایی کرک شده.
تقریبا میشه گفت طراحی Obfuscator کاری نیست که خودتون بخواهید بکنید، تخصص فنی خیلی بالایی میخواد، اونم نه در مورد خود زبانی مثل #C، در مورد کامپایلرش و CLR و CLI که مستنداتش و تخصصش در اختیار هر کسی نیست. نقطه ضعف در کامپایلر و ماهیت ماشین مجازی این زبان ئه، وگرنه با دست کاری کردن کد برنامه تون جلوی تبدیل اش به کد رو نمی گیرید.
شما می توانید بعضی از قابلیت های ساده Obfuscator ها رو خودتون ایجاد کنید، مثلا اسم همه متغیر ها و متد های برنامه تون رو طولانی و نامفهوم کنید ولی اصل کاری که Obfuscator انجام میده در اون قابلیت های ساده اش نیست.

خلاصه اش اینه که کامپایلر بعضی زبان ها کد رو به یک زبان میانی تبدیل می کنند که راحت تر میشه به زبان اصلی کد برگردوند و کد تبدیل شده خوانایی قابل قبولی داره. مثل کامپایلر زبان های NET.، مثل زبان #C
این معنی اش الزاما این نیست که برنامه راحت کرک میشه، معنی اش اینه که اگه کسی به کد برنامه تون نیاز داشته باشه، می تونه برنامه اجرایی تون رو راحت به کد معادل تبدیل کنه، شاید عینا مثل کد شما نباشه، توضیحاتش هم قطعا داخلش نیست، ولی معادل همون کد شما کار می کنه. Obfuscator ها دو تا کار اساسی می کنند، اول اینکه تبدیل فایل اجرایی به کد رو مشکل می کنند، ثانیا اگه تبدیل هم صورت بگیره، از خوانایی و روانی کد حاصل شدیدا کم می کنند، طوری که فهمیدن منطق کد سخت بشه، البته به قیمت کاهش شدن سرعت اجرای برنامه یا بعضی محدودیت ها.

چطور میشه وارد سورس کد رمزنگاری شده یک برنامه شد؟ (بدون استفاده از یک نرم افزار خاص)
کد رمز نگاری شده یعنی برای باز کردنش به رمز اش نیاز ئه. جزو مباحث متعارف این انجمن هم نیست که بخواهیم در موردش صحبتی بکنیم.
 

جدیدترین ارسال ها

بالا