代码之家  ›  专栏  ›  技术社区  ›  viky

如何限制某些程序集的反射?

  •  3
  • viky  · 技术社区  · 15 年前

    在.NET应用程序中,我希望将反射限制到某些程序集。我的意思是,我希望我的特定程序集只能由一些预定义的程序集反映,而不能由其他任何程序集反映。我该怎么做?

    编辑:

    This tool 完全关闭.NET程序集的反编译和反编译。我希望允许一些预定义的程序集反映此程序集,但限制其他程序集执行此操作。我想要一些应该声明为程序集方面的内容,例如,assemblyOne已向assemblyTwo授予您可以反映我的权限,因此只有assemblyTwo能够以完全信任的方式反映它,其他任何人都不能。

    4 回复  |  直到 13 年前
        1
  •  9
  •   Aaronaught    15 年前

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

    完全信任的呼叫者可以 总是 在.NET程序集及其内部的所有内容上使用反射。除了(a)模糊,任何有足够耐心和决心的人都可以消除模糊,或(b)编译成本地代码,这样可以防止 任何 某种反射(以及许多其他有用的特性),您不能阻止这种情况的发生,当然也不能将其限制到特定的程序集。

    这个 ReflectionPermissionAttribute 与其他答案所说的相反, 防止呼叫者反映 您的代码;相反,它控制访问 那个密码 反射API。这里没有任何帮助。

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

    我想我只能为自己说话,但是如果给我一天的时间来实现一个很酷的特性或者投资于保护内部代码,我将总是致力于开发能够真正增加价值的新特性。

        2
  •  5
  •   kemiller2002    15 年前

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

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

        3
  •  4
  •   Eddie Velasquez    15 年前

    反省是不可抗拒的!-)

    我认为除了编写本机代码之外,您不能阻止反射。尽管如此,它仍然可以被分解。如果您需要让一些代码远离未经授权的人,请将其保存在您控制的服务器上,并允许对其进行远程访问。

        4
  •  2
  •   Kevin Won    15 年前

    我想知道你的想法是为了限制思考。您是否担心暴露一些烘焙到代码库中的超级机密数据?一些非常聪明的代码块,你对它有一些优势?

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

    我想不出一个真实的场景,在这个场景中,限制访问会真正让你得到任何地方——现在,制造一个系统的不是任何特定代码块的出色之处,而是整个软件包(UX、客户服务、与使用保持同步的快速发展等)。如果您的代码是好的,那么它将随着时间的推移而改变,这样任何人“破解”它都将比您当前的迭代晚两步(至少)。 你的价值在于你的大脑,而不是组装。

    如果你这样做是出于安全考虑,那么你真的不应该试图通过阻止反射来“保护”它。

    再说一次,你可能有一个合理的理由来阻止我没有想到的思考,但我更怀疑这值得努力,我倾向于相信你的精力会更好地花在其他地方……就像制作代码一样,你想要更好地阻止它。