【发布时间】:2012-11-14 02:12:18
【问题描述】:
我正在使用以下代码:
AppDomain.CurrentDomain.AssemblyLoad += (sender, args) =>
{
var token = args.LoadedAssembly.GetName().GetPublicKeyToken();
if (!IsValidToken(token))
{
Process.GetCurrentProcess().Kill();
}
};
IsValidToken() 将正在加载的程序集的公钥令牌与在我的应用程序中硬编码为字节数组的授权公钥令牌列表进行比较。
这是防止代码注入攻击的良好安全措施吗?此外,考虑到我稍后将使用 NetReactor 混淆我的应用程序,这是否必要?我试图防止对我的应用程序进行任何“窥探”,不仅来自 Snoop 工具,还来自任何外部不受欢迎的来源。
【问题讨论】:
-
您将很难找出完美且面向未来的有效令牌授权列表。您可能会对您的有效用户产生不希望的副作用(例如受版权保护的 CD 的问题,这些问题仅对购买它的人来说是个问题......)。同时,优秀的黑客会反汇编整个代码,然后用 nops 修补代码。
标签: c# .net-4.0 assemblies code-injection