小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

軟件加密

 獨(dú)孤求財(cái) 2012-03-20

軟件加密-防止非法注冊(cè)機(jī)制作

時(shí)間:2011-5-26來源:yang 作者: peng點(diǎn)擊: 33次

軟件加密-防止非法注冊(cè)機(jī)制作
作者:狂風(fēng)來臨 來自:http://www./

現(xiàn)在很多軟件在軟件加密部分采用的基本都是明碼比較的方式,或者是簡(jiǎn)單的加密算法,很容易就被別人破解然后寫出注冊(cè)機(jī)。為了提供軟件的加密強(qiáng)度,本文從基本的加密知識(shí)開始說起,使你對(duì)自己的軟件要怎么加密、或是要怎么改進(jìn)現(xiàn)有加密方法心里有個(gè)數(shù)。

從算法說起,現(xiàn)在有太多的加密算法,如:Hash算法(包括MD5、SHA、CRC等)、對(duì)稱算法又可以分為流密碼(SEAL、RC4等)和分組算法(DES、AES等)、公開密鑰算法(RSA等)、橢圓曲線算法(ECC)等。Hash類算法是不可逆的算法,一般用于作為數(shù)據(jù)的校驗(yàn)算法;對(duì)稱算法屬于可逆算法,可以用于加密解密;公開密鑰算法也用于加密、解密和數(shù)字簽名;橢圓曲線算法也用于加密、解密。

那么我把上面的算法引申到軟件加密里面來看,首先是Hash算法
if Hash(UserName)=Serial then
  MessageBox(Handle,’軟件注冊(cè)成功!’,’注冊(cè)提示’,MB_OK)
Else
  MessageBox(Handle,’軟件注冊(cè)失?。 ?’注冊(cè)提示’,MB_OK);
看上面例子不難發(fā)現(xiàn),采用Hash算法對(duì)用戶信息進(jìn)行運(yùn)算,用得到的Hash值與用戶輸入的注冊(cè)碼比較,如果相等就表示注冊(cè)成功,否則注冊(cè)失敗。在這個(gè)例子里面存在的問題就是Hash(UserName)得到的Hash值與用戶輸入的注冊(cè)碼比較,那么正確的注冊(cè)碼就會(huì)以明文的方式出現(xiàn)在內(nèi)存中,只要在這個(gè)跳轉(zhuǎn)的的地方下斷就能輕松的得到正確的注冊(cè)碼,這個(gè)也就是我們上面所說的明文比較了。

接下來我們看一下對(duì)稱算法
if DesEncrypt(UserName)=Serial then
  MessageBox(Handle,’軟件注冊(cè)成功!’,’注冊(cè)提示’,MB_OK)
Else
  MessageBox(Handle,’軟件注冊(cè)失?。 ?’ 注冊(cè)提示’,MB_OK);
大家看了這種方式也許會(huì)發(fā)現(xiàn)和上面Hash方式的很相似,對(duì),是一樣的方式,也是先加密用戶信息然后和用戶輸入的注冊(cè)碼進(jìn)行比較,這樣的話真正的注冊(cè)也會(huì)以明文的方式存在以內(nèi)存,在這個(gè)跳轉(zhuǎn)的地方下斷也能輕松得到正確的注冊(cè)碼。既然都是這樣,那我們應(yīng)該怎么來改正呢?
If UserName=DesDecrypt(Serial) then
  MessageBox(Handle,’軟件注冊(cè)成功!’,’注冊(cè)提示’,MB_OK)
Else
  MessageBox(Handle,’軟件注冊(cè)失敗!’,’ 注冊(cè)提示’,MB_OK);
上面這段代碼是先把用戶輸入的注冊(cè)碼解密以后和用戶信息比較,如果相同那么就注冊(cè)成功,否則注冊(cè)碼。這樣的話注冊(cè)碼比較就不是以明碼的方式存在了,如果別人要寫注冊(cè)機(jī)的話就要去分析DesDecrypt是什么算法,然后才能寫出注冊(cè)了,難度是不是就提供了很多?這也就是所謂的非明碼比較。上面這個(gè)采用的是對(duì)稱算法,它的安全主要是依賴以密鑰,那么我們?cè)谑褂玫臅r(shí)候應(yīng)該怎么來保護(hù)密鑰呢?
If UserName=DesDecrypt(Serial,MD5(Key)) then
  MessageBox(Handle,’軟件注冊(cè)成功!’,’注冊(cè)提示’,MB_OK)
