【发布时间】:2010-09-22 12:35:20
【问题描述】:
自上周以来,我一直在努力解决这个问题。我混淆了我的应用程序的 exe。我们的应用程序是在线网络应用程序的离线工具。客户端将安装此应用程序并连接一次互联网,应用程序将下载相关信息并存储在客户端计算机上的 xml 文件中以供进一步显示。出于安全目的,我们正在加密这些 xml 文件。不幸的是,我们在 exe 中有一个 GetCryptXML 方法,它将读取客户端机器上的加密 settings.xml 并在解密后返回它。此 setting.xml 还包含其他 xml 的加密密钥。
我在这里面临的问题是,即使经过混淆,人们也可以通过传递混淆名称来调用 GetCryptXML 方法。
有什么办法可以解决这个问题吗?
这是我解决问题的想法,但我不确定如何实施。
我的想法:调用我的函数的唯一方法是使用 InvokeMember() 函数通过反射。在调用此函数之前,他/她需要使用 this 加载程序集。
Assembly.LoadFrom("myapplication.exe")
如果 myapplication.exe 中的代码可以识别哪个应用程序正在尝试加载我,那么如果它不是预期的应用程序,我们可以限制它们加载。不知道怎么解决。
非常感谢任何帮助。
谢谢。
【问题讨论】:
-
您可能已经意识到这一点,但没有 100% 的解决方案可以解决您的问题。如果加密文件是离线存储的,而解密代码/密钥是离线存储的,用户可以总是使用该代码/密钥来解密文件。通过使用混淆等,你只能让他更难,而不是阻止他这样做。
-
我看不出问题,如果有人有加密的 XML 文件,你的应用程序那么他们有数据和密钥来解密它,那么他们解密它有什么问题?
-
解密密钥在 encryptedFile 中。除非用户执行 GetCryptXML 方法,否则他将无法获取数据。这就是我要保护对 GetCryptXML 方法的调用的原因。
-
不幸的是你不能。即使您可以设法阻止 GetCryptXML 运行,他们仍然拥有实际代码,并且可以反编译并删除检查(混淆只会使反编译更烦人)。
标签: c# security reflection assemblies obfuscation