我有以下两个问题:
一个
很久以前,我只需在文本编辑器中打开二进制文件即可查看可执行文件中的常量。这还有可能吗?换句话说,对于诸如类库 DLL 或基本 Windows 窗体可执行文件之类的应用程序类型,是否需要使用秘密管理器来防止参数被暴露?
两个
我发现所有关于实现秘密的教程对于初学者来说都很难理解,但到目前为止我已经了解了
Private Function getTwilioParam(paramName As String) As String
Dim result As String = "getTwilioParam Failed"
Dim builder As New ConfigurationBuilder()
builder.AddUserSecrets(Of TypeOf(Startup.GetTypeInfo().Assembly)) () ' I can't tell what to put in for "ProjectType"
Dim configuration As IConfigurationRoot = builder.Build()
'' Access secrets
If paramName = "acctSID" Then result = configuration("Twilio:acctSID")
If paramName = "authToken" Then result = configuration("Twilio:authToken")
Return result
End Function
对于 .net 类库 (dll) 或独立可执行文件,我无法弄清楚 .AddUserSecrets 的参数应该是什么。
任何提示将不胜感激。
很久以前,我只需在文本编辑器中打开二进制文件即可查看可执行文件中的常量。这还有可能吗?
是的,尽管简单的文本编辑器可能会被非 ASCII 兼容的编码方案所困扰 - 但这并不是说您应该考虑任何类型的保护或混淆,因为它不是:像 IDA Pro、Ghidra 和WinDbg 是免费的,功能极其强大,并且拥有许多知识渊博的用户;因此,即使是微软也懒得去混淆他们的可执行文件。
换句话说,对于诸如类库 DLL 或基本 Windows 窗体可执行文件之类的应用程序类型,是否需要使用秘密管理器来防止参数被暴露?
严格的规则是,您不得在程序中嵌入或硬编码任何类型的秘密、密码、密钥、令牌或任何此类内容 - 即使它以任何加密形式存储,无论你认为你的混淆有多强烈。
相反,您的软件应该在设置或配置阶段提示用户输入密钥/密码/秘密,并且您应该在侧通道(例如电子邮件或在线门户)中分发这些秘密,用户可以在其中复制-并粘贴它们。然后,您的软件应使用系统提供的受保护存储系统来存储这些静态机密(例如 Windows DPAPI 或 .NET 的
ProtectedData
API)。这样做意味着您还可以将机密与个人用户相关联,这可能对您有利,因为这会阻止他们泄露或释放它们 - 无论如何,它有助于保护这些机密免受可能损害您用户的帐户/安全/的恶意攻击者的侵害。等等;
但是请记住,如果您的用户在他们的计算机上运行您的软件,那么您就无法对自己的用户保守秘密,这就是为什么 DRM 总是注定会被破解的原因 最终。