如何限制某些assembly的reflection?

在我的.net应用程序中,我想限制对某些程序集的reflection。 我的意思是我想要一个特定的程序集只能通过一些预定义的程序集来反映,而不是通过任何其他程序集。 我怎样才能做到这一点?

编辑:

此工具完全关闭.NET反汇编和程序集的反编译。 我想允许一些预定义的程序集来反映这个程序集,但是限制其他人这样做。 我想要一些应该被声明为汇编的东西,例如,AssemblyOne已经允许你可以反映我的AssemblyTwo,所以只有AssemblyTwo应该能够完全信任它,而不是其他人。

您链接的工具基本上将整个应用程序编译为本机代码。 这并没有真正“关闭”reflection或其他任何东西,它只是将应用程序变成完全不同的东西,它不再是字节码,而不再是技术上的.NET程序集。

具有完全信任的呼叫者始终可以在.NET程序集及其内部的所有内容上使用reflection。 除了(a)混淆,任何有足够耐心和决心的人都可以去混淆,或者(b)编译成本机代码,这会阻止任何reflection(以及许多其他有用的function),你无法防止这种情况发生。发生了,你肯定不能将它限制在特定的程序集。

与其他答案所说的相反, ReflectionPermissionAttribute 不会阻止调用者反映您的代码; 相反,它控制该代码 Reflection API的访问。 这里没有任何帮助。

为什么隐藏代码或类结构如此重要? 除非您为NSA工作,否则大多数代码都没有那么有价值/秘密,并且在给定足够时间和资源的情况下,大多数应用程序很容易进行逆向工程。 实际上,攻击者或抄袭者通过从Reflector中复制代码和/或使用Reflection来发现您的API,从而获得的收益很少。

我想我只能为自己说话,但是给予一天免费实现一个很酷的function或投资试图保护内部代码,我总是会努力实现真正增加价值的新function。

如果此人完全信任程序集,则无法阻止他们访问程序集的任何部分。

http://www.pcreview.co.uk/forums/thread-2196297.php

反思是不可抗拒的! 🙂

除了编写本机代码之外,我认为你不能阻止reflection。 而且,这可以被拆解。 如果您需要在未经授权的人手中保留一些代码,请将其保存在您控制的服务器上并允许远程访问它。

我想知道你想要限制反思的场景是什么。 您是否担心将一些超级秘密数据暴露在您的代码库中? 一些非常聪明的代码,你有一些优势吗?

我问的原因是我只是不相信我们在软件开发中所做的任何事情本身在代码库级别都是如此独特,以至于它需要人们不去看它 –所以我想知道你是否走错了路。 既然你没有提到为什么要阻止reflection,我不知道你的场景是否有意义(至少从我的POV)限制访问。

我无法想象一个现实世界的场景,限制访问真的会在任何地方得到 – 这不是现在制造系统的任何特定代码块的光彩,它是完整的包(用户体验,客户服务,快速进化保持)使用速度等)。 如果您的代码有任何好处,它会随着时间的推移而发生变化,这样任何人“破解”它将比当前迭代(至少)落后两步。 你的价值是你的大脑,而不是大会。

如果你出于安全原因这样做,那么你真的不应该试图通过阻止reflection来“保护”它。

再一次,你可能有一个有效的理由阻止我没有想到的反思,但我更怀疑它值得付出努力而且我倾向于相信你的能量会更好地花在其他地方……就像你编写代码一样想要阻止更好。