黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

[轉(zhuǎn)]不易破解的軟件注冊(cè)碼算法(By 笑望人生)

系統(tǒng) 2345 0

Microsoft .Net的應(yīng)用程序的代碼文件,與Java生成的文件類似,它們都沒有本地代碼,而是一種類似于匯編的代碼。這樣,只要有合適的工具,就可以完整的把別人寫出來的程序反編譯成自己需要的程序文件。

我所知道的.Net下的反匯編程序是 Salamander Refelector 兩個(gè)工具,他們都可以對(duì).Net的程序集反編譯成你需要的語言。

那么,我們寫的程序,做的項(xiàng)目,如何進(jìn)行正版的許可證管理,有許多方法。

最好的方案,是幾個(gè)方法的綜合。下面我說一下單獨(dú)的許可驗(yàn)證方法。

最簡(jiǎn)單的方法,就是使用許可存儲(chǔ)。方法是用戶輸入正版的注冊(cè)碼,通過程序中專門的算法程序進(jìn)行驗(yàn)算,得出的結(jié)果與事先保存在程序中的結(jié)果比對(duì),比對(duì)一致表示輸入正確。然后把結(jié)果保存在存儲(chǔ)中,如注冊(cè)表或者專門的許可文件中,程序許可通過。

這個(gè)方法使用的人/公司最多,但是缺點(diǎn)也是最多的,只要使用上面的工具把驗(yàn)算注冊(cè)碼的算法給弄清楚,就可以自己寫一個(gè)生成序列號(hào)的注冊(cè)機(jī),這個(gè)注冊(cè)方法就形同虛設(shè)了。

還有一個(gè)比較好的方法,就是仿照WindowsXP的激活機(jī)制,客戶的程序自動(dòng)訪問互聯(lián)網(wǎng)的一個(gè)專門設(shè)定的服務(wù)器,通過Tcp/Ip或者WebService遠(yuǎn)程訪問服務(wù)器上的許可程序,許可后把結(jié)果保存在客戶端計(jì)算機(jī)上。這個(gè)方法的好處是許可驗(yàn)證代碼保存在開發(fā)者控制的計(jì)算機(jī)上,客戶端無法獲取驗(yàn)證算法,而且可以通過數(shù)據(jù)庫管理用戶,非常方便。

但是這個(gè)方法也有缺點(diǎn),首先是可靠的Internet連接。如果要防止用戶使用盜版,則必須在客戶端的程序中添加一個(gè)隨機(jī)訪問遠(yuǎn)程許可服務(wù)器驗(yàn)證的功能,這樣不但需要一個(gè)24小時(shí)的Internet連接,而且經(jīng)常進(jìn)行驗(yàn)證也會(huì)干擾程序的正常運(yùn)行。還有就是如果有人通過研究客戶端的接收返回信息的代碼,弄一個(gè)虛擬的驗(yàn)證服務(wù)器,這個(gè)功能也會(huì)完蛋。

那么,所有的焦點(diǎn)都聚集在客戶端的驗(yàn)證算法上,只要這個(gè)客戶端的驗(yàn)證算法被人弄清楚了,整個(gè)程序的許可可以說就不存在了,所以許多開發(fā)者/開發(fā)公司費(fèi)好大的力氣,弄一個(gè)足夠復(fù)雜的驗(yàn)證算法出來,用算法的復(fù)雜度來抵抗破解。但是再復(fù)雜的算法,只要有人寫得出來,就有人能破解得出來,這個(gè)道理我想大家都明白。

那是否有加密算法與解密算法不同的辦法呢?有。而且.Net自帶的類庫里面就有這個(gè)算法。
這個(gè)算法的原理是不對(duì)稱加密的原理。不對(duì)稱加密原理大家基本上都了解。加密的密碼(密鑰)分為兩個(gè)部分,公鑰和私鑰。通過私鑰加密的密文只能通過公鑰解密。根據(jù)這個(gè)特性,我們可以發(fā)現(xiàn)只要開發(fā)者保存好私鑰,即使算法代碼被客戶端破解,因客戶端不知道保存在開發(fā)者處的私鑰,也無法生成注冊(cè)碼。

