大家如何保護所開發的程式

想聽一下大家是如何保護所開發的LabVIEW程式,我的意思是當你程式開發完畢,要安裝在客戶電腦上時,一次只能安裝一台,並且要active才能動作,請問大家是否有相關經驗可提供,謝謝

我的程式都在自己的實驗室內跑,我也想了解這一方面的概念.

原來有限制, 現在才想到目前的程式好像沒有安裝在兩台以上

但是要active是什麼意思?? 我好像沒有發現有這個事情![](upload://rQ25pKKFhgVCxeNHT7gS2eqhtGp.gif)

我說說我的作法,在說明之前,請大家先做個小試驗:

  1. 如果連線到:http://stdb.org/itrc/authorize/?
    ci=FFFFFFFFFFFFFFFF000020005000C000
    00000000800FF3003F0FE010500018000
    0000000000C00B20000E0001000F00010
    &cic=70886adb33a793002368a9a5291039d9
    ,你就會發現畫面顯示「1」
  2. 如果你任意更改上面網址,就會出現「0」

我是使用STDB的Server當做授權伺服器,上面網址中,"ci"是電腦的一組序號,"cic"是將ci做MD5編碼後得到的結果,目的是為了檢查。

這種方法就是在授權伺服器上,先有客戶機器的pc序號,而客戶端的程式一開始執行的時候,就會嘗試連到上述網址,如果結果是「1」,那麼程式就可以繼續執行,如果結果是「0」,那麼程式就不允許執行,大概的情況是照樣子的。

[QUOTE=yao]

原來有限制, 現在才想到目前的程式好像沒有安裝在兩台以上

但是要active是什麼意思?? 我好像沒有發現有這個事情![](upload://rQ25pKKFhgVCxeNHT7gS2eqhtGp.gif)

[/QUOTE]

抱歉,打錯字是activate才對,這個概念來自於NI從LabVIEW8.0以後,必須要透過NI License Manager(在National Instrumants安裝目錄下)activate才能使用LabVIEW8.0,目的是在防盗版

![](upload://362bNgGGlooyPEa7wTtt50luIHp.jpeg)

 

ancle38538.909212963

[QUOTE=Benjamin]

我說說我的作法,在說明之前,請大家先做個小試驗:

  1. 如果連線到:http://stdb.org/itrc/authorize/?
    ci=FFFFFFFFFFFFFFFF000020005000C000
    00000000800FF3003F0FE010500018000
    0000000000C00B20000E0001000F00010
    &cic=70886adb33a793002368a9a5291039d9
    ,你就會發現畫面顯示「1」
  2. 如果你任意更改上面網址,就會出現「0」

我是使用STDB的Server當做授權伺服器,上面網址中,"ci"是電腦的一組序號,"cic"是將ci做MD5編碼後得到的結果,目的是為了檢查。

這種方法就是在授權伺服器上,先有客戶機器的pc序號,而客戶端的程式一開始執行的時候,就會嘗試連到上述網址,如果結果是「1」,那麼程式就可以繼續執行,如果結果是「0」,那麼程式就不允許執行,大概的情況是照樣子的。

[/QUOTE]

Ben,那如何取得電腦的序號以及作MD5的編碼呢?

我目前也有設計這個機制耶~~

不過因為電腦是設備機台使用,所以無法使用網路資源做授權....

只好讀取硬碟製造序號後再使用MD5及DES編碼授權使用....

 

上傳個讀硬碟序號的dll,只要設定return type為C string pointer就行了...

各位大大試用看看吧~~~

HDSerialNumRead.rar

ps:不可以直接上傳dll副檔名的檔案喔?!

 

如果不想抓取電腦硬碟的序號,你也可以抓取網路卡的序號唷,因為一丹網路卡是不會隨電更換的,所以您也可以抓網路卡序號,請參考:使用system exec.vi以及ipconfig指令,來抓出網路卡卡號

[QUOTE=Tomado]

我目前也有設計這個機制耶~~

不過因為電腦是設備機台使用,所以無法使用網路資源做授權....

只好讀取硬碟製造序號後再使用MD5及DES編碼授權使用....

 

上傳個讀硬碟序號的dll,只要設定return type為C string pointer就行了...

各位大大試用看看吧~~~

HDSerialNumRead.rar

ps:不可以直接上傳dll副檔名的檔案喔?!

 

[/QUOTE]

1.據我所知,不管是硬碟序號或是網路卡的編號都是可以更改,但是這也是沒有辦法的事,只有盡力做好防盗版的機制,以下是讀取硬碟序號的程式,也提供給大家參考

Get_Volume_Info.vi

2.另外,Tomado,我對於你做的機制很有興趣,可否麻煩你再做個更詳細一點的教學,還有你是如何安裝在客戶端的,是需要客戶輸入什麼序號,也請一併說明,謝謝

ps.可否將所需程式都上傳,例如MD5,DES...

MD5的編碼,請參考NI的網頁:Calculating the MD5 Message-Digest of a String or File

使用上,如果要對string做編碼,就要使用「MD5 string.vi」,以下是簡易的使用方式。

您也可以參考論壇文章:[小工具] MD5,字串加密,不可逆

![](upload://hpyimyYRT18ki24QilMk8x8ZPnv.jpeg)

![](upload://tkD3Tl3qPqcxjSSHi9QBX3q2W6D.jpeg)

請問

如果無法用網路去作註冊授權確認的話,

只能本機使用,那再安裝到另一台電腦時,

讀取硬碟或是網路卡序號去判別這個機制似乎就沒用了

是否有其他機制呢?

 

[QUOTE=Benjamin]如果不想抓取電腦硬碟的序號,你也可以抓取網路卡的序號唷,因為一丹網路卡是不會隨電更換的,所以您也可以抓網路卡序號,請參考:使用system exec.vi以及ipconfig指令,來抓出網路卡卡號。[/QUOTE]

可是我有小問題想問!

如果我的程式已經build成安裝檔並燒錄起來,

這樣我安裝到新電腦上時,不是只能讀取該台電腦的網路卡或硬碟序號,

再換一台電腦安裝,結果不是一樣,

這樣如何達到防盜機制?

聊一下ni目前的做法,在您安裝完 labview 後可以透過license manager這個程式得知目前的電腦 id,當您遇到需要註冊才能使用的軟體時,ni會要求您提供序號及您的電腦id 兩組號碼做為識別........驗證之後再發放一組開啟碼給您輸入才能正式使用。

所以如果仿效以上的方式,在開發的程式裡加個對硬體序號的演算程序,請使用者回報該硬體序號,由軟體提供者經相同的演算法得出一組號碼發放給使用者開啟軟體使用。當比對這兩組序號發生差異的時候,即可知使用者更換了硬體.........

這使用過程的確蠻麻煩的,只要不告訴你開啟碼,應該可以確保一機一套的情況下使用軟體.......除非使用者去破解你設計的演算法

以上,不知大家以為如何?

[QUOTE=ancle][QUOTE=Tomado]

我目前也有設計這個機制耶~~

不過因為電腦是設備機台使用,所以無法使用網路資源做授權....

只好讀取硬碟製造序號後再使用MD5及DES編碼授權使用....

上傳個讀硬碟序號的dll,只要設定return type為C string pointer就行了...

各位大大試用看看吧~~~

HDSerialNumRead.rar

ps:不可以直接上傳dll副檔名的檔案喔?!

 

[/QUOTE]

1.據我所知,不管是硬碟序號或是網路卡的編號都是可以更改,但是這也是沒有辦法的事,只有盡力做好防盗版的機制,以下是讀取硬碟序號的程式,也提供給大家參考

Get_Volume_Info.vi

2.另外,Tomado,我對於你做的機制很有興趣,可否麻煩你再做個更詳細一點的教學,還有你是如何安裝在客戶端的,是需要客戶輸入什麼序號,也請一併說明,謝謝

ps.可否將所需程式都上傳,例如MD5,DES...

[/QUOTE]

喔~~都沒下載檔案試試看喔!~~

這隻dll讀的硬碟序號是製造序號,不是磁碟分隔區的資料...

硬碟製造序號是獨一無二的,除非製造商再重複使用

硬碟保固維修也是使用這個來查詢的...

可以下載玩玩看嘛!看看是不是跟你提供的程式結果是否一樣!!

[QUOTE]

喔~~都沒下載檔案試試看喔!~~![](upload://ekm3yUkVpx9yRp2Oc1K3CjKn5ta.gif)

這隻dll讀的硬碟序號是製造序號,不是磁碟分隔區的資料...

硬碟製造序號是獨一無二的,除非製造商再重複使用

硬碟保固維修也是使用這個來查詢的...

可以下載玩玩看嘛!看看是不是跟你提供的程式結果是否一樣!!

[/QUOTE]

我一開始就有試了,可是不行動作,剛剛再試一次,發現function name要選"HDSerialNumRead",現在已可以讀出硬碟的製造序號,感謝Tomado,

讓我知道,我之前所說可以更改的硬碟序號是指磁碟分割區的資料

,現在我會以此硬碟的製造序號,做為防盗機制

老實說~~小弟只擔心有某種硬碟製造序號可以複製...!!

就是flash disk...那位大大有這種不是硬碟的硬碟可以測試回報的呢?

這種硬碟用的人應該只有少數吧~~~

Tomado38539.9340393519

你們知道NI怎麼計算你的「Computer ID」嗎?根據:What is the Computer ID Based Upon? 的說明,NI是透過你的「網路卡卡號」或是「硬碟序號」來當作你的Computer ID的。所以建議大家可以使用「使用system exec.vi以及ipconfig指令,來抓出網路卡卡號」這一篇文章來得知客戶的網路卡卡號,然後來做授權。原文如下:


What is the Computer ID Based Upon?

Primary Software: Other NI Software>>NI License Manager
Primary Software Version: 2.1
Primary Software Fixed Version: N/A
Secondary Software: N/A


Problem: During the activation process, one of the required pieces of information is the computer ID. What is this value based upon?

Solution: The computer ID is based on the MAC address of your Ethernet adapter, or in some circumstances on the disk volume serial number. If you change your Ethernet card or reformat your hard drive, you may need a new activation code. The software will alert you when you need to reactivate in one of these circumstances. Once you have been alerted that one of these resources have changed, the software will continue to operate for 7 days. You should reactivate the product during this 7 day period. Reactivate the product by using the NI License Wizard, just as you did when you originally activated.

Related Links: KnowledgeBase 300B2H6E: Worauf basiert die Computer-ID? (Deutsch)

Attachments:


Report Date: 2003/08/01
Last Updated: 2004/12/05
Document ID: 300B2H6E

[QUOTE=Tomado][QUOTE=ancle][QUOTE=Tomado]

我目前也有設計這個機制耶~~

不過因為電腦是設備機台使用,所以無法使用網路資源做授權....

只好讀取硬碟製造序號後再使用MD5及DES編碼授權使用....

上傳個讀硬碟序號的dll,只要設定return type為C string pointer就行了...

各位大大試用看看吧~~~

HDSerialNumRead.rar

ps:不可以直接上傳dll副檔名的檔案喔?!

 

[/QUOTE]

1.據我所知,不管是硬碟序號或是網路卡的編號都是可以更改,但是這也是沒有辦法的事,只有盡力做好防盗版的機制,以下是讀取硬碟序號的程式,也提供給大家參考

Get_Volume_Info.vi

2.另外,Tomado,我對於你做的機制很有興趣,可否麻煩你再做個更詳細一點的教學,還有你是如何安裝在客戶端的,是需要客戶輸入什麼序號,也請一併說明,謝謝

ps.可否將所需程式都上傳,例如MD5,DES...

[/QUOTE]

喔~~都沒下載檔案試試看喔!~~![](upload://ekm3yUkVpx9yRp2Oc1K3CjKn5ta.gif)

這隻dll讀的硬碟序號是製造序號,不是磁碟分隔區的資料...

硬碟製造序號是獨一無二的,除非製造商再重複使用

硬碟保固維修也是使用這個來查詢的...

可以下載玩玩看嘛!看看是不是跟你提供的程式結果是否一樣!!

[/QUOTE]

1.如果有人寫一個只輸出序號的*.dll 檔案,直接覆蓋HDSerialNumRead.dll,就完全破解了??

除非Labview 能將 *.dll compiler到exe裡. 

最好是計算HDSerialNumRead.dll 檔案,產生一個chacksum碼,防止檔案遭修改!

2.主機板序號問題?我下載貴站的測試檔,結果沒抓到?因為我的主機版序號路徑不一樣.

3.網卡問題,大部份的產品都安裝到工業生產線,很少裝網卡?(工業級的電腦)

目前還有一種叫做"流水號",每次安裝序號都不同,不知道好不好用!![](upload://rKEbVPx4uoMDJBEGhrgX6ADJoko.gif)

 

 

OKADA38924.1491203704

[QUOTE=OKADA]

1.如果有人寫一個只輸出序號的*.dll 檔案,直接覆蓋HDSerialNumRead.dll,就完全破解了??

除非Labview 能將 *.dll compiler到exe裡. 

最好是計算HDSerialNumRead.dll 檔案,產生一個chacksum碼,防止檔案遭修改!

[/QUOTE]

這點我倒是沒注意耶~~感謝提醒!!

使用chacksum可能還可以拼湊出來,建議一下其實可以使用MD5產生檔案特徵碼,如P2P軟體一樣...這樣就更堅固囉~~

 

[QUOTE=Tomado][QUOTE=OKADA]

1.如果有人寫一個只輸出序號的*.dll 檔案,直接覆蓋HDSerialNumRead.dll,就完全破解了??

除非Labview 能將 *.dll compiler到exe裡.![](upload://qPCmzfq2KigUaPncn6Um67RUCob.gif) 

最好是計算HDSerialNumRead.dll 檔案,產生一個chacksum碼,防止檔案遭修改!

[/QUOTE]

這點我倒是沒注意耶~~感謝提醒!!

使用chacksum可能還可以拼湊出來,建議一下其實可以使用MD5產生檔案特徵碼,如P2P軟體一樣...這樣就更堅固囉~~

 

[/QUOTE]

MD5,SHA等散列函数很早就被對岸XX掉了,因為只要使用或呼叫微軟的函式,通通收入在IDA反編器裡,

除非NI自己寫一套MD5程序,否則..只要將MD5程式碼改寫或刪掉也是可以破解的!![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)

http://72.14.235.104/search?q=cache:BSFflHfmx8AJ:bbs.pediy.com/showthread.php%3Fthreadid%3D26134+MD5+IDA&hl=zh-TW&gl=tw&ct=clnk&cd=2&lr=lang_zh-CN|lang_zh-TW