Распознать 7z SFX из двоичного содержимого
Как можно распознать 7z SFX (самораспаковывающийся EXE-файл) из его двоичного содержимого, есть ли смещение, с которого нужно начинать, или определенные байты для поиска или оба?
большое спасибо
1 ответ
Google твой друг. Первый результат после поиска "7zip header". В документации сказано, что это подпись 7zip:
BYTE kSignature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C};
Вы должны прочитать первые 6 байтов файла. Если эта 6-байтовая последовательность совпадает с kSignature
выше, то файл должен быть 7z.
РЕДАКТИРОВАТЬ: я пробовал вещи с использованием 7z на GNU/Linux(который фактически создает файлы SFX ELF, а не PE). И я обнаружил, что на одном из последних кусков данных на самом деле присутствует подпись 7z. Hexdump генерирует дамп до байта с номером 0x00057960, подпись которого находится здесь:
0x000578f0: 37 7a bc af 27 1c
0x37 и 0x7a - это "7" и "z" соответственно. Следовательно, в этом случае смещение подписи составляет EOF - 112 байт.
Я бы порекомендовал вам скачать шестнадцатеричный редактор, создать файл SFX и проверить, одинаково ли это смещение в каждом приложении, которое создает SFX 7z. Помните, что я проверял это на GNU/Linux, поэтому он может отличаться в Windows.