這個(gè)算法就是 System.Security.Cryptography 名稱空間的 RSAPKCS1SignatureFormatter 類(用來生成注冊(cè)碼)和 RSAPKCS1SignatureDeformatter 類(用來在客戶端驗(yàn)證注冊(cè)碼)。驗(yàn)證過程如下:
首先,需要生成一個(gè)公鑰和私鑰對(duì),當(dāng)然,依靠人是無法生成的,我們可以通過 System.Security.Cryptography 名稱空間的 RSACryptoServiceProvider 類來生成公鑰/私鑰對(duì)。

using (RSACryptoServiceProviderrsa = new RSACryptoServiceProvider())
{
// 公鑰
string pubkey = rsa.ToXmlString( false );

// 私鑰
string prikey = rsa.ToXmlString( true );

}

獲取私鑰以后,可以用 RSAPKCS1SignatureFormatter 類來生成注冊(cè)碼,代碼如下(引用名稱空間略)

using (RSACryptoServiceProviderrsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(prikey);
// 加密對(duì)象
RSAPKCS1SignatureFormatterf = new RSAPKCS1SignatureFormatter(rsa);
f.SetHashAlgorithm(
" SHA1 " );
byte []source = System.Text.ASCIIEncoding.ASCII.GetBytes(txtIn.Text);
SHA1Managedsha
= new SHA1Managed();
byte []result = sha.ComputeHash(source);

byte []b = f.CreateSignature(result);

msg.Text
= Convert.ToBase64String(b);
}

上面的代碼是一個(gè)示例aspx頁面的代碼,頁面包括一個(gè)id為msg的Label控件,一個(gè)ID為txtIn的TextBox控件,一個(gè)ID為btnOK的Button控件,上面的代碼就是btnOK的事件處理程序的內(nèi)容。大家可以非常清楚的看出處理流程,生成一個(gè)RsaCryptoServiceProvider類實(shí)例,然后把這個(gè)類實(shí)例的加密密鑰指定為包含私鑰的prikey字符串因?yàn)榧用芙饷艿墓€/私鑰必須是對(duì)應(yīng)的。然后獲取txtIn輸入的內(nèi)容,生成密鑰后在msg控件上顯示。

下面是使用 RSAPKCS1SignatureDeformatter 類來驗(yàn)證輸入:
using (RSACryptoServiceProviderrsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(pubkey);
RSAPKCS1SignatureDeformatterf
= new RSAPKCS1SignatureDeformatter(rsa);

f.SetHashAlgorithm(
" SHA1 " );

byte []key = Convert.FromBase64String(txtKey.Text);

SHA1Managedsha
= new SHA1Managed();
byte []name = sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(txtIn.Text));
if (f.VerifySignature(name,key))
msg.Text
= " 驗(yàn)證成功 " ;
else
msg.Text
= " 不成功 " ;
}


上面的代碼也很好理解,就是多了一個(gè)ID為txtKey的TextBox控件,他通過同時(shí)獲取用戶名/加密密鑰來進(jìn)行驗(yàn)證。重點(diǎn)是RSA類的FromXmlString()方法,注意上面的這個(gè)方法獲取的是公鑰,表示這段驗(yàn)證代碼是保存在客戶端的,客戶端代碼是沒有私鑰的,即使有人把程序集的代碼反編譯了也沒有用。


上面兩段代碼需要注意的就是生成的公鑰/私鑰必須匹配,我使用RSA對(duì)象生成密鑰對(duì)后保存成為字符串常量,就可以解決這個(gè)問題。

上面這個(gè)方法仍然無法解決客戶使用ildasm反編譯后暴力修改IL代碼,只有靠可靠的強(qiáng)名稱以及數(shù)字證書來保證程序集不被修改了。

[轉(zhuǎn)]不易破解的軟件注冊(cè)碼算法(By 笑望人生)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論