
Автоматический анализ SWF-файлов на основе некоторых эвристик. Расширяемо с помощью плагинов.
ПРИМЕЧАНИЕ: Следующие инструкции предназначены для Python3.
Если вам необходимо установить FLASHMINGO на Python2.7, вы можете посмотреть релиз 1.0 на вкладке releases. Шаги установки в основном те же.
Установите пакеты Python3, перечисленные в requirements.txt.
Вы можете использовать следующую команду: pip3 install -r requirements.txt
Если вы хотите использовать функциональность декомпиляции, вам необходимо установить Jython. Пользователи Ubuntu/Debian могут выполнить apt install jython
Клонируйте проект или скачайте zip-файл.
FLASHMINGO — это аналитический фреймворк для SWF-файлов. Инструмент автоматически проводит триаж подозрительных Flash-файлов и направляет дальнейший процесс анализа, освобождая ценные ресурсы в вашей команде. Вы можете легко включить аналитические модули FLASHMINGO в свой рабочий процесс.
До сих пор криминалистам и аналитикам вредоносного ПО приходится иметь дело с подозрительными SWF-файлами. Если история повторится, угроза безопасности может даже возрасти после окончания срока службы Flash в 2020 году. Системы будут продолжать поддерживать устаревший формат файлов, который больше не будет обновляться патчами безопасности. Автоматизация — лучший способ справиться с этой проблемой, и здесь вам может помочь FLASHMINGO. FLASHMINGO — это аналитический фреймворк для автоматической обработки SWF-файлов, который позволяет помечать подозрительные образцы Flash и анализировать их с минимальными усилиями. Он интегрируется в различные аналитические процессы как самостоятельное приложение или мощная библиотека. Пользователи могут легко расширять функциональность инструмента с помощью пользовательских плагинов на Python.
FLASHMINGO спроектирован с учетом простоты. Он читает SWF-файл и создает объект (SWFObject), представляющий его содержимое и структуру. Затем FLASHMINGO запускает серию плагинов, работающих с этим SWFObject и возвращающих свои значения в основную программу.
Ниже обязательная диаграмма потоков в ASCII-графике:
+----------+
| |
+------------+----------->+ PLUGIN 1 +------------+
| | | | |
| | +----------+ |
| | |
| | +----------+ |
| | | | |
+---------+ | +----------->+ PLUGIN 2 +--------+ |
|SWF FILE +----------->+ FLASHMINGO | | | | |
+---------+ | | +----------+ | |
| | | |
| | | |
| | | |
| | +-----v---v-+
| | | |
| | | |
+-----+------+------------------------->+ SWFOBJECT |
^ | |
| | |
| +-----+-----+
| |
| |
| |
+---------------------------------------+
При использовании FLASHMINGO в качестве библиотеки в ваших собственных проектах вам нужно заботиться только о двух типах объектов:
SWFObject(ов), представляющих образец(ы)Flashmingo. Он действует как обвязка, соединяющая плагины и SWFObject(ы).Плагины FLASHMINGO хранятся в собственных каталогах внутри... вы угадали: plugins
Когда создается объект Flashmingo, он проходит по этому каталогу и обрабатывает манифесты всех плагинов. Если манифест указывает, что плагин активен, он регистрируется для последующего использования. На уровне кода это означает, что небольшой словарь plugin_info добавляется в список plugins.
Плагины вызываются через API run_plugin с двумя аргументами:
SWFObjectОпционально большинство плагинов позволяют передавать собственные пользовательские данные. Это зависит от плагина (читайте документацию) и легче всего объясняется на примере.
Плагин по умолчанию SuspiciousNames ищет во всех пулах констант строки, содержащие подозрительные подстроки (например: 'overflow', 'spray', 'shell' и т.д.). В плагине уже жестко задан список распространенных подстрок, так что его можно использовать «как есть». Однако вы можете передать список собственных подстрок, в данном случае через параметр names.
Пример кода:
fm = Flashmingo()
print fm.run_plugin('DangerousAPIs', swf=swf)
print fm.run_plugin('SuspiciousNames', swf=swf, names=['spooky'])
FLASHMINGO поставляется с некоторыми полезными плагинами «из коробки»:
Предоставляется шаблон плагина для легкой разработки. Расширение FLASHMINGO довольно простое. Выполните следующие простые шаги:
runВы готовы к работе :)
docs для автоматически сгенерированной документации$ pip install sphinxcontrib-napoleon
После настройки Sphinx для сборки вашей документации включите napoleon в файле Sphinx conf.py:
В conf.py добавьте napoleon в список расширений
extensions = ['sphinxcontrib.napoleon']
Используйте sphinx-apidoc для сборки вашей API-документации:
$ sphinx-apidoc -f -o docs/source projectdir
Это создаст файлы .rst для обработки Sphinx
$ make html
Вот и всё! :)