2013年11月27日 星期三

[原創] LabVIEW code security: Password Protect VI v.s. Removing Block Diagram VI

LabVIEW 開發環境提供了兩種方式保護程式原始碼的安全性 , 一個是設定VI的密碼.另一個是移除VI的Block Diagram ,也就是VI的程式邏輯部分.
NI官方網站的說明也非常詳細  可以參考"Security of LabVIEW VI Password Protection vs. Removing VI Block Diagrams" , 雖然此篇文章並沒有明確指出Password Protect VI加密的演算法類型 , 但經實驗已確定是使用了MD5 (Wiki MD5)的加密 , MD5目前已被證實可經由碰撞而產生另一組解 , 因此並非完美的加密方式 , 官方文章也提到 Password Protect VI 的加密流程也可能因LabVIEW本身程式碼被逆向工程,跳過了判斷驗證密碼的程式導致即使加密,卻被輕鬆破解的結果.

因此NI提供了 Removing Block Diagram VI的方式 ,讓該VI 只保存人機介面與編譯過的Binary Code.此方式仍被破解的可能性只有對方能解讀該Binary Code在該平台(x86 ...etc) 對應的邏輯,因效益太低可能性微乎其微,因該不會有人會想做這種事情.此方式的缺點是該VI僅能提供同樣的LabVIEW版本與使用的平台環境,例如 abc.vi是在LabVIEW 2012,x86 Win7底下進行Removing Block Diagram後, abc.vi未來只能在LabVIEW 2012,x86 Win7的環境下被呼叫使用 , 因此若要支援多個版本,則須提供相對應的abc.vi.

Removing Block Diagram VI的流程如下:

1.建立一個vi,範例用一個簡單的加法運算,並加入專案.

2.在專案的Builed Specifications項目右鍵選擇New,然後再選擇Source Distribution.

3.在Source File選項中將目標abc.vi設為Always Included.

4.在source File Settings選項中點到abc.vi , 然後在右邊選單會有個Remove block diagram , 把這個選項打勾.
(後面會再多做一個連Remove front panel打勾的比較)

5. 之後點 Build 按鈕後就會生成不含Block Diagram的vi了. 由上圖可以比較一下
abc.vi為原始vi...... 13KB
abc_RemovingBlackDiagram.vi 為移除Block Diagram.......6KB
abc_RemovAnything.vi 為移除Front Panel與Block Diagram...... 3KB

6.將移除Block Diagram的vi拿到另外一台電腦上用LabVIEW 2013的環境打開就會跳出這個畫面 , 底下紅色框框裡顯說Block Diagram已被移除,因此LabVIEW 2013無法進行轉換.

接著用之前文章 提到的程式稍微修改一下,可以讀取儲存vi的每個部分,簡單說明幾個部分的名字代表的意義(猜的), 
VICD = VI compiled Data , 這是該vi程式碼compile 成machine code的資料.
BDPW = Block Diagram PassWord , 這是該vi被設 Password Protect VI後的密碼生成MD5存放的位置 , 前32 byte 就是該vi 被設密碼後的MD5值 , 若該值為"D41D8CD98F00B204E9800998ECF8427E"代表該vi並未被加密. 後面64 byte可能用來計算vi資料是否遭竄改或毀損(猜的)
FPHb , FPSE 為Front Panel 資料 , 詳細意義不明
BDHb , BDSE 為Block Diagram資料 , 詳細意義不明


上面兩張圖是 abc.vi與 abc_RemovingBlackDiagram.vi 的比較
可以看到VICD並未改變, BDHb , BDSE都被移除.

上面這張圖是 abc_RemovAnything.vi 與 abc_RemovingBlackDiagram.vi 的比較
可以看到VICD並未改變, FPHb , FPSE和其他一些東西都被移除.
結論:
1.Password Protect VI 用MD5加密程式碼.
2.Removing Block Diagram VI無法還原成可編輯的vi
3.就保護程式碼而言Removing Block Diagram VI比Password Protect VI來的安全 , 但使用此vi進行開發非常不方便.

沒有留言:

張貼留言