壹、直接引用
二、反編譯
三、反射
如果DLL壹點措施都不做的話,上面任意壹種都可以達到破解目的的。
然後,通常網上能搜到如下的保護方式,但真心的來說,用處不大,當然對小白破解者增加了難度。
壹、混淆類的工具(如Dotfuscator,但是可以通過ILSpy、Reflector等反編譯哦,直接COPY代碼也能運行)
二、加密類的工具(如MaxToCode,網上有相應的破解教程)
三、加殼類的工具(如Sixxpack,網上有相應的破解教程)
四、強簽名(簽名只是防止項目中的某壹個DLL被篡改了,不能防止反編譯或反射的哦)
說了那麽多,難道沒有相對靠譜的方式了嗎?
最後,我們進入正題
上面那些工具的目的歸結出來大約完成兩個目的,壹是不能看,二是不能調,當然,我們也是實現這兩個目的,只是手段不同。
壹、不能看:.NET DLL可以包含托管堆代碼(可以被反編譯的)與非托管堆代碼(不能被反編譯,要反編譯也是更高層次的了,不在討範圍內),我們將核心邏輯代碼置於非托堆代碼中,由托管堆代碼提供接口供外部調用,調用時將非托管代碼通過.NET動態編譯特性編譯後返回執行結果。這樣就保證了不能看。
二、不能調:我們在非托管代碼中加入驗證調用者來源功能,判斷調用者的HASH值是不是與在非托管代碼中約定的HASH值(發布時需要提前生成相關引用者的HASH值存於非托管代碼,最後生成非托管代碼的DLL放於安裝包中)壹致,如壹致則通過執行返回結果,不壹致則返回空。這樣就解決了非合法來源不能調的問題。
更多參考:blogs.com/dengxi/p/5750170.html