我个人认为如果楼主希望达到防止他人调用的效果有以下几个方法,可以分开考虑,当然如果你有时间做安全方面的开发,那么这些方法最好是综合在一起。
1、给Dll文件增加数字签名认证,发送有效的数字签名认证后才能调用。
2、选用好的混淆器进行混淆,混淆的目的是防止他人使用Dll查看器来查看Dll文件,并分析代码及组织结构后,从而调用。当然这也是只能相对阻止,不能被绝对阻止。
3、在注册表中注册您的Dll文件,增加一个键名和键值,键值不能是明文文本形式,而是加密的密文二进制流,这样在调用前必须判断DLL文件必须被注册,而且提供正确的注册键值或密钥,不过这样一来你的Exe文件或者其他调用此Dll文件的程序也必须使用其他安全方法被保护起来。
4、在Dll文件中先使用对称加密后再使用不对称加密算法两种方式进行调用用户身份判断,符合身份的用户才能调用其中的算法,在Dll文件的没法方法调用前都先判断用户身份。此方法同样需要将调用着与被调用着一起保护。
5、在Dll文件中判断某Exe文件或者调用此Dll文件的程序是否被保护,如果没有,则不能成功调用Dll文件。
6、将Dll文件打包到Exe文件中,使得Exe文件和Dll文件一同被保护。
7、尽量避免使用Public关键字,如网友deerchao所述。
8、其他一些关于安全方面的技巧,不过所有安全访问通信在内存中传输的信息,都必须是密文,否则某些内存读取器可以读取到信息,而且如果对方是汇编高手,也同样能找到你的安全方面的漏洞。
正如网友datasky所说,所有的安全都只能是相对安全,而没有绝对安全。Windows中的Dll文件都能被破解而找到漏洞所在,更何况是我们开发的Dll文件,怎么说也需要Windows操作系统支持,被破解是在所难免的事情,只是看破解的人是否有耐心、时间和精力像破解Windows的Dll文件一样,去破解你的Dll文件了。
当然对于某一个Dll文件来说组合使用的上述安全方法越多,性能就会越低,如同鱼和熊掌不能兼得,只要你找准平衡点,适当选用上述性能较好的、安全方法相对较优的,组合使用就可以了。