Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
astaroth-deobfuscator — IDA Python-скрипт для деобфускации DLL-инжектора Astaroth/Guildma | Kitploit
Инструменты/GitHubGitHub/dodo-sec/astaroth-deobfuscator
Статический анализОбратная инженерияАнализ вредоносных программАнализ Бинарных Файлов
GitHubdodo-sec/astaroth-deobfuscator

astaroth-deobfuscator

IDA Python-скрипт для деобфускации DLL-инжектора Astaroth/Guildma

Репозиторий
813 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

astaroth-deobfuscator

IDA Python-скрипт для деобфускации DLL-инжектора Astaroth/Guildma

При попытке проанализировать DLL-инжектор из недавней кампании Astaroth/Guildma (спасибо этому дневнику от SANS ISC), я столкнулся с действительно раздражающей попыткой обфускации.

Функция (которую я назвал time_waster_3000 на изображении ниже) вызывается более 1000 раз (!!!) по всей DLL. Эта функция принимает шесть жестко заданных строк в качестве аргументов, а также случайный word. Сама функция — это кроличья нора арифметики, которая не служит никакой практической цели, насколько я мог судить (кроме траты времени реверсера). Вот как выглядит DLLEntry с этими раздражающими вызовами:

Точка входа DLL до деобфускации

Цель этого IDA Python-скрипта — скрыть все блоки кода, которые содержат вызов этой мусорной функции, а также её аргументы. Вот как выглядит DLLEntry после запуска скрипта:

Точка входа DLL после деобфускации

Важные замечания

  • Скрипт работает путем поиска вызова функции-заполнителя, представленного в скрипте как call sub_CHANGEME. Поэтому вам нужно переименовать его в скрипте, указав имя функции, найденное в анализируемом сэмпле. Например, измените idc.print_operand(x, 0) == 'sub_CHANGEME' на idc.print_operand(x, 0) == 'sub_431000'.

  • Я решил перебирать инструкцию call sub_CHANGEME вместо инструкций передачи аргументов. Причина проста: жестко заданные строки присутствуют в нескольких местах двоичного файла; поэтому при поиске по инструкциям push, использующим смещения этих строк, скрипт не находил все экземпляры этих мусорных данных.

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

Скачать инструмент