古詩詞大全網 - 個性簽名 - 軟件采用.net C#開發,不想讓人輕松破解核心邏輯及授權驗證代碼,DLL也不想被人隨意調用,有什麽辦法嗎?

軟件采用.net C#開發,不想讓人輕松破解核心邏輯及授權驗證代碼,DLL也不想被人隨意調用,有什麽辦法嗎?

首先,我來介紹壹下發布出去的DLL所面臨的風險:

壹、直接引用

二、反編譯

三、反射

如果DLL壹點措施都不做的話,上面任意壹種都可以達到破解目的的。

然後,通常網上能搜到如下的保護方式,但真心的來說,用處不大,當然對小白破解者增加了難度。

壹、混淆類的工具(如Dotfuscator,但是可以通過ILSpy、Reflector等反編譯哦,直接COPY代碼也能運行)

二、加密類的工具(如MaxToCode,網上有相應的破解教程)

三、加殼類的工具(如Sixxpack,網上有相應的破解教程)

四、強簽名(簽名只是防止項目中的某壹個DLL被篡改了,不能防止反編譯或反射的哦)

說了那麽多,難道沒有相對靠譜的方式了嗎?

最後,我們進入正題

上面那些工具的目的歸結出來大約完成兩個目的,壹是不能看,二是不能調,當然,我們也是實現這兩個目的,只是手段不同。

壹、不能看:.NET DLL可以包含托管堆代碼(可以被反編譯的)與非托管堆代碼(不能被反編譯,要反編譯也是更高層次的了,不在討範圍內),我們將核心邏輯代碼置於非托堆代碼中,由托管堆代碼提供接口供外部調用,調用時將非托管代碼通過.NET動態編譯特性編譯後返回執行結果。這樣就保證了不能看。

二、不能調:我們在非托管代碼中加入驗證調用者來源功能,判斷調用者的HASH值是不是與在非托管代碼中約定的HASH值(發布時需要提前生成相關引用者的HASH值存於非托管代碼,最後生成非托管代碼的DLL放於安裝包中)壹致,如壹致則通過執行返回結果,不壹致則返回空。這樣就解決了非合法來源不能調的問題。

更多參考:blogs.com/dengxi/p/5750170.html