为了账号安全,请及时绑定邮箱和手机立即绑定

请教如何防止DLL被非法调用

请教如何防止DLL被非法调用

C#
红颜莎娜 2018-12-12 22:08:36
各位大侠,请教如何防止DLL被非法调用啊。 <BR>比如C/S的程序有很多DLL(比如:SampleDll.dll),如何才能防止客户自己开发一个程序来调用SampleDll.dll呢。 <BR>也就是说如何才能只允许我的EXE文件(比如:SampleExe.exe)才可以调用SampleDll.dll ??? <BR>有人说用混淆器,可这根本不能解决问题,只是障眼法而已。 <BR>还请各位大哥们指点一下,当然最好是能给点代码啦,小弟在此谢过。
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

1. 使用Internal接口,然后使用InternalVisibleToAttribute。 InternalVisibleToAttribute可以指定Assembly的PublicKey,因此,即使他的Assembly也修改成你的名字,也无法调用其中的成员。 但是,这样做依然可以使用反射调用 :-( 2. 在你的类型的构造函数上添加校验逻辑 你可以在你的构造函数上添加校验逻辑,检查调用者是不是你的程序,一般可以使用PublicKey进行校验。大多数情况下,用户没有办法模拟你的PublicKey,除非你把它泄露出去了。 这里,你可以通过在构造函数中调用System.Reflection.Assembly.GetCallingAssembly()方法得到调用者的Assembly,通过GetName().PublicKey方法可以得到PublicKey进行校验。 如果你的API是通过静态函数暴露的,在每一个暴露的静态函数上使用同样的方法校验。 但是,这样做无法避免用户反编译你的代码,将这段校验逻辑摘除。 3. 使用混淆 使用IDE自带的Dotfuscator对Assembly进行混淆(注意,将Library和调用Assembly一起进行混淆)。如果你的程序足够复杂,这样已经可以初步确保用户反编译出来的代码没有办法进行修改和编译。基本可以保证你的产品的安全性。 如果还不放心安全性,可以采用deerchao的方案。 对于高手,不存在完全的反破解的方法。

查看完整回答
反对 回复 2018-12-16
?
呼如林

TA贡献1798条经验 获得超3个赞

方法1:用ILMerge/SmartAssembly之类的工具把dll加包到exe里; 然后再混淆. 这样破解者比较难以找到具体的调用点. 方法2:dll里不声明public类/方法,而把exe需要使用的声明为internal;然后给assebmly加一个InternalsVisibleTo属性. 这样破解者需要把它的exe文件名称做成和你的exe一样才能调用.


查看完整回答
反对 回复 2018-12-16
  • 2 回答
  • 0 关注
  • 1434 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信