2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
1. 使用Internal接口,然后使用InternalVisibleToAttribute。 InternalVisibleToAttribute可以指定Assembly的PublicKey,因此,即使他的Assembly也修改成你的名字,也無(wú)法調(diào)用其中的成員。 但是,這樣做依然可以使用反射調(diào)用 :-( 2. 在你的類型的構(gòu)造函數(shù)上添加校驗(yàn)邏輯 你可以在你的構(gòu)造函數(shù)上添加校驗(yàn)邏輯,檢查調(diào)用者是不是你的程序,一般可以使用PublicKey進(jìn)行校驗(yàn)。大多數(shù)情況下,用戶沒有辦法模擬你的PublicKey,除非你把它泄露出去了。 這里,你可以通過在構(gòu)造函數(shù)中調(diào)用System.Reflection.Assembly.GetCallingAssembly()方法得到調(diào)用者的Assembly,通過GetName().PublicKey方法可以得到PublicKey進(jìn)行校驗(yàn)。 如果你的API是通過靜態(tài)函數(shù)暴露的,在每一個(gè)暴露的靜態(tài)函數(shù)上使用同樣的方法校驗(yàn)。 但是,這樣做無(wú)法避免用戶反編譯你的代碼,將這段校驗(yàn)邏輯摘除。 3. 使用混淆 使用IDE自帶的Dotfuscator對(duì)Assembly進(jìn)行混淆(注意,將Library和調(diào)用Assembly一起進(jìn)行混淆)。如果你的程序足夠復(fù)雜,這樣已經(jīng)可以初步確保用戶反編譯出來(lái)的代碼沒有辦法進(jìn)行修改和編譯。基本可以保證你的產(chǎn)品的安全性。 如果還不放心安全性,可以采用deerchao的方案。 對(duì)于高手,不存在完全的反破解的方法。

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
方法1:用ILMerge/SmartAssembly之類的工具把dll加包到exe里; 然后再混淆. 這樣破解者比較難以找到具體的調(diào)用點(diǎn). 方法2:dll里不聲明public類/方法,而把exe需要使用的聲明為internal;然后給assebmly加一個(gè)InternalsVisibleTo屬性. 這樣破解者需要把它的exe文件名稱做成和你的exe一樣才能調(diào)用.
- 2 回答
- 0 關(guān)注
- 1494 瀏覽
添加回答
舉報(bào)