Comments 11
хитровыдуманными и вручную созданными файлами
которые как правило называют «извратными»
Что конкретно это значит?
Примеры того, что можно накрутить в файле:
1) Значение dword попадало в пространство двух вирт.секций.
2) Данные одной секции перекрывают данные другой секции.
3) Спрятана импортируемая функция путем махинации с таблицией экспорта
4) Шифрование с помощью fixup-ов, как это делал Win32.Lerok(так вроде пишется)
5) Инжект стороннего кода путем вставки в таблицу импорта адреса на свой код.
6) Игра с выравниванием начала секции и ее размера, а также размера образа(см. упаковщик upack)
и др. случаи.
Лучшим лекарством при обработки PE-файлов является частичная эмуляция системного загрузчика. Т.е. также выделить область на выравненное SizeOfImage, также поверх записать заголовки на эту область и данные секций, естественно правильно вычисляя их начало и размеры.
1) Значение dword попадало в пространство двух вирт.секций.
2) Данные одной секции перекрывают данные другой секции.
3) Спрятана импортируемая функция путем махинации с таблицией экспорта
4) Шифрование с помощью fixup-ов, как это делал Win32.Lerok(так вроде пишется)
5) Инжект стороннего кода путем вставки в таблицу импорта адреса на свой код.
6) Игра с выравниванием начала секции и ее размера, а также размера образа(см. упаковщик upack)
и др. случаи.
Лучшим лекарством при обработки PE-файлов является частичная эмуляция системного загрузчика. Т.е. также выделить область на выравненное SizeOfImage, также поверх записать заголовки на эту область и данные секций, естественно правильно вычисляя их начало и размеры.
1. Перекрытие виртуальных секций? Не загрузится такой образ.
1. У меня грузился ;) Но всех версиях Windows, но все-таки грузился. Но такого сампла нету в corkami-наборе, думаю скоро будет добавлен, автору уже давно об этом писал.
Забыл также упомянуть о часто используемом:
п.7. Совмещенные MZ и PE заголовке. К примеру в упаковщике Krunch которым упаковывали демки.
Забыл также упомянуть о часто используемом:
п.7. Совмещенные MZ и PE заголовке. К примеру в упаковщике Krunch которым упаковывали демки.
Прошу прощения за мои опечатки.
Вместо: Но всех версиях
Надо: Не на всех
Вместо: Но всех версиях
Надо: Не на всех
Это нетрудно проверить. Вот два файла (MessageBox-ные HelloWorld), в которых испорчен VirtualSize первой секции так, чтобы заползал на вторую: 32-bit, 64-bit. Если где-нибудь запустится — расскажите. Работать может разве что под 9x (это не факт — не знаю, не проверял и не ковырял), но, кажется, в 2014 году про неё можно уже не вспоминать.
Есть не гласное правило: «Если где-то вирус может запуститься и навредить, то он должен быть задетектирован».
А файлы посмотрю, также попробую найти те самлпы на чем я игрался )
А файлы посмотрю, также попробую найти те самлпы на чем я игрался )
Под Win9x и Wine таки запускается. Но вы всё равно обрабатываете такую ситуацию неправильно, потому что в Win9x и Wine содержимое на пересечении секций разное, а у вас нет настроек, указывающих, с каким именно загрузчиком вы пытаетесь быть совместимы. Если вы выбираете первую подходящую секцию (как Win9x), то у вас расхождение с Wine. Если последнюю подходящую (как Wine) — то расхождение с Win9x.
Это еще только только в юнит-тестах ;) Другими словами реализовано, но специально выключено даже на уровне скрытых опций ком.строки. Как показала практика такие случаи очень редки и следовательно нет четкого понимания как это должно быть удобным.
В текущий момент занят реализацией детектирования спрятанной импортированной функции посредством экспорта.
P.S.: Спасибо за Ваш интерес к моей тулзе. Было бы здорово если бы Вы прогнали ее на огромном потоке файлов ;)
В текущий момент занят реализацией детектирования спрятанной импортированной функции посредством экспорта.
P.S.: Спасибо за Ваш интерес к моей тулзе. Было бы здорово если бы Вы прогнали ее на огромном потоке файлов ;)
Ок, на тот момент, когда начал писать свою тулзу передо мною вставали статистические вопросы:
* Какая функция из стандартных dll чаще\реже всего используется? — под использованием понимается кол-во модулей где функцию импортируют помноженную на кол-во ссылок в этом модуле.
А это предполагалось обработать множество файлов, при этом не хотелось слишком усложнять процесс. Очень хотелось чтобы возникаемые вопросы быстро решались. В тот момент подумал «Вот бы readelf подобную тулзу...». Потому что эта тулза очень проста в использовании и скрипты на питоне пишутся очень легко!
* Какая функция из стандартных dll чаще\реже всего используется? — под использованием понимается кол-во модулей где функцию импортируют помноженную на кол-во ссылок в этом модуле.
А это предполагалось обработать множество файлов, при этом не хотелось слишком усложнять процесс. Очень хотелось чтобы возникаемые вопросы быстро решались. В тот момент подумал «Вот бы readelf подобную тулзу...». Потому что эта тулза очень проста в использовании и скрипты на питоне пишутся очень легко!
Sign up to leave a comment.
Консольное приложение readpe