當前位置: 華文星空 > 心靈

原始碼保護問題?

2018-01-30心靈

目前程式碼保護的方法主要有五種:

• 強名稱簽名

• 程式碼混淆

• 程式碼隱藏

• 程式碼加密

• 程式碼本地化

• 添加浮水印

強名稱簽名

• 原理:這種方法,用通俗的話說就是對檔按照Microsoft的演算法對檔進行Hash,然後將hash出來的數據(publickeytoken )寫入檔。在執行或者對檔進行呼叫的時候,SDK會檢查publickeytoken ,若不符合則投擲異常,結束。

• 弱點:反編譯後將publickeytoken 部份去掉即可。

程式碼混淆

• 表面混淆(layout)

把類或者變量的名字修改成晦澀的長名字、特別簡單的單個字母或者不可顯示的字元來實作

• 控制混淆(control)

<行號> br.s <行號+2>

<行號+1> break

<行號+2> …………

• 數據混淆(data)

對於字串進行加密,在執行的時候再進行解密還原,從而增加破解的難度

比如,JS程式碼,就非常適用混淆的方式進行保護,國內知名的JS混淆產品:JShaman,在這方面做的很不錯。

程式碼隱藏

.NET的程式集包括程式碼檔和資原始檔兩部份,此方案就是將程式碼檔的核心部份作為資原始檔隱藏。執行時核心程式集不會在硬碟上留下任何痕跡,它只在記憶體中解密並被載入

弱點:記憶體有完整的程式碼,利用軟件可以將記憶體dump出來,得到完整的程式碼

程式碼加密

• 原理:改變MSIL和JIT的通訊,根據底層的需要來解密程式碼

• 優點:破解的難度大,較安全,記憶體無完整程式碼

• 缺點:編程的難度大,若利用專門的加密軟件,則會加大系統的開發成本

程式碼本地化 及添加浮水印

• 程式碼本地化

將程式碼完全編譯成本機程式碼,同win32下的應用程式一樣,完全失去了.NET的優越性。

• 添加浮水印

簡單的說,就是讓特定的字串以圖片的形式,繪制在程式的界面上,用來提示軟件是否註冊,這種保護方法,關鍵的地方就是對圖片繪制條件的判斷,如果僅僅是用true 或者false 來判斷,就形同虛設了。