Я ищу ответ, похожий на один в этом вопросе, но для WinRAR вместо 7zip. По сути, я хочу, чтобы авторитетная подпись, по крайней мере, могла бы сказать: «Все сгенерированные WinRAR самораспаковывающиеся исполняемые файлы, созданные с файлом SFX по умолчанию в версии 420, будут иметь байты 0x15, 0xa1, 0x45, 0xcc, 0x21, 0x98 в местоположении 0x00027400 и другие NON SFX-файлы вряд ли будут иметь эту подпись «. Еще лучше, если одну и ту же подпись можно найти во всех версиях файлов WinRAR SFX, даже если они находятся в разных местах.
По характеру работы SFX они будут очень похожи, за исключением части архива файла, но некоторые строки имеют плохие идентификаторы (например, «Эта программа не может быть запущена в режиме DOS» есть в каждом SFX, но это случается с также быть в большинстве других исполняемых файлов Windows)
В настоящее время мой метод определения подписи состоит в том, чтобы просмотреть различные версии WinRAR SFX и найти последовательности из 4 или 6 байтов, которые объединяют все файлы. К сожалению, их много, что затрудняет их выбор.
От TechNote.txt в папке установки WinRAR:
- Для обработки архива SFX вам нужно пропустить поиск модуля SFX
для блока маркеров в архиве. Нет последовательности блоков маркеров (0x52
0x61 0x72 0x21 0x1a 0x07 0x00) в самом модуле SFX.
Это вы уже указали сами: исходный код unrar имеет в archive.cpp код, как он читает в файле. Максимальный размер части SFX никогда не будет больше числа, определенного в rardefs.hpp:
#define MAXSFXSIZE 0x100000
Если я правильно понял, вы хотели бы посмотреть файл и посмотреть, является ли он действительным SFX-файлом, созданным с помощью WinRAR, верно?
В данном случае это те сигнатуры PE, которые вы должны искать (не пробовали их, но они перечислены в базе данных PE sig, связанной внизу):
WinRAR-SFX = 80E9A1C1C11368E4167546C1C1055EEB019D6864863746EB028CE05FF7D0
WinRAR-SFX = EB0102EB02CD20B880
Просто получите точку входа и посмотрите, следуют ли эти байты в правильном порядке. Обширный список подписей PE доступен на http://tot-ltd.org/packer.db.