給自己的軟體製作註冊碼

來源:互聯網
上載者:User

轉自:http://www.csharpwin.com/csharpspace/2337.shtml

還有就是:http://msdn.microsoft.com/zh-cn/library/system.componentmodel.licenseprovider(v=VS.80).aspx

從今天起, 您開發的的任何軟體如果您願意都可以為之加密 --為您的軟體製作一款註冊機!

    當您看完這篇文章時, 您就可以理直氣壯的告訴您的使用者 : "喂, 想用我的軟體是吧 ? 掏錢!".

    呵呵, 這當然只是給自己壯膽的話, 現在連萬能註冊機都有了, 人家還怕啥 ? 不過只要您想想微軟, 人家再牛B的加密技術都會被國人"鄙視"? 但人家不也在中國大把大把的撈錢嗎? 

OK, 不扯了, 我們進入正題.

同一般的軟體註冊一樣, 我們這裡的註冊是這樣進行的:

1. 首先根據使用者的硬體資訊產生24位的機器碼  
      -- 相當於種子,用於產生隨機數
    2. 採用註冊機根據特徵數字產生一個24位註冊碼
      -- 相當於偽隨機數產生器, 輸出長度自己定, 最後用一個格式化函數,將隨機數映射到ASCII字元集合
    3. 使用者輸入註冊碼註冊成功

假設客戶很喜歡您的軟體, 也假設他沒有破解, 他需要通過以下方式向您取得註冊碼:

(1).如果他能上網, 他需要把機器碼用Email發給您;

(2).如果他不能上網, 他可以把機器碼用手機簡訊的方式發給您.

(3).如果他沒有手機, 他可以帶著機器碼然後坐火車到您的辦公室想您要一個註冊碼.

   --第3條只是為了讓您看文章的時候別太枯燥了, 抱歉.

 

現在, 您拿到了客戶的機器碼後, 如果您同時也收到了他匯的錢,  呵呵, 好像給軟體加密就是為了要錢吧? 那麼您就可以用客戶的機器碼產生一個唯一的註冊碼再用同樣的方式給使用者, 最後, 使用者輸入註冊碼即可!

 

需要強調的是客戶機器的硬體資訊擷取方式是有很多種選擇的. 這裡我們選擇最放心的兩個硬體: CUP的序號和硬碟的卷標號. 好了, 下面您就可以一步一步製作一款軟體註冊機了. 

 

 

步驟一: 獲得CUP序號和硬碟序號的實現代碼如下:

 public string getCpu()        {            string strCpu = null;            ManagementClass myCpu = new ManagementClass("win32_Processor");            ManagementObjectCollection myCpuConnection = myCpu.GetInstances();            foreach( ManagementObject myObject in myCpuConnection)            {                strCpu = myObject.Properties["Processorid"].Value.ToString();                break;            }            return strCpu;        }

 

public string GetDiskVolumeSerialNumber()        {            ManagementClass mc =                  new ManagementClass("Win32_NetworkAdapterConfiguration");            ManagementObject disk =                  new ManagementObject("win32_logicaldisk.deviceid=\"d:\"");            disk.Get();            return disk.GetPropertyValue("VolumeSerialNumber").ToString();        }

 

 

步驟二: 收集硬體資訊產生機器碼, 代碼如下: 

 private void button1_Click(object sender, EventArgs e)        {            label2.Text = getCpu() + GetDiskVolumeSerialNumber();//獲得24位Cpu和硬碟序號            string[] strid = new string[24];//            for (int i = 0; i < 24; i++)//把字元賦給數組            {                strid[i] = label2.Text.Substring(i, 1);            }            label2.Text = "";            Random rdid = new Random();            for (int i = 0; i < 24; i++)//從數組隨機抽取24個字元組成新的字元產生機器三            {                label2.Text += strid[rdid.Next(0, 24)];            }        }

 

 

步驟三: 使用機器碼產生軟體註冊碼, 代碼如下:

public int[] intCode = new int[127];//用於存密鑰        public void setIntCode()//給數組賦值個小於10的隨機數        {            Random ra = new Random();            for (int i = 1; i < intCode.Length;i++ )            {                intCode[i] = ra.Next(0, 9);            }        }        public int[] intNumber = new int[25];//用於存機器碼的Ascii值        public char[] Charcode = new char[25];//儲存機器碼字            //產生註冊碼        private void button2_Click(object sender, EventArgs e)        {            if (label2.Text != "")            {                //把機器碼存入數組中                setIntCode();//初始化127位元組                for (int i = 1; i < Charcode.Length; i++)//把機器碼存入數組中                {                    Charcode[i] = Convert.ToChar(label2.Text.Substring(i - 1, 1));                }//                for (int j = 1; j < intNumber.Length; j++)//把字元的ASCII值存入一個整數組中。                  {                    intNumber[j] =                        intCode[Convert.ToInt32(Charcode[j])] +                        Convert.ToInt32(Charcode[j]);                }                string strAsciiName = null;//用於儲存機器碼                for (int j = 1; j < intNumber.Length; j++)                {                    //MessageBox.Show((Convert.ToChar(intNumber[j])).ToString());                    //判斷字元ASCII值是否0-9之間                    if (intNumber[j] >= 48 && intNumber[j] <= 57)                    {                        strAsciiName += Convert.ToChar(intNumber[j]).ToString();                    }                    //判斷字元ASCII值是否A-Z之間                    else if (intNumber[j] >= 65 && intNumber[j] <= 90                    {                                                strAsciiName += Convert.ToChar(intNumber[j]).ToString());                    }                    //判斷字元ASCII值是否a-z之間                    else if (intNumber[j] >= 97 && intNumber[j] <= 122)                                      {                        strAsciiName += Convert.ToChar(intNumber[j]).ToString();                    }                    else//判斷字元ASCII值不在以上範圍內                    {                        if (intNumber[j] > 122)//判斷字元ASCII值是否大於z                        {                            strAsciiName += Convert.ToChar(intNumber[j] - 10).ToString();                         }                        else                        {                            strAsciiName += Convert.ToChar(intNumber[j] - 9).ToString();                        }                    }                    label3.Text = strAsciiName;//得到註冊碼                }            }            else            { MessageBox.Show("請選產生機器碼","註冊提示"); }        }

 

 

    步驟四: 使用者輸入註冊碼註冊軟體, 示範代碼如下:

 

private void btnRegist_Click(object sender, EventArgs e)        {            if (label3.Text != "")            {                if (textBox1.Text.TrimEnd().Equals(label3.Text.TrimEnd()))                {                    Microsoft.Win32.RegistryKey retkey =                          Microsoft.Win32.Registry.CurrentUser.                         OpenSubKey("software", true).CreateSubKey("ZHY").                         CreateSubKey("ZHY.INI").                         CreateSubKey(textBox1.Text.TrimEnd());                    retkey.SetValue("UserName", "MySoft");                    MessageBox.Show("註冊成功");                }                else                {                    MessageBox.Show("註冊碼輸入錯誤");                                }                        }            else { MessageBox.Show("請產生註冊碼","註冊提示"); }                 }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.