C 生成軟體註冊碼

2021-09-06 18:12:13 字數 3999 閱讀 5409

開發軟體時,當用到商業用途時,註冊碼與啟用碼就顯得很重要了。現在的軟體破解技術實在在強了,各種國內外大型軟體都有註冊機制,但同時也不斷地被破解。下面發的只是乙個常用版本,發出原始碼被破就更容易了,但我們學習的是技術。當然也為以後自己的軟體不會被輕易破解。

第一步。根據卷標,cpu序列號,生成機器碼

// 取得裝置硬碟的卷標號

public static string getdiskvolumeserialnumber()

managementclass mc = new managementclass(「win32_networkadapterconfiguration」);

managementobject disk = new managementobject(「win32_logicaldisk.deviceid=」d:」");

disk.get();

return disk.getpropertyvalue(「volumeserialnumber」).tostring();

//獲得cpu的序列號

public static 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 static string getmnum()

string strnum = getcpu() + getdiskvolumeserialnumber();//獲得24位cpu和硬碟序列號

string strmnum = strnum.substring(0, 24);//從生成的字串中取出前24個字元做為機器碼

return strmnum;

public static int intcode = new int[127];//儲存金鑰

public static int intnumber = new int[25];//存機器碼的ascii值

public static char charcode = new char[25];//儲存機器碼字

public static void setintcode()//給陣列賦值小於10的數

for (int i = 1; i < intcode.length; i++)

intcode[i] = i % 9;

第二步。根據機器碼 生成註冊碼

//生成註冊碼    

public static string getrnum()

setintcode();//初始化127位陣列

for (int i = 1; i < charcode.length; i++)//把機器碼存入陣列中

charcode[i] = convert.tochar(getmnum().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 = 「」;//用於儲存註冊碼

for (int j = 1; j < intnumber.length; j++)

if (intnumber[j] >= 48 && intnumber[j] <= 57)//判斷字元ascii值是否0-9之間

strasciiname += convert.tochar(intnumber[j]).tostring();

else if (intnumber[j] >= 65 && intnumber[j] <= 90)//判斷字元ascii值是否a-z之間

strasciiname += convert.tochar(intnumber[j]).tostring();

else if (intnumber[j] >= 97 && intnumber[j] <= 122)//判斷字元ascii值是否a-z之間

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();

return strasciiname;

第三步。檢查註冊狀況,若沒有註冊,可自定義試用     

///

/// 檢查註冊

///

private void checkregist()

this.btn_reg.enabled = true;

registrykey retkey = microsoft.win32.registry.currentuser.opensubkey(「software」, true).createsubkey(「wxk」).createsubkey(「wxk.ini」);

foreach (string strrnum in retkey.getsubkeynames())//判斷是否註冊

if (strrnum == clstools.getrnum())

thcontrol(true);

return;

thcontrol(false);

thread th2 = new thread(new threadstart(thcheckregist2));

th2.start();

///

/// 驗證試用次數

///

private static void thcheckregist2()

messagebox.show(「您現在使用的是試用版,該軟體可以免費試用3000000次!」, 「提示」, messageboxbuttons.ok, messageboxicon.information);

int32 tlong;

trytlong = (int32)registry.getvalue(「hkey_local_machine\software\angel」, 「usetimes」, 0);

catch

registry.setvalue(「hkey_local_machine\software\angel」, 「usetimes」, 0, registryvaluekind.dword);

messagebox.show(「歡迎新使用者使用本軟體」, 「提示」, messageboxbuttons.ok, messageboxicon.information);

tlong = (int32)registry.getvalue(「hkey_local_machine\software\angel」, 「usetimes」, 0);

if (tlong < 3000000)

int times = tlong + 1;

registry.setvalue(「hkey_local_machine\software\angel」, 「usetimes」, times);

else

messagebox.show(「試用次數已到」, 「警告」, messageboxbuttons.ok, messageboxicon.warning);

C 生成軟體註冊碼

今天早上,花了乙個早上弄了個生成機器碼和註冊碼的demo,通過生成的註冊碼裡面包含時間資訊,保證了註冊碼在使用後的指定時間後失效 由於數學不行所以寫的比較簡單,ok 上 吧 產生機器碼的原理很簡單,基本上都是取裝置資訊之後加密 取本機機器碼 public static string getmachi...

C 軟體生成註冊碼

開發軟體時,當用到商業用途時,註冊碼與啟用碼就顯得很重要了。現在的軟體破解技術實在在強了,各種國內外大型軟體都有註冊機制,但同時也不斷地被破解。下面發的只是乙個常用版本,發出原始碼被破就更容易了,但我們學習的是技術。當然也為以後自己的軟體不會被輕易破解。第一步。根據卷標,cpu序列號,生成機器碼 取...

C 生成註冊碼

string t datetime.now.ticks.tostring t deskey.desencrypt t,deskey.deskeystr string strid new string t.length for int i 0 i t.length i 把字元賦給陣列 string s...