Шаг нулевой. Идея.
В один прекрасный момент у меня назрела необходимость в организации тестирования софта. Автоматизации ради и был запилен данный скрипт на Питоне.
Disclaimer. Полностью готового решения для организации своего сервиса, типа dyncheck, в статье не будет. Также просьба учесть, что скрипт находится в ранней стадии разработки и в нёммогут быть есть баги.
Шаг первый. Выбираем софт для виртуализации.
Тут вариантов не очень много: VMware Workstation Pro либо Oracle VirtualBox.
Выбор пал на VirtualBox, ибо:
- Бесплатную версию можно использовать в коммерческих целях
- Умеет снапшоты (бесплатный VMWare Workstation Player - нет)
- Во многих линуксах ставится/обновляется через пакетный менеджер
- Значительно удобнее управляется через консоль
Шаг второй. Выбираем способ автоматизации.
Управлять зоопарком будем при помощи Python. Причин для выбора языка было несколько:
1. Он довольно простой
2. Хорошая переносимость - скрипт будет работает и на Windows и на Linux.
Управлять VirtualBox’ом можно несколькими способами:
Шаг третий. Подготовка хоста.
Тип ОС на хосте значения не имеет. Работать будет как на Windows, так и на Linux (подойдёт и консоль без графики).
Потенциально должно работать и на OS X - проверить нет возможности.
Использование скрипта
Все параметры передаются скрипту через командную строку.
Обязательные параметры:
Дополнительные параметры:
Функции из скрипта можно вызывать напрямую в своих скриптах. Например:
Демо
Под Windows с многопоточностью:
Под Linux с антивирусами:
# TODO
Исходники на гитхаб
В один прекрасный момент у меня назрела необходимость в организации тестирования софта. Автоматизации ради и был запилен данный скрипт на Питоне.
Disclaimer. Полностью готового решения для организации своего сервиса, типа dyncheck, в статье не будет. Также просьба учесть, что скрипт находится в ранней стадии разработки и в нём
Шаг первый. Выбираем софт для виртуализации.
Тут вариантов не очень много: VMware Workstation Pro либо Oracle VirtualBox.
Выбор пал на VirtualBox, ибо:
- Бесплатную версию можно использовать в коммерческих целях
- Умеет снапшоты (бесплатный VMWare Workstation Player - нет)
- Во многих линуксах ставится/обновляется через пакетный менеджер
- Значительно удобнее управляется через консоль
Шаг второй. Выбираем способ автоматизации.
Управлять зоопарком будем при помощи Python. Причин для выбора языка было несколько:
1. Он довольно простой
2. Хорошая переносимость - скрипт будет работает и на Windows и на Linux.
Управлять VirtualBox’ом можно несколькими способами:
- VirtualBox SDK (есть биндинги под несколько языков, в том числе и Python)
- VirtualBox COM Interface
- VBoxManage (консольная утилита)
Шаг третий. Подготовка хоста.
Тип ОС на хосте значения не имеет. Работать будет как на Windows, так и на Linux (подойдёт и консоль без графики).
Потенциально должно работать и на OS X - проверить нет возможности.
- Ставим основной софт
- VirtualBox. Крайне желательно использовать последнюю версию и своевременно её обновлять.
- Python 3.7 или более новый.
- Устанавливаем гостевую(-ые) ОС. Рассказывать как это делать я не буду - туториалов в интернете предостаточно.
- Я поставил две Windows 10. Одна - x86, вторая - amd64 (
Ссылка скрыта от гостей).
- Активируем ОС (Опционально).
- Я поставил две Windows 10. Одна - x86, вторая - amd64 (
- Настраиваем гостевую ОС
- Ставим гостевые дополнения VirtualBox Guest Additions. Они обязательны для манипуляций с гостевой ОС.
- Создаём пользователей.
- Выключаем обновления.
- Ставим нескучные обои.
- Ставим дополнительный софт для анализа (Wireshark, софт Sysinternals, .net framework, Java, MS Office, etc).
- Делаем снапшот ОС (можно выключенной).
- Если планируется запускать несколько задач параллельно, то клонируем/устанавливаем ВМ нужное количество раз.
- Ставим антивирусы, на которых будем проверять наш зоопарк. Последовательность простая:
Ставим АВ -> Делаем снапшот (например, 'av1') -> откатываемся на чистый снапшот. Повторяем действие для каждого АВ.
ВАЖНО. Снапшоты в данном шаге нужно делать в онлайне, иначе при запуске ВМ нужно будет ждать загрузки ОС (что значительно дольше, чем восстановление "живого" снапшота).
Использование скрипта
Все параметры передаются скрипту через командную строку.
Обязательные параметры:
- file - путь к файлу для анализа
- --vms w10_x64 w10_x86 - список ВМ
- --snapshots av1 av2 av3 - список снапшотов
Код:
python demo.py \
putty.exe \
--vms w10_x64 w10_x86 \
--snapshots all
Дополнительные параметры:
- --vboxmanage vboxmanage - путь к исполныемому файлу vboxmanage.
- --timeout 60 - таймаут для анализа файла, секунд.
- --info 1 - показывать/скрывать информацию о файле (sha256 и ссылки на VirusTotal/Google). Значения: 1, 0.
- --ui gui - запускать ВМ с графикой или без. Значения: 'gui', 'headless'.
- --login user - логин для гостевой ОС.
- --password 12345678 - пароль для гостевой ОС.
- --remote_folder desktop - директория, куда класть файл. Значения: 'desktop', 'downloads', 'documents', 'temp'.
- --network keep - управление сетью на гостевой ОС. Значения: 'on', 'off', 'keep'.
- --resolution '1920 1080 32' - зазрешение экрана. Может быть 'random' для выбора случайного разрешения из популярных, либо 'Ширина Высота Битность'.
- --pre 'C:\start.cmd' - скрипт/программа, которая будет запущена до основного файла.
- --post 'C:\stop.cmd' - скрипт/программа, которая будет запущена после основного файла (перед завершением анализа).
Код:
python demo.py \
putty.exe \
--vms w10_x64 w10_x86 \
--snapshots sn1 sn2 sn3 \
--vboxmanage vboxmanage \
--timeout 60 \
--info 1 \
--ui gui \
--login user \
--password 12345678 \
--remote_folder desktop \
--network keep \
--resolution '1920 1080 32' \
--pre 'C:\start.cmd' \
--post 'C:\stop.cmd'
Функции из скрипта можно вызывать напрямую в своих скриптах. Например:
Python:
import vm_functions as vm
vm.vm_start('w10_x64')
Демо
Под Windows с многопоточностью:
Под Linux с антивирусами:
# TODO
- Из очевидного - привинтить парсинг результатов выполнения файла. Вариантов несколько - OCR ("парсим" скриншоты), разбор логов АВ или журнала ОС (если наш авер туда пишет).
- Добавить простой веб интерфейс.
- Оптимизация и багфиксы.
Исходники на гитхаб
Ссылка скрыта от гостей
Последнее редактирование: