ESCalator
3.98K subscribers
228 photos
1 video
1 file
96 links
Tips and tricks от команды экспертного центра безопасности Positive Technologies (PT ESC)
加入频道
👏 Раз-два — и готово. Генерируем 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
...


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


\path\sigmake.exe -n"PureBasic_Windows_X86_LTS_6.03" \path\PureBasic_x86.pat \path\PureBasic_x86.sig


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

— 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


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

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


_PB_WriteFloat@8 0B 5366........E8........85C0742D83780400
+_PB_WriteInteger@8 0B 5366........E8........85C0742D83780400
_PB_WriteLong@8 0B 5366........E8........85C0742D83780400


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

Нужно также удалить строку --------- в 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


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


%IDA Home%\sig\pc


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