Сигнатурный двиг своими руками

Итак, однажды я решил написать сигнатурный двиг, который умеет создавать сигнатуры для морфленного кода. Нет я не подался в ав-индустрию, просто это интересная инженерная задача.

Использование POC-утилиты:

SignProc.exe Path_to_file.exe
в текущей папке будет создан base.txt = это наша база.

Скачать Release0.7

cmd sign

Подробности об алгоритме работы

Поиск процедур

Самым оптимальным оказалось делить код от Ret до Ret с помощью внутреннего дизассемблера.

SignProc1

Сигнатуры по апи
Дизасмим код, если находим call ptr – парсим IAT, если находим call -> jmp ptr – парсим IAT. Таким образом находим все апи вызовы. Берем хеш от имени каждой апи и записываем его в сигнатуру.

Есть сложности с дебаг версиями, благо в вирусах это редкость.

Сигнатуры по коду

  • копируем код функции к себе и удаляем из него всё кроме опкодов – всё изменяемое релоками, все параметры опкода нас не волнуют, это спасет даже от простого морфинга. Таким образом сигнатура будет валидна при пересборке файла в другом проекте.
  • подсчитываем crc32 от этого кода

Формат базы

test:000013FE:000003F3;1:73907F71:AA3F3A53:AA3F3A53:AA3F3A53:40FDAC42:75F10E52
test:0000181F:0000001C;0:0000001C:90134086
 
meta;sign_type:sign
sign 0 - proc_size:proc_hash
sign 1 - api_hash:api_hash:api_hash:api_hash (...)

Подведём итоги

Решил разгрести хлам на харде, давайте проследим историю клонирования Zeus:

zeus new sign: 336 old sign: 0

iceX new sign: 44 old sign: 296

citadel new sign: 305 old sign: 215

mmbb new sign: 209 old sign: 158

zeus_tor new sign: 562 old sign: 40

2 thoughts on “Сигнатурный двиг своими руками

Добавить комментарий