Предисловие
ВСЁ, ЧТО НАПИСАНЫ НИЖЕ - БОЛЬНАЯ ФАНТАЗИЯ АВТОРА И НЕ ПРАВДА. АВТОР НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ИСПОЛЬЗОВАНИЕ ИНФОРМАЦИИ В НЕЗАКОННЫХ ЦЕЛЯХ. ВСЕ СОВПАДЕНИЯ И Т.Д. - СЛУЧАЙНОСТЬ.
Итак, сегодня аверы немного поумнели и теперь протекторы, крипторы и т.д. уже не так спасают, как это было раньше)
Они выполняют скорее функцию защиты от реверсера, и то, всё зависит от его скилов
ПОЧЕМУ всё так происходит? - потому что у авера, помимо сигнатур, есть еще эвристика и поведенческий анализ
Начнем с отличия (кто считает, что всё работает по другому - считайте. О терминах не спорят, а договариваются)
Эвристика - исследование исполняемого файла в эмуляторе АВ. Эмулятор - штука, которая просто возвращает какое-то значение каждой функции, чтобы перейти к следующей, проходя таким образом все пути выполнения проги. НЕДОСТАТОК: ограничение по времени и эмуляция возвращаемых значений (как бы не было это странно - но фишку эту можно неплохо использовать)
Поведенческий анализ - исследование процесса в памяти. Тут АВ начинает хучить ваши функции и проверять их, путь проги и т.д. Также он чекает ФС, реестр и много другое - но это не сегодня)
Ну и немного о статике: поксорить код и всё. не думаю, что надо вдаваться в подробности, но для особо ленивых вот код
Теперь перейдем к обходу эвристики:
Как бы это странно не звучало - но функция Sleep вас не спасет, ибо АВ сэмулирует изменение времени и всё)
Можно играть на использовании особенности эмулятора: запросить хендлер несуществующего процесса и посмотреть дали его или нет
Что касается времени - цикл с вычислением числа пи с точностью 1000000000000 - вполне подойдет
Поведение - тут полько обфускация, полиморфный код и т.д.
ЧТО ЕЩЕ МОЖНО СДЕЛАТЬ?
- Обфусфировать точку входа
- Объединить данные и код в одной секции (кода естественно))
- !!!!НЕ РАСШИРЯТЬ СЕКЦИИ!!! (кроме кода))
- Неявно вызывать winapi (Найти kernel32, ntdll можно в PEBe, оттуда искать нужные функции через хеш)
- Делать анхуки (снять хуки авера)
- ВСЕГДА ШИФРОВАТЬ ПЕЙЛОАД!!!!
САМОЕ ГЛАВНОЕ!!!
НИКОГДА НЕ ТЕСТИРУЙТЕ БОЕВОЙ ЭКЗЕМПЛЯР В VIRUSTOTAL и на аверах, подключенных к инету
Думаю очевидно, что все семплы отправляются на анализ и там уже выйдет сигна, которая даст вам под хвост)
Если хотите нормально тестить - скачайте YARA правила и прогоните по ним
Вот самые простые: https://github.com/Neo23x0/signature-base/
Или используйте авер, но без доступа в инет
Конечно, он не таким жестким будет, но что-то да может увидеть)
ПО ИНЖЕКТАМ, ИЗМЕНЕНИЯМ В ПЕБАХ И Т.Д.:
Специально не стал тут всё писать, потому что считаю, что надо отделять мух от котлет
Всё таки сам код инжекта - уже не очень хороший, а значит для него надо сделать всё вышеописанное)
НА ПОСЛЕДОК:
Всё, что описано выше - не универсальность, да и просто теория для тех, кто ничего в теме не знает, но ему это очень интересно)
Конечно, ВСЁ ЗАВИСИТ ОТ СИТУАЦИИ!!! Разные аверы работают по разному, разные версии есть и т.д.
Я посторался просто описать тот минимум, который достаточен для входа в тему
ВСЁ, ЧТО НАПИСАНЫ НИЖЕ - БОЛЬНАЯ ФАНТАЗИЯ АВТОРА И НЕ ПРАВДА. АВТОР НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ИСПОЛЬЗОВАНИЕ ИНФОРМАЦИИ В НЕЗАКОННЫХ ЦЕЛЯХ. ВСЕ СОВПАДЕНИЯ И Т.Д. - СЛУЧАЙНОСТЬ.
Итак, сегодня аверы немного поумнели и теперь протекторы, крипторы и т.д. уже не так спасают, как это было раньше)
Они выполняют скорее функцию защиты от реверсера, и то, всё зависит от его скилов
ПОЧЕМУ всё так происходит? - потому что у авера, помимо сигнатур, есть еще эвристика и поведенческий анализ
Начнем с отличия (кто считает, что всё работает по другому - считайте. О терминах не спорят, а договариваются)
Эвристика - исследование исполняемого файла в эмуляторе АВ. Эмулятор - штука, которая просто возвращает какое-то значение каждой функции, чтобы перейти к следующей, проходя таким образом все пути выполнения проги. НЕДОСТАТОК: ограничение по времени и эмуляция возвращаемых значений (как бы не было это странно - но фишку эту можно неплохо использовать)
Поведенческий анализ - исследование процесса в памяти. Тут АВ начинает хучить ваши функции и проверять их, путь проги и т.д. Также он чекает ФС, реестр и много другое - но это не сегодня)
Ну и немного о статике: поксорить код и всё. не думаю, что надо вдаваться в подробности, но для особо ленивых вот код
Код:
for (int i = 0; i < sizeof(shellcode); i++)
shellcode[i] ^= key;
Теперь перейдем к обходу эвристики:
Как бы это странно не звучало - но функция Sleep вас не спасет, ибо АВ сэмулирует изменение времени и всё)
Можно играть на использовании особенности эмулятора: запросить хендлер несуществующего процесса и посмотреть дали его или нет
Что касается времени - цикл с вычислением числа пи с точностью 1000000000000 - вполне подойдет
Поведение - тут полько обфускация, полиморфный код и т.д.
ЧТО ЕЩЕ МОЖНО СДЕЛАТЬ?
- Обфусфировать точку входа
- Объединить данные и код в одной секции (кода естественно))
Код:
#pragma code_seg(push, ".text")
#pragma code_seg(pop)
unsigned char __declspec(allocate(".text")) hiddencode[]={ ... };
# а еще писать строки в таком виде, чтобы они при компиляции заменялись на movы и оставались в коде
char str[] = { 'H', 'E', 'L', 'L', 'O' };
- Неявно вызывать winapi (Найти kernel32, ntdll можно в PEBe, оттуда искать нужные функции через хеш)
- Делать анхуки (снять хуки авера)
Код:
BYTE* A = (BYTE*)GET_API(SendMessageA); // Любая функция, на которую Avast ставит ловушку
if (A[0] == 0xe9) // Если первая команда - JMP
{
// В песочнице Avast ставит ловушки с переходом на адрес, по которому записана последовательность байтов FF25 00000000 (еще один JMP)
// т.е. характерным признаком эмулятора Аваст является два последовательных JMP, E9 и FF 25 в прологе вашей функции
// В нормальном режиме Аваст также ставит хуки, но их меньше, и они ведут на адреса насильно внедренной в процесс aswhook.dll
SIZE_T W = (SIZE_T)(A + 5) + (SIZE_T)(*(INT32*)(A + 1));
if (*(WORD*)W == 0x25FF && *(DWORD*)(W + 2) == 0)
{
debug_printfA(ORANGE, "Avast CyberCapture (sandbox) detected\n");
GET_API(ExitProcess)(-1);
}
}
САМОЕ ГЛАВНОЕ!!!
НИКОГДА НЕ ТЕСТИРУЙТЕ БОЕВОЙ ЭКЗЕМПЛЯР В VIRUSTOTAL и на аверах, подключенных к инету
Думаю очевидно, что все семплы отправляются на анализ и там уже выйдет сигна, которая даст вам под хвост)
Если хотите нормально тестить - скачайте YARA правила и прогоните по ним
Вот самые простые: https://github.com/Neo23x0/signature-base/
Или используйте авер, но без доступа в инет
Конечно, он не таким жестким будет, но что-то да может увидеть)
ПО ИНЖЕКТАМ, ИЗМЕНЕНИЯМ В ПЕБАХ И Т.Д.:
Специально не стал тут всё писать, потому что считаю, что надо отделять мух от котлет
Всё таки сам код инжекта - уже не очень хороший, а значит для него надо сделать всё вышеописанное)
НА ПОСЛЕДОК:
Всё, что описано выше - не универсальность, да и просто теория для тех, кто ничего в теме не знает, но ему это очень интересно)
Конечно, ВСЁ ЗАВИСИТ ОТ СИТУАЦИИ!!! Разные аверы работают по разному, разные версии есть и т.д.
Я посторался просто описать тот минимум, который достаточен для входа в тему