我不太明白 Silverlight 代码在浏览器中的工作原理。程序集是否已下载到客户端计算机?是否有可能使用 Reflector 或类似工具对代码进行反编译?如果是这样,有哪些选择可以保护代码?.net 混淆器可以与 Silverlight 一起使用吗?
7 回答
每当您在 Web 浏览器中时,所有客户端代码都会下载到机器上,并且可以由用户检查。这适用于 Javascript、Flash 和 Silverlight。
如果您有绝对必须隐藏的专有代码,那么您需要将其放在服务器上并公开一个 API,客户端可以调用该 API 以向用户显示信息。
要查看 Silverlight 应用程序,客户端下载包含 dll 和一个配置 xml 和可选资源的 .xap 文件。该 dll 包含已编译的 c# 代码,这些代码在客户端计算机的 Silverlight 运行时中运行。Silverlight 运行时基本上是完整的 .net 运行时的一个子集。所以重点是用户获取 dll 中的代码,然后可以使用工具获取原始源代码。所以你最多可以做的是混淆。仍然适用于不应该选择的非常关键的代码。如果需要,您可以使用其他方式(WCF 或其他 Web 服务来隐藏您的代码的某些部分)。
如果您想看看在 silverlight 应用程序中查看代码是多么容易,只需运行FirstFloor的SilverlightSpy链接文本。只要您安装了.NET Reflector,您就可以看到(当您与应用程序交互时)包括 xaml 文件在内的所有源代码。
由于代码确实会下载到客户端(甚至尝试使用 pragma no-cache 来阻止它也行不通,因为它们可以访问 URL),您需要通过在服务器上保留重要逻辑来保护您的代码。
如果您害怕有人会窃取您的知识产权并且该法律还不够,那么您将需要混淆您的代码。但我不会说这种保护,而是对临时逆向工程师的威慑。
设置 pragma -No Cache- 将阻止 .xap 存储在计算机上,而是由 Silverlight 插件流式传输。如果没有编译指示,.xap 文件将存储在临时 Internet 文件中。
将应用程序放在 https 上的页面上将进一步保护 .xap 的传输
如果可能,需要身份验证才能查看网页/.xap 文件(感谢 Joel)
恩拉,
是的,SL 应用程序可以进行混淆。
是的,Silverlight xap 文件只不过是包含您的程序集的 zip 文件,因此它们确实需要通过混淆进行保护。试试Crypto Obfuscator - 它直接混淆 xap 文件,它还可以通过重命名类引用、剥离注释、空格、换行符等来混淆程序集中的 XAML 文件