![]() |
eXeL@B —› Вопросы новичков —› Проверка адресов и размеров секций. |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 21 сентября 2019 23:50 · Поправил: zombi-vadim · Личное сообщение · #1 Я вот хотел программку себе в помощь написать, которая проверяет валидность адресов и размеров секций. и столкнулся с такой проблемкой.. Допустим некий плохой дядя открыл в редакторе мой файл и изменил немного адрес одной из секций. И вот я начинаю проверять свой файл, складываю адрес предыдущей секции с ее размером и вижу что следующий адрес не правильный. Ага вот и нашли вроде. Однако тут проблема что дядя испортил адрес текущей или размер предыдущей секции? Как тут ни крути ничего не получается, может посоветуете что нибудь? ![]() |
|
Создано: 22 сентября 2019 00:15 · Личное сообщение · #2 zombi-vadim А что такое валидность".. это если загрузчик корректно обработает модуль или кто то другой, может инструмент какой ![]() Может даже быть что модуль собран не согласно формату(с нарушениями), а загрузчик из за неполноты проверок его успешно загружает. Зачем такой тулз собирать, если есть готовые апи и сурки тоже ? ----- vx ![]() |
|
Создано: 22 сентября 2019 00:30 · Поправил: zombi-vadim · Личное сообщение · #3 |
|
Создано: 22 сентября 2019 00:40 · Личное сообщение · #4 |
|
Создано: 22 сентября 2019 00:43 · Личное сообщение · #5 |
|
Создано: 22 сентября 2019 00:44 · Личное сообщение · #6 |
|
Создано: 22 сентября 2019 01:07 · Личное сообщение · #7 |
|
Создано: 22 сентября 2019 02:42 · Поправил: VOLKOFF · Личное сообщение · #8 |
|
Создано: 22 сентября 2019 02:54 · Личное сообщение · #9 |
|
Создано: 22 сентября 2019 03:51 · Личное сообщение · #10 Да это какой-то маньяк, если он ходит по домам и портит людям PE-заголовки в нехредакторе. Его нужно срочно изловить и изолировать. Если серьезно, то плохо себе представляю зачем вирусне или может быть слесарю лицензионных защит брать и портить RVA секции, это ж с высочайшей вероятностью сделает файл нерабочим. В подавляющем большинстве случаев rva следующей секции это rva предыдущей плюс virtual size плюс выравнивание. Но можно применять циклические корректирующие коды, либо просто резервную копию списка секций или всего заголовка. ----- 2 оттенка серого ![]() |
|
Создано: 22 сентября 2019 06:21 · Личное сообщение · #11 |
|
Создано: 22 сентября 2019 07:43 · Личное сообщение · #12 |
|
Создано: 22 сентября 2019 09:44 · Личное сообщение · #13 |
|
Создано: 22 сентября 2019 10:41 · Поправил: difexacaw · Личное сообщение · #14 zombi-vadim > Не загружает, просто не выдает ошибок. Не может быть такого. Первая проверка формата в ядре, она поверхностная(заголовок, секции) при попытке создания отображения. Если проверка не пройдёт ядро вернёт общий код ошибки, не зависимо от причины её. Иначе обьект будет создан, те как минимум валид формата достаточен для отображения. Вторая проверка глубокая, юзер на этапе загрузки. При этом любая операция в загрузчике подробно описывается ![]() Вот для примера VA релока за пределы модуля: ![]() Если релокация не происходит, то релоки не используются и соответственно никакой ошибки нет. ----- vx ![]() |
|
Создано: 22 сентября 2019 12:10 · Личное сообщение · #15 |
|
Создано: 22 сентября 2019 12:19 · Личное сообщение · #16 zombi-vadim пишет: Если есть ссылочка где описываются подобные примеры, буду вам очень благодарен. Ну это известный всем crc (который никто вообще правильно не использует), а теоретическая основа вот ----- 2 оттенка серого ![]() |
|
Создано: 22 сентября 2019 13:10 · Поправил: zombi-vadim · Личное сообщение · #17 |
|
Создано: 22 сентября 2019 13:14 · Личное сообщение · #18 |
|
Создано: 22 сентября 2019 13:25 · Поправил: zombi-vadim · Личное сообщение · #19 f13nd пишет: злонамеренного извращенца с нехредактором ![]() ![]() |
|
Создано: 22 сентября 2019 13:27 · Личное сообщение · #20 |
|
Создано: 22 сентября 2019 13:38 · Поправил: zombi-vadim · Личное сообщение · #21 f13ndВообще в очередной раз повторюсь. Определить что в смещениях секций ошибка элементарно и особого ума тут не надо. Сложней проанализировать эту ошибку. Вот есть PE Explorer и у него встроенный анализатор. Я меняю адрес секции. Его анализатор выдает ошибку что предыдущая секция выходит за пределы следующей. Такое определить раз плюнуть.Но если следовать его рекомендации и подогнать размер под текущий адрес то это просто до конца убить файл. А как определить , что не размер предыдущей секции виноват, а адрес текущей секции неправильный? Вот где собака зарыта. ![]() |
|
Создано: 22 сентября 2019 14:05 · Поправил: f13nd · Личное сообщение · #22 zombi-vadim, в общем случае нельзя угадать как было в оригинале. Но в подавляющем большинстве случаев секции расположены непрерывно (я выше об этом писал). (RVA+virtual size+OPTIONAL_HEADER.SectionAlignment-1)&~(OPTIONAL_HEADER.SectionAlignment-1) должно равняться RVA следующей секции, если получилось меньше, значит следующая наверное сдвинута. notepad.exe Code:
Code:
Накрути RVA любой секции, я смогу угадать что там было по rva предыдущей, ее размеру и выравниванию. ----- 2 оттенка серого ![]() |
|
Создано: 22 сентября 2019 14:15 · Поправил: zombi-vadim · Личное сообщение · #23 f13nd пишет: (RVA+virtual size+OPTIONAL_HEADER.SectionAlignment-1)&~(OPTIONAL_HEADER.SectionAlignment-1) должно равняться RVA следующей секции Угу но для получения RVA вы складываете текущий адрес с размером. А если текущий размер не верный то вы подумаете ага адрес следующей секции неверный. Это хорошо определять когда сам заранее знаешь что неправильно ![]() |
|
Создано: 22 сентября 2019 14:19 · Поправил: f13nd · Личное сообщение · #24 zombi-vadim пишет: Угу но для получения RVA вы складываете текущий адрес с размером. А если текущий размер не верный то вы подумаете ага адрес следующей секции неверный Если ни на что в списке секций нельзя опереться, остается только его заново сочинить глядя на дамп в дизассемблере. В принципе ничего не мешает вообще весь образ одной секцией объявить. ----- 2 оттенка серого ![]() |
|
Создано: 22 сентября 2019 14:26 · Поправил: zombi-vadim · Личное сообщение · #25 |
|
Создано: 22 сентября 2019 14:31 · Личное сообщение · #26 |
|
Создано: 22 сентября 2019 14:33 · Личное сообщение · #27 zombi-vadim пишет: Неразрешимая задачка. Кого-то это мне напомнило. Выше правильно предлагали DumpFixer, который дамп процесса превращает во что-то похожее на исполняемый файл (мне показалось, или такая задача не ставилась?). В принципе где он не справится всегда или почти всегда можно ручищами и головой обойтись, автоматизировать это сложно. ----- 2 оттенка серого ![]() |
|
Создано: 22 сентября 2019 14:40 · Поправил: zombi-vadim · Личное сообщение · #28 |
|
Создано: 22 сентября 2019 14:40 · Личное сообщение · #29 f13nd Секции можно восстановить с большой точностью зная компилятор, на делфи это 99.9% на сиська это от 80-90% Добавлено спустя 2 минуты zombi-vadim пишет: Это кувалда а не анализатор Для тебя как раз кувалда подойдёт, ведь это ты тему поднял ![]() ![]() ![]() ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 22 сентября 2019 14:46 · Личное сообщение · #30 zombi-vadim пишет: Приравнять все физические адреса к виртуальным.Или я не правильно понял процедуру? В общем случае да, хотя вроде бы подобные штуки должны уметь самостоятельно делить на секции чтоб стрипать нули. Я бы вообще нарезал секций вручную и собрал в исполняемый файл вместе с заголовками фасмом. Но в перспективах строительства больших красных кнопок, которые бы делали это сами не уверен. ----- 2 оттенка серого ![]() |
. 1 . 2 . >> |
![]() |
eXeL@B —› Вопросы новичков —› Проверка адресов и размеров секций. |