[ << ALL_FEED ]

Раз-два — и готово. Генерируем FLIRT-сигнатуры

Ещё в группе «Общее»

👏 Раз-два — и готово. Генерируем FLIRT-сигнатуры

А делаем это, чтобы не тратить время на распознавание библиотечного кода PureBasic, на котором написан COM-DLL-Dropper группировки ExCobalt.

Для начала нам понадобится компилятор PureBasic. Скачав его и установив или распаковав, найдем все .lib-файлы. Далее нам понадобятся входящие в состав Flair инструменты:

— pcf — парсер файлов .lib и .obj, создает PAT-файл из COFF-файлов.
— sigmake — конвертирует ранее созданный PAT-файл в SIG-файл для IDA.

С их помощью мы и сгенерируем сигнатуры. Чтобы автоматизировать создание PAT-файла, будем использовать BAT-файл со следующим содержимым:


@echo off

\path\pcf.exe -a \path\Debugger.lib 
\path\PureBasic_x86.pat
\path\pcf.exe -a \path\libmariadb.lib 
\path\PureBasic_x86.pat
...
Code language: plaintext (plaintext)

После получения PAT-файла нам нужно преобразовать его в SIG-файл. Для этого выполним следующую команду:

\path\sigmake.exe -n"PureBasic_Windows_X86_LTS_6.03" \path\PureBasic_x86.pat \path\PureBasic_x86.sig
Code language: plaintext (plaintext)

Так как произошли коллизии при генерации сигнатур, получаем следующий список файлов:

— PureBasic_x86.err,
— PureBasic_x86.exc,
— PureBasic_x86.pat.

При отсутствии коллизий сразу получили бы готовый SIG-файл. Для их устранения нужно отредактировать EXC-файл. Пример коллизии:


_PB_WriteFloat@8 0B 5366........E8........85C0742D83780400
_PB_WriteInteger@8 0B 5366........E8........85C0742D83780400
_PB_WriteLong@8 0B 5366........E8........85C0742D83780400
Code language: plaintext (plaintext)

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

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


_PB_WriteFloat@8 0B 5366........E8........85C0742D83780400
+_PB_WriteInteger@8 0B 5366........E8........85C0742D83780400
_PB_WriteLong@8 0B 5366........E8........85C0742D83780400
Code language: plaintext (plaintext)

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

Нужно также удалить строку ——— в EXC-файле, чтобы выбор учитывался при повторной генерации сигнатур:


;--------- (delete these lines to allow sigmake to read this fil
; add '+' at the start of a line to select a module
; add '-' if you are not sure about the selection
; do nothing if you want to exclude all modules
Code language: SQL (Structured Query Language) (sql)

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


%IDA Home%\sig\pc
Code language: plaintext (plaintext)

#reverse #tips #ComDllDropper #ExCobalt #APT #TI
@ptescalator

Ещё от ti_author

Ещё от ti_author

Ещё в группе «Общее»