Искусство распаковки. Потрошим защиту хитрого банкера GootKit - «Новости»
Меню
Наши новости
Учебник CSS

Невозможно отучить людей изучать самые ненужные предметы.

Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3

Надо знать обо всем понемножку, но все о немногом.

Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы

Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)

Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода

Самоучитель CSS

Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5

Новости

Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости

Справочник CSS

Справочник от А до Я
HTML, CSS, JavaScript

Афоризмы

Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы

Видео Уроки


Наш опрос



Наши новости

       
13-08-2018, 18:00
Искусство распаковки. Потрошим защиту хитрого банкера GootKit - «Новости»
Рейтинг:
Категория: Новости

");
}else{
$('#mpu1-desktop').remove();
console.log('mpu1-desktop removed');
}
});

Распаковка исполняемых файлов — одна из задач, возникающих при реверсе. И если наш объект — это малварь, то зачастую приходится сталкиваться с кастомными упаковщиками. В этой статье я покажу, как справиться с защитными механизмами банкера GootKit, который постоянно развивается и апгрейдится, к тому же использует разные методы сопротивления отладке.


Искусство распаковки. Потрошим защиту хитрого банкера GootKit - «Новости»
INFO

В прошлой статье мы пробежались по азам вскрытия кастомных пакеров, взяв для примера вымогатель GlobeImposter 2.0. Он практически не сопротивлялся распаковке и кое-чем даже помогал в этом деле.



Из инструментария мы будем использовать отладчик x64dbg (его 32-битную версию x32dbg), интерактивный дизассемблер IDA, шестнадцатеричный редактор HxD и детектор пакеров и протекторов DiE. Мы будем противостоять антиотладке при помощи мьютексов и разберемся с нестандартными параметрами функции CreateFileA.



WARNING

Все описанные в статье действия выполнялись внутри виртуальной машины, которая была изолирована от сети. Повторение действий на основном компьютере может привести к заражению банкером GootKit, способным похитить твои данные.




Для начала давай посмотрим на GootKit через программу Detect it Easy.



Нераспакованный образец GootKit

Детектор не определяет никакой навесной защиты, зато энтропия файла зашкаливает.



Энтропия GootKit

Загружаем файл в дизассемблер для более интимного знакомства. Видим, что при входе у нас сразу идет вызов подпрограммы. Прыгаем в него и наблюдаем достаточно интересный код.



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


Чтобы самостоятельно убедиться в этом, можешь скомпилировать и посмотреть в IDA простую программу, которая использует эту технику вызовов. Конечно, код будет более «чистый» и понятный, но общая суть очевидна.


int main()
{
typedef NTSTATUS(WINAPI *pNtQueryInformationProcess)(HANDLE, UINT, PVOID, ULONG, PULONG);
ULONG dProcessInformationLength = 0;
PVOID DbgPort;
pNtQueryInformationProcess pNtQueryInfoProcess = (pNtQueryInformationProcess)GetProcAddress(LoadLibrary(L"ntdll.dll"), "NtQueryInformationProcess");
NTSTATUS Status = pNtQueryInfoProcess(GetCurrentProcess(),7,&DbgPort,dProcessInformationLength,NULL);
if (Status == 0x00000000) return 0;
return 0;
}

Давай переключимся в псевдокод, нажав кнопку F5, так будет еще очевиднее.



Псевдокод

Инициализация и вызов функций выглядит таким образом:


v3 = v1(byte_41F00C, byte_41F0F8);
v33 = (void (__stdcall *)(char *, char *))v2(v3);
v4 = v1(byte_41F00C, byte_41F0EC);
v32 = (int (__stdcall *)(char *))v2(v4);
v5 = v1(byte_41F0A4, byte_41F0B0);

И тем не менее код кажется странным, хоть и очевидно, как он работает и что делает. Посмотрим перекрестные ссылки на буферах, которые передаются в функции. Вот один из буферов.



Очевидно, применяется шифрование строк при помощи XOR по ключу 89798798798g79er$. Видим шифротекст byte_41F000[edi].



Псевдокод этого алгоритма такой:


do
{
byte_41F000[v30] ^= a89798798798g79[v30 % v29];
++v30;
}
while ( v30 < 11 );
v31 = strlen(a89798798798g79);

Зная ключ, попробуем расшифровать содержимое буфера средствами Python, который встроен в IDA. Набираем


x = idc.GetManyBytes(0x41F0EC, 0x0B)

Пишем байты по адресу 0x41F0EC в количестве 0x0B в переменную encrypt. Проверим, просто введя имя переменной и нажав Enter:


Python>encrypt = idc.GetManyBytes(0x41F000, 0x9)
Python>encrypt
hJVIQl]T[

Все верно: это именно то, что мы видели в IDA. Теперь присвоим переменной y известный нам пароль и зададим переменную decrypt для выходных данных:


Python>y = "89798798798g79er$"
Python>decrypt = ""

Теперь приступим к циклу дешифровки.


Источник новостиgoogle.com

"); }else_

Теги: CSS, статье вызов будет банкера переменной

Просмотров: 869
Комментариев: 0:   13-08-2018, 18:00
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

 
Еще новости по теме:



Другие новости по теме:
Комментарии для сайта Cackle