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

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

بگذریم این یه مقدمه بود بدونید برنامه هایی با قیمت مثلا20 میلیون تومن (ویندوز سرور) کرک میشن
اما به هرحال لازمه کارو سخت کنیم
برای انتشار نسخه ازمایشی راههای مختلفی هست
مثلا بیایید به شخص بگید من برنامه رو به مدت 1 سال بشما میفروشم 
اگه داخل برنامه شمارنده تارخ بذاریم شاید طرف اصلا باتری مادر برد رو دربیاره
اگه اطلاعات رو حتی رمزنگاری کنیم و بریزیم تو رجیستری ممکنه ویندوز تازه کنن
و یا بیاییم بگیم عاغا شما مجاز هستی مثلا 365 بار برنامه رو باز کنید؟!!
اینم نمیشه منطقی نیست یعنی
و.....
یه راه اینه که مثلا برنامه رو گذاشتی فروش هرکی ثبت نام میکنه در اولین صفحه ورود سریال مادربرد رو برای سرورد بفرسته و براساس
اون سریال یه رمز به شخص بدیم و البته باید الگوریت اون رمز از قبل طراحی شده باشه
اینم کرک میشه
اگه برنامه مهم باشه کاربر رو ملزم کنیم در اولین ورود به اینترنت متصل بشه و حین ورود شماره مادربرد چک بشهاگه تو لیست بود ادامه بده
و اخر اینکه هر شخصی مثلا تو تاریخ 1398/03/18 برنامه رو خرید تاریخ پایان یکسال بعد هست باید اینو بصورتی از طریق یکی از سرورهای جهانی که همیشه آنلاین هستن تاریخ چک بشه
مثلا دوره ای مثلا سر هفته یا ماه اگه تاریخ رد شده باشه اون قسمت رو غیر فعال کنید
برای اینکار نیز لازمه تاریخ مورد نظر رمزنگاری بشه




این سورس

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Cache;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace AES_GetTime
{
    public partial class Form1 : Form
    {
        public string sNISTDateTimeFull;
        public string subStringNISTDateTimeShort;
        public DateTime dtNISTDateTime;
        public DateTime dtSystemDateTime;


        public const string server = "time.nist.gov";
        public const Int32 port = 13;
        public Form1()
        {
            InitializeComponent();
        }
        /* "System Date Time (UTC): \t" + dtSystemDateTime.ToUniversalTime() + Environment.NewLine;*/
        public void RunGetDateReport()
        {
            GetNISTDateTime();

            dtSystemDateTime = DateTime.Today;

           // string subStringNISTDateTimeLong = sNISTDateTimeFull.Substring(7, 8);
            dtNISTDateTime = DateTime.Parse("20" + subStringNISTDateTimeShort);
           // long lNISTDateTime = dtNISTDateTime.;
           // long lLocalDateTime = dtSystemDateTime.Ticks;

            string sMessage = "";
            sMessage =  dtSystemDateTime.ToString();


               
               
              

           
            TimeSpan elapsedTime = dtNISTDateTime.Subtract(dtSystemDateTime);

          
            if (elapsedTime.TotalHours < 24)
               textBox1.Text = sMessage ;
        
              
        

            this.Refresh();
        }


        public void GetNISTDateTime()
        {
            bool bGoodConnection = false;
                   
            System.Net.Sockets.TcpClient tcpClientConnection = new System.Net.Sockets.TcpClient();
                       
            try
            {
                tcpClientConnection.Connect(server, port);
                bGoodConnection = true;
            }
            catch
            {
               
            }
          
            if (bGoodConnection == true)
            {
                
                try
                {
                    NetworkStream netStream = tcpClientConnection.GetStream();

                 if (netStream.CanRead)
                    {
                      
                        byte[] bytes = new byte[tcpClientConnection.ReceiveBufferSize];
                                              
                        netStream.Read(bytes, 0, tcpClientConnection.ReceiveBufferSize);
                                            
                        sNISTDateTimeFull = Encoding.ASCII.GetString(bytes).Substring(0, 50);
                                           
                        try
                        {
                            subStringNISTDateTimeShort = sNISTDateTimeFull.Substring(7, 17);
                            dtNISTDateTime = DateTime.Parse("20" + subStringNISTDateTimeShort);
                        }
                        catch
                        {
                            
                        }
                    }
                    else 
                    {
                        MessageBox.Show("You cannot read data from this stream."); 
                        tcpClientConnection.Close(); 
                        netStream.Close(); 
                    }

                    tcpClientConnection.Close(); 
                }
               
                catch (ArgumentNullException e)
                {
                    MessageBox.Show("ArgumentNullException: {0}", e.ToString()); 
                }
                catch (SocketException e)
                {
                    MessageBox.Show("SocketException: {0}", e.ToString()); 
                }
            }
        }


        
       




        private void Form1_Load(object sender, EventArgs e)
        {
            RunGetDateReport();
            DateTime mydate = Convert.ToDateTime(textBox1.Text);
            DateTime expiredate = new DateTime(2019, 06, 06);
            if ((mydate.CompareTo(expiredate)) >= 0)
             {
                label1.Text = "اعتبار شما تمام شده";
              }
            else
            {
                label1.Text = "تاریخ پایان اعتبار 2019/06/1";
            }
          

        }
        AESClass encrpt = new AESClass();
        private void button1_Click(object sender, EventArgs e)
        {
            string txt = textBox1.Text;
           string txt2= encrpt.Encrypt(txt);
            textBox2.Text = txt2;

        }
    }
}

البته هستن برنامه هایی که اینکارو میکنن یعنی هر بلایی خواستین  نمیتونید سربرنامه بیارید اما برای کارهای محدود خوبن



اینم لینک دانلـــــــــــــــود