您没有包含有关攻击者的最重要事实:谁是攻击者?分析在很大程度上取决于这个问题的答案.
如果攻击者是用户,那么你就完成了.如果攻击者拥有机器,你无能为力.他们拥有这台机器.你甚至不知道他们是不是为了天堂而运行Windows.他们本可以编写自己的操作系统和自己的CLR.即使CLR中存在安全系统,您也不能依赖它,因为攻击者可能会从自定义环境中攻击您的代码.代码不可能保持确定用户的秘密.
在这种情况下,你所能做的就是(1)降低攻击者获得秘密的好处和(2)提高成本.一旦攻击成本超过成功攻击的好处,理性攻击者就会放弃.
虽然在这种情况下更好,但两者都没有.如果您不信任该用户,请不要在用户计算机上放置机密.将秘密保存在您拥有的机器上.
如果攻击者正在编写恶意代码,然后欺骗用户运行代码,那么你就可以了.如果用户对恶意代码给予完全信任,则恶意代码完全受信任,我们处于与以前相同的情况; 恶意代码是完全可信的,因此与用户一样强大; 这就是"完全信任"的含义.
如果恶意代码部分受信任,那么为了允许它通过Reflection读取私有成员,必须获得Skip Visibility Checks权限.
或者,可以授予限制性跳过可见性检查; 授予RSV的程序集允许查看被授予相同或更少权限的任何程序集的私有数据.