• Уменьшение отступа

    Обратная связь

    (info@ru-sfera.pw)

Малварь как искусство Как обфусцировать вызовы WinAPI


Nik Zer0f

Пользователь
Первый уровень
Регистрация
04.11.2019
Сообщения
12
Репутация
5
Вообще по хорошему в движке не должно быть любых внешних функций, типо lstrcmpiW, ибо движок-обфускатор не должен обнаруживать свое присутствие захардкоженными функами. То же касается и строк(имена библиотек и прочее), они должны не читаться в файле. И желательно сохранять независимость от CRT.
 
Последнее редактирование:

Jefferson

Уважаемый пользователь
Форумчанин
Регистрация
09.06.2019
Сообщения
63
Репутация
35
Вообще по хорошему в движке не должно быть любых внешних функций, типо lstrcmpiW, ибо движок-обфускатор не должен обнаруживать свое присутствие захардкоженными функами. То же касается и строк(имена библиотек и прочее), они должны не читаться в файле. И желательно сохранять независимость от CRT.
Написал недавно.
Вроде всё, что тебе нужно на месте.
Правда, есть косяк, но не могу понять в чём именно.
Если искать, к примеру, LoadLibraryA(kernel32.dll) - адрес находит корректно, а если попробовать найти HeapAlloc/Free - краш
 

Вложения

  • HideWINAPI.rar
    70.7 КБ · Просмотры: 15

Edith Wooten

Уважаемый пользователь
Форумчанин
Регистрация
17.04.2019
Сообщения
108
Репутация
22
Написал недавно.
Вроде всё, что тебе нужно на месте.
Правда, есть косяк, но не могу понять в чём именно.
Если искать, к примеру, LoadLibraryA(kernel32.dll) - адрес находит корректно, а если попробовать найти HeapAlloc/Free - краш
asm вставки не работают вроде бы в x64
 

Nik Zer0f

Пользователь
Первый уровень
Регистрация
04.11.2019
Сообщения
12
Репутация
5
а если попробовать найти HeapAlloc/Free - краш

Хм. У меня аллокации памяти робили, если я не ошибаюсь. А так вообще - отладчик в руки, так то сказать сложно. Ставь брейки в коде и смотри.

asm вставки не работают вроде бы в x64

Ога, там нужно в отдельном файле асм-код цеплять)
 

virt

Просветленный
Просветленный
Регистрация
24.11.2016
Сообщения
706
Репутация
228
@Nik Zer0f, привет.

Решили глянуть где используется движок и нашли эту тему ?)

Да, используется в основном в протекторах и вирусах.

Детект само по себе это несобьет, т.к. антивирусы всё-равно эмулируют апи, зато полезно от любителей исследовать зверьков, например в том-же вирустотале можно посмотреть какие API используются, а тут типо всё "чистенько", ну и усложняет исследования-да.

Про ассмеблер, да в новых студиях нужно инкапсулировать ассемблерный код, это необходимо для безопасности, ну и удобно сделав один раз ассемблерную функцию, её можно подключать где угодно в проекте, так-же нужно помнить, что ассеблер под x86 может незавестись под x64 всё-же там другая адресация, другие регистры и т.д., поэтому лучше опять-так делать разные ассемблерные модули для каждой платформы.

З.Ы. Кто-нить отлаживается принтефом, особенно прикольно отлаживать принтф, принтефом....Dmeh-Smeh-Smeh!!!
 

Nik Zer0f

Пользователь
Первый уровень
Регистрация
04.11.2019
Сообщения
12
Репутация
5
Решили глянуть где используется движок и нашли эту тему ?)

Не, я на гитхабе наткнулся практически случайно:)

Детект само по себе это несобьет, т.к. антивирусы всё-равно эмулируют апи

Чем меньше маркеров будет, тем лучше. Например в у вас в форке есть кусок:

Код:
auto mdl = (LDR_MODULE*)mlink;
    do
    {
        mdl = (LDR_MODULE*)mdl->e[0].Flink;

        if (mdl->base != nullptr)
        {
            if (!lstrcmpiW(mdl->dllname.Buffer, L"kernel32.dll")) //сравниваем имя библиотеки в буфере с необходимым
            {
                break;
            }
        }
    }

Что не есть гуд. Ибо в макете его можно юзать для демонстрации, а в реале не стоит юзать lstrcmpiW. Лучше накастылять что то вроде:

Код:
    do
    {
        mdl = (LDR_MODULE*)mdl->e[0].Flink;

        if (mdl->base != NULL)
        {
            if ((GetHashBase(mdl)) == (0x5d23cc39))    // KERNEL32.DLL
            {
                break;
            }
        }
    } while (mlink != (INT_PTR)mdl);

Код:
DWORD GetHashBase(LDR_MODULE* mdll)
{

    char name[64];

    size_t i = 0;

    while (mdll->dllname.Buffer[i] && i < sizeof(name) - 1)
    {
        name[i] = (char)mdll->dllname.Buffer[i];
        i++;
    }

    name[i] = 0;

    return MURMUR_HASH(name, API_STRLEN(name), HASHING_SEED);
}

ЗЫ

Сорьте за качество кода, я его рипаю и пытаюсь просто суть показать.
 

virt

Просветленный
Просветленный
Регистрация
24.11.2016
Сообщения
706
Репутация
228
Сорьте за качество кода, я его рипаю и пытаюсь просто суть показать.
Думаю про качество кода можно не переживать, суть донести достаточно.
Тут явно не место элитных кодеров...)
 
Автор темы Похожие темы Форум Ответы Дата
X-Shar Технологии создания невидимой малвари 0
Spectrum735 Технологии создания невидимой малвари 8
X-Shar Технологии создания невидимой малвари 1
X-Shar Технологии создания невидимой малвари 0
G Технологии создания невидимой малвари 6
virt Технологии создания невидимой малвари 2
virt Технологии создания невидимой малвари 1
X-Shar Технологии создания невидимой малвари 4
X-Shar Технологии создания невидимой малвари 5
Верх Низ