Распознать 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.

Другие вопросы по тегам