Else
  MessageBox(Handle,’ 軟件注冊(cè)成功!’,’注冊(cè)提示’,MB_OK);
利用Hash類算法對(duì)密鑰進(jìn)行運(yùn)算,運(yùn)算得到的值才是最后的密鑰,別人如果只是得到Key那么應(yīng)用同樣的算法做出的注冊(cè)機(jī)也是不正確的,因?yàn)檎嬲腒ey是MD5(Key)。這樣就起到了保護(hù)Key的作用的。

如果別人分析程序,找出真正的Key,那么用這樣的方式加密也是不安全的,那到底什么樣的算法才安全呢?在這里極力推薦使用公開密鑰算法(如RSA等),為什么呢?因?yàn)檫@類算法用做加密的密鑰不同于用做解密的密鑰,而且解密密鑰不能根據(jù)加密密鑰計(jì)算出來。加密密鑰可以公開,也就是公鑰,而解密密鑰是不能公開的,也就是私鑰。RSA的的安全性是基于數(shù)學(xué)難題的,也就是大整數(shù)因子分解。下面我們來看看怎么用RSA來是顯示軟件加密。
if UserName=RSADecrypt(Serila,PubicKey) then
  MessageBox(Handle,’軟件注冊(cè)成功!’,’注冊(cè)提示’,MB_OK)
Else
  MessageBox(Handle,’軟件注冊(cè)失敗!’,’ 注冊(cè)提示’,MB_OK);
對(duì)RSA最有效的攻擊方法就是分解N,為了在短時(shí)間內(nèi)N被分解,建議密鑰是用1024位(比如2048位、4096位)以上。上面說了這么多概念性的東西,下面我們用一個(gè)實(shí)際的例子來表述一下。

由于使用RSA的密鑰的位數(shù)越多速度越慢,讀者在使用的時(shí)候應(yīng)該有選擇性的使用,在這里推薦BitEncrypt安全實(shí)驗(yàn)室開發(fā)的BEWorkShop,為什么?因?yàn)樗麄冏龅倪@套組件提供了RSA1024、RSA2048、RSA4096,運(yùn)算速度都非常快、調(diào)用也很方便。下面是本文作者親自測(cè)試給出的運(yùn)算速度的數(shù)據(jù):
RSA1024 1秒以內(nèi)
RSA2048 2秒以內(nèi)
RSA4096 5秒以內(nèi)
看了這些數(shù)據(jù)是不是有點(diǎn)心動(dòng)呢?就因?yàn)樗麄兘M件的速度比較快,并且他們的客戶服務(wù)態(tài)度極好,個(gè)人認(rèn)為選擇他們的組件是不會(huì)錯(cuò)的。我買的就是他們的組件,感覺好用才寫出來與各位分享的,如果有興趣的讀者可以下載來看看。
主頁:http://www./
郵件:bitencrypt@163.com
客戶服務(wù)QQ:136284742

本文的例子使用BEWorkShop組件來進(jìn)行演示。
注冊(cè)驗(yàn)證例子:
//獲取硬盤系列號(hào),作為加解密依據(jù)
procedure TMainFrm.FormCreate(Sender: TObject);
begin
  GetHDSerial();
  Edit2.Text:=TempResult;
end;

//由于注冊(cè)碼太長(zhǎng),所以采用文件的方式導(dǎo)入
procedure TMainFrm.Button1Click(Sender: TObject);
var
  FileName:String;
begin
  OpenDialog1.Filter:=‘授權(quán)文件(*.dat)|*.dat‘;
  if OpenDialog1.Execute then
    FileName:=OpenDialog1.FileName;
  if FileName=‘‘ then//如果沒有選擇文件退出
    Exit;  
  Memo1.Lines.LoadFromFile(FileName);
end;

//注冊(cè)驗(yàn)證模塊
procedure TMainFrm.Button2Click(Sender: TObject);
var
  InStr:String;
