• XSS.stack #1 – первый литературный журнал от юзеров форума

Добавление FakeIAT в PE файл

secflag

RAID-массив
Пользователь
Регистрация
29.01.2020
Сообщения
51
Реакции
10
Для уникализации файла пришла идея разбавить импорты с фейковыми.
Изначально, увидел эту реализацию в CFF Explorer, но, к сожалению, не нашел исходного кода. Так и не понял как это устроено.
1685281812811.png


Еще работает одна идея. Приводить какую-то функцию(и) в использование в коде, чтобы компилятор засчитал ее.
Но приходится искать и добавлять другие заголовки. Ко всему этому, их может не быть в MinGW, но есть в MSVC.

Возникает вопрос: как можно управлять этим процессом без костылей (по типу CFF Explorer)?
Грубо говоря, автоматизировать генерацию, выбор случайных функций из той или иной библиотеки.
Если кто-то знает как устроена техника в CFF Explorer, попрошу поведать :)
 
Самый банальный путь - делай ребилд таблицы импорта. Просто считал файл, распарсил весь PE, нашел свободное место в секции импортов, и добавил туда свои дескрипторы. В целях экономии свободного места в секции желательно добавлять функции из уже существующих в импортах dll файлов. Основная проблема заключается в том, что секция импортов может быть не последней в файле и Image, тогда не получится расширить ее размер, если его не хватает для добавления функций в таблицу IAT. Если есть релоки, тут проще, можно попытаться полностью пересобрать все секции, даже расширив секции, которые в середине в Image, запатчив по таблце релоков все ссылки в коде на данные в секциях которые уедут вниз из-за расширения IAT секции. Но есть риски, что в коде будут относительные ссылки на какие-то секции, которых нет в релоках, и тогда код поломается. В общем пересборка бинариков всегда сопряжена с рисками сломать бинарик.

Другой путь - если есть сорцы, достаточно просто обьявить массив глобальных переменных c модификатором volatile и записать туда адреса случайных функций
например
volatile void* addrses[] = {&MessageBoxW, &CreateThread, &Sleep};
volatile не даст компилятору удалить ссылки на эти данные, даже если они не используются, поэтому адреса добавятся в IAT.
Но лушим путем все-таки будет как-то использовать эти адреса в коде, что бы они не болтались там непонятно зачем.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх