gpt4 book ai didi

c# - 通过 PublicKeyToken 防止外部程序集注入(inject)

转载 作者:可可西里 更新时间:2023-11-01 08:47:57 26 4
gpt4 key购买 nike

我正在使用以下代码:

AppDomain.CurrentDomain.AssemblyLoad += (sender, args) =>
{
var token = args.LoadedAssembly.GetName().GetPublicKeyToken();

if (!IsValidToken(token))
{
Process.GetCurrentProcess().Kill();
}
};

其中 IsValidToken() 将正在加载的程序集的公钥 token 与在我的应用程序中硬编码为字节数组的授权公钥 token 列表进行比较。

这是防止代码注入(inject)攻击的良好安全措施吗?另外,考虑到我稍后会使用 NetReactor 混淆我的应用程序,这是否有必要?我正试图阻止对我的应用程序的任何“窥探”,不仅来自窥探工具,还来自任何外部不需要的来源。

最佳答案

乍一看,我会说“不,这还不够”。

原因:

  • CreateRemoteThread 攻击是直接的 win32 调用,没有像这样会触发检测器的托管代码跟踪

  • 我认为可以在注入(inject)的 dll 中创建另一个 AppDomain,从而完全绕过此检查。然后可以从该 AppDomain 执行代码,可能(我必须仔细考虑)通过 AppDomain.DoCallback< 回调“主”AppDomain/

  • Process.Kill 是一种可怕的删除应用程序的方式,尽管它是一种不可捕获的方式 - 也就是说,任何附加的人都无法阻止它(它在底层使用 Win32 TerminateProcess)

我必须拿出我的“注入(inject)器”工具来测试这些语句,如果我能记得我把代码放在哪里...

不管这些 - 你绝对想混淆这个程序集的 hell ,特别是如果你计划在里面存储敏感位(事实上,我反对存储任何敏感程序集内的信息(如果可以的话)——你的预防方法绝对不会阻止任何反汇编程序,如 Reflector、ILSpy、dotPeek 等。

关于c# - 通过 PublicKeyToken 防止外部程序集注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13372057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com