Как стать автором
Обновить

Комментарии 11

хитровыдуманными и вручную созданными файлами
которые как правило называют «извратными»

Что конкретно это значит?
Примеры того, что можно накрутить в файле:
1) Значение dword попадало в пространство двух вирт.секций.
2) Данные одной секции перекрывают данные другой секции.
3) Спрятана импортируемая функция путем махинации с таблицией экспорта
4) Шифрование с помощью fixup-ов, как это делал Win32.Lerok(так вроде пишется)
5) Инжект стороннего кода путем вставки в таблицу импорта адреса на свой код.
6) Игра с выравниванием начала секции и ее размера, а также размера образа(см. упаковщик upack)
и др. случаи.

Лучшим лекарством при обработки PE-файлов является частичная эмуляция системного загрузчика. Т.е. также выделить область на выравненное SizeOfImage, также поверх записать заголовки на эту область и данные секций, естественно правильно вычисляя их начало и размеры.
1. Перекрытие виртуальных секций? Не загрузится такой образ.
1. У меня грузился ;) Но всех версиях Windows, но все-таки грузился. Но такого сампла нету в corkami-наборе, думаю скоро будет добавлен, автору уже давно об этом писал.

Забыл также упомянуть о часто используемом:
п.7. Совмещенные MZ и PE заголовке. К примеру в упаковщике Krunch которым упаковывали демки.
Это нетрудно проверить. Вот два файла (MessageBox-ные HelloWorld), в которых испорчен VirtualSize первой секции так, чтобы заползал на вторую: 32-bit, 64-bit. Если где-нибудь запустится — расскажите. Работать может разве что под 9x (это не факт — не знаю, не проверял и не ковырял), но, кажется, в 2014 году про неё можно уже не вспоминать.
Есть не гласное правило: «Если где-то вирус может запуститься и навредить, то он должен быть задетектирован».

А файлы посмотрю, также попробую найти те самлпы на чем я игрался )
Под Win9x и Wine таки запускается. Но вы всё равно обрабатываете такую ситуацию неправильно, потому что в Win9x и Wine содержимое на пересечении секций разное, а у вас нет настроек, указывающих, с каким именно загрузчиком вы пытаетесь быть совместимы. Если вы выбираете первую подходящую секцию (как Win9x), то у вас расхождение с Wine. Если последнюю подходящую (как Wine) — то расхождение с Win9x.
Это еще только только в юнит-тестах ;) Другими словами реализовано, но специально выключено даже на уровне скрытых опций ком.строки. Как показала практика такие случаи очень редки и следовательно нет четкого понимания как это должно быть удобным.
В текущий момент занят реализацией детектирования спрятанной импортированной функции посредством экспорта.

P.S.: Спасибо за Ваш интерес к моей тулзе. Было бы здорово если бы Вы прогнали ее на огромном потоке файлов ;)
Попробовали бы radare2 еще. Мы бы оперативно поправили, чего не хватает :)
Ок, на тот момент, когда начал писать свою тулзу передо мною вставали статистические вопросы:
* Какая функция из стандартных dll чаще\реже всего используется? — под использованием понимается кол-во модулей где функцию импортируют помноженную на кол-во ссылок в этом модуле.

А это предполагалось обработать множество файлов, при этом не хотелось слишком усложнять процесс. Очень хотелось чтобы возникаемые вопросы быстро решались. В тот момент подумал «Вот бы readelf подобную тулзу...». Потому что эта тулза очень проста в использовании и скрипты на питоне пишутся очень легко!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации