Требуется по предъявлении исполняемого файла (любого) отвечать програмно на вопрос упакован ли файл или нет. Есть какие-нибудь советы или предложения?
Forever Наличие секций UPX Посмотри статьи на сайте об упаковщиках в последний раз Если есть подозрение, что это просто архивы - проверять сигнатуру в начале файла. rar начинается с Rar! (0x52, 0x61, 0x72, 0x21) zip с PK (0x50, 0x4B, 0x3) и т.д. Просто посмотри через любой hex-viewer несколько байтов в начале самых популярных форматов архивов (RAR, ZIP, CAB, ARJ, LZH, ACE, TAR, GZip, UUE, ISO, BZIP2, Z и 7-Zip)
посчитать энтропию, только придется установить четкие критерии когда считать файл упакованным а когда нет. далеко не все пакеры сжимают идеально и далеко не все файлы хранят данные неэффективно. в EXE можно обнаружить по косвенным признакам применения пакеров. например те же сигнатуры как уже сказали.. в UPACK - строка KERNEL32.DLL вначале после MZ сигнатуры изза такого размещения этой строки в таблице импорта. и т.п.
Энтропия, сигнатуры, названия секций, наличие оверлея (всё это не вакт, но если признаки есть, то вероятность большая)
Forever сожми его чем нить, раром к примеру, и посмотри насколько изменился размер. Хотя не факт что это укажет именно на упакованность файла. Крипто к примеру тоже не жмётся.
Мне нужно проверять не архивы, а исполняемые файлы сжатые пакерами (UPX и компания). Довольно сомнительный спосов проверки, особенно если учесть, что проверять файлы нужно програмно.
+в упаковщиках была тема про то попадет ли AddressOfEntryPoint в участок от BaseOfCode размером SizeOfCode
Можно посмотреть как это реализовано в ProcessExplorer'е Руссиновича, он подсвечивает упакованные exe в списке процессов фиолетовым цветом (при цветовых настройках по умолчанию). Правда не помню, были ли сорцы этой тулзы в паблике...
Исходников Process Explorer я не нашел. Судя по всему их и не было. Если у кого есть - поделитесь. Они весьма пригодятся. Process Explorer действительно выделяет файлы которые возможно упакованы, однако не известно как он это проверяет. В драйвере кода маловато для этого. А юзермод дисасемблировать и изучать - можно загнутся. Однако за совет спасибо.
Если речь о файле в памяти, как в случае с Process Explorer, то достаточно посчитать энтропию для секций в памяти и на диске - для упакованных файлов разница будет очевидна. Но такой метод подразумевает, что файл запущен. Если для Process Explorer это подразумевается, то для простого идентификатора это может быть непримелемо.
Скорее всего он проверяет атрибуты секции в каторой расположена EP. В большинстве случаев секция с атрибутом записи указывает на упаковщик. Хотя и не факт)). Никто не мешает упаковщику не менять атрибутов секции а после старта вызвать virtualProtect.