Выполняет сканирование файлов в директории, с целью нахождение в ней “подозрительных” (suspicious) файлов.
Реализовано 3 типа “подозрительного” содержимого в файле.
-
JS suspicious: файл с расширением .js, содержащий строку:
<script>evil_script()</script>
-
Unix suspicious: любой файл, содержащий строку:
rm -rf ~/Documents
-
macOS suspicious: любой файл, содержащий строку:
system("launchctl load /Library/LaunchAgents/com.malware.agent")
После завершения выполнения утилиты пользователю выводится отчет о сканировании, в котором присутствует следующая информация:
- общее количество обработанных файлов;
- количество детектов на каждый тип “подозрительного” содержимого;
- количество ошибок анализа файлов (например, не хватает прав на чтение файла);
- время выполнения утилиты.
Пример исполнения утилиты из командной строки:
$ ./scan_util /Users/user/Downloads
====== Scan result ======
Processed files: 150
JS detects: 5
Unix detects: 1
macOS detects: 2
Errors: 1
Exection time: 00:00:31 345
=========================
Для проверки работоспособности удобно использовать тест на слом:
$ ./TestSearch /Users/user/test_dir
Тест генирирует заданное дефолтное количество файлов с определенным количеством "подозрительных" строк в указанной директории, затем ищет и выводит отчет, а также сверяет количество найденных вхождений с заданными.
Поиск выполняется проходом по regular-файлам в директории. Каждый файл обрабатывается асинхронно (потенциально тред пулом, может зависеть от компилятора). Для файла фильтруются возможные подозрительные строки по расширению. Оставшиеся строки ищутся алгоритмом Ахо-Корасика (примерно за линию от длины файла).
Так же реализована возможность искать перебором по строкам файла (для больших многострочных файлов) (см. SearchMode::Simple
)