Вопрос или проблема
Существует ли способ отличить самораспаковывающиеся архивы от обычных выполняемых файлов? Сложность заключается в разнообразии инструментов, которые их создают, например, WinZip, WinRAR, 7zip и другие.
Кажется, что архивы содержат сигнатурные фразы внутри этих файлов, например “7-Zip самораспаковывающийся архив”. Они могут использоваться для идентификации SFX, но для этого потребуется словарь фраз, и я не уверен, что можно учитывать все источники приложений для SFX.
Любые мысли/предложения/идеи будут приветствоваться.
Самораспаковывающиеся архивы — это программы, к которым архив добавлен после программного кода. Это означает, что они следуют стандартному формату выполняемого файла вашей ОС — например, файлы .exe в Windows начинаются с байтов MZ
и стандартным заголовком PE/COFF, и так как каждый SFX в Windows является .exe (отсюда и “self” способность!), он также будет начинаться с байтов MZ
.
(Окей, файлы MS-DOS .com, вероятно, не начинаются с MZ
, но они встречаются редко.)
В то время как, если файл начинается с заголовка Zip (отличается по PK
) или заголовка RAR (Rar!
), это обычный не-SFX архив.
(В Windows SFX архивы, переименованные в .zip, становятся не-SFX, если просто дважды щелкнуть на файл в графическом интерфейсе, так как ОС открывает их как обычные файлы в ассоциированной программе… но они остаются исполняемыми программами из Cmd, который будет запускать валидные MZ выполняемые файлы вне зависимости от их имени.)
Думаю, вам нужно различать практическую и теоретическую версии вашего вопроса.
Теоретическая
Я мог бы придумать совершенно новый формат самораспаковывающихся архивов – очевидно, что вы никогда его раньше не видели, поэтому вы не сможете найти какой-либо шаблон.
Однако, если программа выполняется без вмешательства пользователя (просто записывает свое содержимое и затем завершает работу), возможно, вы сможете запустить какой-то статический анализ/эмуляцию программы и увидеть, какие системные вызовы она совершает/если она записывает какие-либо файлы.
Однако это просто изощренный способ сказать: Запустите его в песочнице/безопасной среде без доступа к сети и посмотрите, если он записывает какие-либо файлы.
Это не так глупо, как может показаться изначально – поскольку некоторые антивирусные сканеры исторически использовали аналогичную технику.
Практическая
Большинство распространенных форматов архивов имеют “таблицу содержимого” либо в начале, либо в конце архива.
Кроме того, “самораспаковщик” вероятно стандартизован, что означает, что код, создающий SE архив, просто записывает блок исполняемого кода, затем добавляет остальную часть архива.
Таким образом, для общих форматов, вероятно, можно распознать шаблоны, основанные на одном или нескольких из следующих:
- Исполняемая секция.
- Заголовок в начале архива.
- Таблица содержимого архива.
- Итоговый футер, который является частью формата архива.
.
Ответ или решение
Определение программным способом самораспаковывающихся архивов (SFX) в отличие от обычных исполняемых файлов может представлять определенную сложность ввиду разнообразия инструментов, создающих такие архивы. Разработчики используют различные утилиты, такие как WinZip, WinRAR, 7zip, и каждая из них добавляет собственные сигнатуры, которые можно использовать для идентификации. Однако это требует создания обширного и потенциально неполного словаря фраз.
Теория
В контексте операционных систем, самораспаковывающиеся архивы являются программами, у которых архив добавляется после основного программного кода. Например, в операционной системе Windows все SFX-архивы представляют собой исполняемые файлы (.exe). Они начинаются с байт MZ
, что соответствует стандартному формату PE/COFF. Если файл начинается с заголовка архива, например PK
для ZIP или Rar!
для RAR, то это не SFX-архив.
Пример
Один из методов, который можно использовать для проверки, заключается в выполнении статического анализа программного кода. Это предполагает использование технологии, схожей с той, которую применяют антивирусные программы, чтобы выявить подозрительное поведение программ — проверку системных вызовов, мероприятий по записи файлов и подобных действий без непосредственного запуска программы.
Применение
Практическое решение включает поиск характерных паттернов в структуре файлов. Это может включать:
- Анализ начальной секции исполняемого файла для выявления стандартных сигнатур.
- Идентификацию заголовка, присущего конкретному формату архива.
- Анализ конечной секции для выявления типовых завершающих конструкций, которые часто имеются у архивов общего назначения.
Используя эти методы, можно разработать программное обеспечение или скрипт, способный автоматически различать самораспаковывающиеся архивы от обычных исполняемых файлов. Важно помнить, что данные подходы могут не охватывать всех возможных форматов архивов, особенно если кто-то создает новый уникальный формат SFX. В таких случаях, комбинированный подход с использованием как статического анализа, так и проверки гипотетических сценариев поведения программы в безопасной среде может быть наиболее эффективным.