Фреймворк криптора/протектора с антиэмуляцией

Кто просматривает этот контент: "Тема" (Всего пользователей: 0; Гостей: 2)

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
5 641
Репутация
194
Jabber
#11
Просто проверку делать бесполезно, важно что-бы это использовалось в коде.

Вот например, недостаточно просто выделить какой-то большей кусок памяти, и проверять на Null, эмулятор зайдет в две ветки.

А вот если использовать этот кусок, например посчитать контрольную сумму, использовать эту сумму где-то, то эмулятор ожидает сюрпиз.

В таком ключе и нужно пробовать варианты, слип и т.д. самое простое, но понятно есть минусы, задержки при запуске, могут-быть критичны.
 

Gerion

Пользователь
Первый уровень
Регистрация
12.05.2019
Сообщения
6
Репутация
1
#12
Просто проверку делать бесполезно, важно что-бы это использовалось в коде.

Вот например, недостаточно просто выделить какой-то большей кусок памяти, и проверять на Null, эмулятор зайдет в две ветки.

А вот если использовать этот кусок, например посчитать контрольную сумму, использовать эту сумму где-то, то эмулятор ожидает сюрпиз.

В таком ключе и нужно пробовать варианты, слип и т.д. самое простое, но понятно есть минусы, задержки при запуске, могут-быть критичны.
Хм, ясно. Уже есть идеи как защитить файл от периодического сканирования ав процессов? Если да, боюсь скоро это решение может стать одним из лучших пабликов)
 

virt

Уважаемый пользователь
Форумчанин
Регистрация
24.11.2016
Сообщения
501
Репутация
167
Jabber
#13
Уже есть идеи как защитить файл от периодического сканирования ав процессов?
Тут только морфить код, как это автоматизировать вопрос. Если есть исходник, это сделать проще, например можно делать шифрование/расшифрование функции отвечающей за криптовку, кстати хороший метод, можно добавить в следующие релизы.

Также можно все функции отвечающие за антиэмуляцию вынести в отдельный молуль и постепенно расширять его в следующих релизах проекта.

Ну и сделать опции, например если выделять блок памяти, то в опциях сделать настраиваемо размер этой памяти, также в опциях включение/отключение различных методов работы.

Вообще все методы антиэмуляции лучше делать включаемо/отключаемо, что-бы можно-было легко включить/отключить и добавить новые функции.)
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
5 641
Репутация
194
Jabber
#14
Обновил проект:

1)Нод уже начал детектить, примечательно, что детектить стал модуль: modules/trash_gen_module:

Уж незнаю, кто задетектил автоматика, либо аналитик ?

Задетектил как-то странно, даже не объектник, а файл modules/trash_gen_module/fake_api.cpp, там связанные функции:
Код:
extern "C" {
    void __cdecl  debug_print(unsigned line) {
        std::cout << "debug: " << line << "\n";
    }
};

extern "C" {
    void __cdecl do_fake_instr(void);
}

extern "C" {
    uint32_t __stdcall do_Random_EAX(uint32_t min, uint32_t max);
}
Для лечения от жадности, просто убрал:
Код:
extern "C" {
    void __cdecl  debug_print(unsigned line) {
        std::cout << "debug: " << line << "\n";
    }
};
Dmeh-Smeh-Smeh!!!Можно автоматизировать, добавляя в модули похожим образом функции.Dmeh-Smeh-Smeh!!!

2)Добавил модуль /modules/antiemul

3)Теперь:

Теперь по умолчанию происходит выделение памяти 32 мегабайт памяти, копирование туда нашего зверька, потом подсчет хеша этого куска памяти, шифровка/расшифровка этого куска памяти, в качестве ключа наш хеш.Эта-же память используется для размещения нашего зверька.

4)Поправил ошибку.
 

skales007

Житель форума
Форумчанин
Регистрация
26.03.2019
Сообщения
7
#15
Вчера опытным путем нашёл ещё один более менее действенный антиэмуль. Не знаю как точно сделать это на плюсах, но на асме довольно просто. Вобщем смысл такой, создаём цикл типа for, со знанием счётчика, например 16,000,000. Выход из цикла по 0. Но! В самом цикле, к примеру на каждых 500000 генерируем один байт из ключа и когда ключ создан, выходим из цикла досрочно.
Авер пропускает этот цикл и, соответственно, не рассчитывает ключ, и не может расшифровать полезную нагрузку. Также можно и точку входа в функцию рассчитывать.
 

EH20

Житель форума
Форумчанин
Регистрация
28.12.2018
Сообщения
22
Репутация
5
#16
Обновил проект:

1)Нод уже начал детектить, примечательно, что детектить стал модуль: modules/trash_gen_module:

Уж незнаю, кто задетектил автоматика, либо аналитик ?

Задетектил как-то странно, даже не объектник, а файл modules/trash_gen_module/fake_api.cpp, там связанные функции:
Код:
extern "C" {
    void __cdecl  debug_print(unsigned line) {
        std::cout << "debug: " << line << "\n";
    }
};

extern "C" {
    void __cdecl do_fake_instr(void);
}

extern "C" {
    uint32_t __stdcall do_Random_EAX(uint32_t min, uint32_t max);
}
Для лечения от жадности, просто убрал:
Код:
extern "C" {
    void __cdecl  debug_print(unsigned line) {
        std::cout << "debug: " << line << "\n";
    }
};
Dmeh-Smeh-Smeh!!!Можно автоматизировать, добавляя в модули похожим образом функции.Dmeh-Smeh-Smeh!!!

2)Добавил модуль /modules/antiemul

3)Теперь:

Теперь по умолчанию происходит выделение памяти 32 мегабайт памяти, копирование туда нашего зверька, потом подсчет хеша этого куска памяти, шифровка/расшифровка этого куска памяти, в качестве ключа наш хеш.Эта-же память используется для размещения нашего зверька.

4)Поправил ошибку.
Потому что залили на ВТ. Там же апи у антивирусных контор.
 

skales007

Житель форума
Форумчанин
Регистрация
26.03.2019
Сообщения
7
#19
Вчера опытным путем нашёл ещё один более менее действенный антиэмуль. Не знаю как точно сделать это на плюсах, но на асме довольно просто. Вобщем смысл такой, создаём цикл типа for, со знанием счётчика, например 16,000,000. Выход из цикла по 0. Но! В самом цикле, к примеру на каждых 500000 генерируем один байт из ключа и когда ключ создан, выходим из цикла досрочно.
Авер пропускает этот цикл и, соответственно, не рассчитывает ключ, и не может расшифровать полезную нагрузку. Также можно и точку входа в функцию рассчитывать.
Также с возвращаемыми значениями функций. Проверил на MessageBox(0, msg, tittle, MB_YESNO), функция возвращает по нажатии кнопки "Yes" -> IDYES ==6. Его подставляем в генерацию ключа, эмуль АВ не эмулит все возвращаемые значения, вот и получаем опять антиэмуляция. Но это как пример, в реальности в крипторе месседж бокс не есть хорошосмех-смех!!!
 

virt

Уважаемый пользователь
Форумчанин
Регистрация
24.11.2016
Сообщения
501
Репутация
167
Jabber
#20
Надо было не заливать на ВТ... i'm crazy
Надо полиморфизм сделать, т.е. перед компиляцией, в момент например когда генерируется шифрованный код в shell_gen.exe или отдельную функцию написать, которая будет генерировать сишный код, и размещать его в случайном порядке во все модули.

Тогда, все объектники будут разные, также как и данные. Тут-уже сложно будет сделать детект.

Надо добавить в следующие версии.
 
Вверх