Вы не включаете самый важный факт об атакующем: кто является атакующим ?Анализ в значительной степени зависит от ответа на этот вопрос.
Если злоумышленник пользователь , то все готово.Вы ничего не можете сделать, если злоумышленник владеет машиной. Они владеют машиной .Вы даже не знаете, работают ли они Windows или не ради бога.Они могли бы написать свою собственную операционную систему и свой собственный CLR.Даже если в CLR была система безопасности, вы не можете полагаться на нее, поскольку злоумышленник может атаковать ваш код из пользовательской среды. Код не может хранить секреты от определенного пользователя.
В этом случае все, что вы можете сделать, это (1) уменьшить преимущество атакующего, получающего секрет, и (2) повыситьцена.Как только стоимость атаки превышает выгоду от успешной атаки, рациональный атакующий сдастся.
Лучше в этом случае не делать ни того, ни другого. Не помещайте секреты на пользовательский компьютер, если вы не доверяете пользователю. Сохраняйте секреты на принадлежащем вам компьютере.
Если злоумышленник пишет враждебный код, а затем обманываетпользователь запускает код, тогда у вас есть шанс на него.Если пользователь предоставляет полное доверие враждебному коду, то враждебному коду полностью доверяют, и мы находимся в той же ситуации, что и раньше;враждебный код полностью доверенный и, следовательно, столь же мощный, как и пользователь;это то, что означает «полное доверие».
Если враждебному коду частично доверяют, то для того, чтобы ему было разрешено читать приватные члены с помощью Reflection, ему нужно предоставить разрешение Skip Visibility Checks.
В качестве альтернативы может быть предоставлен ограниченный пропуск видимости проверки;сборке, которой предоставлено RSV, разрешено просматривать личные данные любой сборки, которой предоставлено равных или меньших прав .