2011-01-03 2 views
2

Я пытаюсь выяснить, как определить, был ли сжат двоичный файл с помощью UPX. Я использую простой CRC, чтобы определить, изменилось ли мое приложение, и если CRC завершился с ошибкой по размеру из-за пакета, я бы хотел обнаружить это как ОК.Обнаружение UPX программно

Сейчас я начинаю с UPX.

Итак, есть ли маркер на двоичном коде? есть ли какие-либо конкретные JMP или другие инструкции, которые я должен искать?
В основном это будет протестировано в Windows, но в будущем я могу добавить его и в Linux.

Любая помощь (и код) оценивается.

Добавлено:

Я обнаружил, что в 10 бинарных файлов я проверил

AddressOfEntryPoint
Import Directory RVA
Resouce Directory RVA

либо точку UPX или иметь смещение, которое задается UPX. Любая информация об этом?

Благодаря

+0

Попробуйте найти исходный код распаковщика UPX, я уверен, что алгоритм обнаружения UPX должен быть там – Machinarius

+0

Уже сделал, и это беспорядок, мягко говоря. –

ответ

0

Возможно, вы попытаетесь проверить имена файлов исполняемого файла. UPX меняет их на UPX0, UPX1, UPX2, я считаю.

+1

Этот метод, к сожалению, не является надежным. Разделы некоторых (упакованных/зашифрованных) изображений переименовываются в «стандартные»/«традиционные» названия разделов. Названия разделов никогда не «интерпретируются» загрузчиком. Названия разделов иногда даже отсутствуют (они удалены) некоторыми инструментами. – mox

+0

@mox, этот ответ специфичен для UPX-упаковщика. Запуск дополнительных упаковщиков или обфускаторов может дополнительно модифицировать имена разделов; однако по умолчанию пакер UPX изменит имена разделов, описанные выше. –

2

Скачать upx исходный код из UPX Homepage и открытого src/p_w32pe.cpp файла; функция, которую вы ищете;

int PackW32Pe::canUnpack() 

Эта функция проверяет, сжимается ли файл с помощью win32 upx.

+0

Благодарим вас за отзыв, но мне тяжело следовать за этим кодом с помощью разных объектов и их конструкторов. Для win32 он вызывает 'PackW32Pe' (в .h файле), но по очереди создает другой вызов и т. Д. Я программист на C, и объекты не очень сильны со мной. Вы можете добавить какую-либо конкретную информацию из этого кода? Еще раз спасибо –

+0

Обновлен мой ответ. – ismail

+0

спасибо. Позвольте мне посмотреть, могу ли я использовать его как-то –

Смежные вопросы