begin
  if Edit1.Text=‘‘ then
    begin
      MessageBox(Handle,‘用戶名不能空請(qǐng)重新輸入!‘,‘注冊(cè)提示‘,MB_OK+MB_ICONINFORMATION);
      Exit;
    end;
  if Memo1.Text=‘‘ then
    begin
      MessageBox(Handle,‘注冊(cè)碼不能空請(qǐng)重新輸入!‘,‘注冊(cè)提示‘,MB_OK+MB_ICONINFORMATION);
      Exit;
    end;
  InStr:=Memo1.Text;
  RSADecrypt(PChar(InStr),PChar(‘11‘),PChar(‘A7F4FDEC1F2DD8773A18AD32FC212593DD6A2C64227CF3726720189BF8558703E74504E02084A56ECC1130C0F4AE31271B4E77BE58A39BD0A7C5CA501AD8027D87C4C8291835‘+‘CA6B0150C8209213B74439F710D8C92F6BDDC4A1F1A999B9FAC6C62BE339612FC52F150F514431071026BFE6376F5260B5C44B07E4E25D502265‘));
  if TempResult=(Edit1.Text+Edit2.Text) then
    Button2.Enabled:=False;
end;
上面程序?qū)崿F(xiàn)了注冊(cè)碼驗(yàn)證例子,介紹一下RSADecrypt函數(shù),第一個(gè)參數(shù)是輸入的注冊(cè)碼,第二個(gè)參數(shù)是公密鑰,第三個(gè)參數(shù)是模數(shù)。接口我是調(diào)用他們已經(jīng)定義好的。

下面我們來實(shí)現(xiàn)注冊(cè)機(jī)例子:
procedure TForm1.Button2Click(Sender: TObject);
var
  FileName,InfoStr:String;
begin
  FileName:=ExtractFilePath(Application.ExeName)+‘Key.dat‘;
  if Edit1.Text=‘‘ then
    begin
      MessageBox(Handle,‘用戶名不能為空!‘,‘提示‘,MB_OK+MB_ICONINFORMATION);
      Exit;
    end;
  if Edit2.Text=‘‘ then
    begin
      MessageBox(Handle,‘機(jī)器碼不能為空!‘,‘提示‘,MB_OK+MB_ICONINFORMATION);
      Exit;
    end;
  InfoStr:=Edit1.Text+Edit2.Text;  
  RSAEncrypt(PChar(InfoStr),PChar(‘1A58A04D32113B0DAEC29DADA50A381731CA6150F659DFE9C9E6EAC321EF4C650123ECAFB4C9835CAC8F3EDD033E76244084C77D3B14A4FD97CEB652D708C92C88EE48183BDDF8EAE1F07D9B3F497C475365468F4756C7A44C8353B80BA1‘+‘97F7128DB6A7F9CFD2DC60BDACB621996FD5A1AD94C502B57A61E00F20BAB8364111‘)
                           ,PChar(‘A7F4FDEC1F2DD8773A18AD32FC212593DD6A2C64227CF3726720189BF8558703E74504E02084A56ECC1130C0F4AE31271B4E77BE58A39BD0A7C5CA501AD8027D87C4C8291835CA6B0150C8209213B74439F710D8C92F6BDDC4A1F1A999B9‘+‘FAC6C62BE339612FC52F150F514431071026BFE6376F5260B5C44B07E4E25D502265‘));
  Memo1.Text:=TempResult;
  Memo1.Lines.SaveToFile(FileName);
  MessageBox(Handle,‘注冊(cè)碼生成成功!‘,‘提示‘,MB_OK+MB_ICONINFORMATION);    
end;
RSADecrypt的第一個(gè)參數(shù)是需要進(jìn)行加密的用戶信息,比如注冊(cè)碼和用戶名;第二個(gè)參數(shù)是私鑰,第三個(gè)參數(shù)是模數(shù)。

從上面的例子可以看出,采用RSA進(jìn)行加密,有效的防止了非法注冊(cè)機(jī)的制作。是不是只現(xiàn)在這樣做就可以防止軟件被破解了?不是的,要做到強(qiáng)度高,那么需要的知識(shí)也比較多,比如反跟蹤、加殼等知識(shí)。反跟蹤在BEWorkShop組件里面也有接口提供,試用了一下感覺還不錯(cuò),加殼工具在BEWorkShop里面也提供了,叫做BEProtect(我是購買了以后才收到的),這款殼壓縮效率比較高,壓縮率高達(dá)到50%,并且還有其它一些技術(shù),在這里就不多說了,感興趣的讀者可以自己下載來看看。希望本文能給你在軟件加密上帶來一點(diǎn)幫助,這里作者只是把自己知道的寫出來,如果有什么錯(cuò)誤、建議和意見歡迎來信和我探討。

[注:轉(zhuǎn)載請(qǐng)注明出處,但請(qǐng)保留信息的完整性]
作者:狂風(fēng)來臨 來自:http://www./  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多