eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: SDK (+5 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Проверка адресов и размеров секций.
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 11.5 (новичок)
Статус: Участник

Создано: 21 сентября 2019 23:50 · Поправил: zombi-vadim New!
Цитата · Личное сообщение · #1

Я вот хотел программку себе в помощь написать, которая проверяет валидность адресов и размеров секций.
и столкнулся с такой проблемкой.. Допустим некий плохой дядя открыл в редакторе мой файл и изменил немного
адрес одной из секций. И вот я начинаю проверять свой файл, складываю адрес предыдущей секции с ее размером
и вижу что следующий адрес не правильный. Ага вот и нашли вроде. Однако тут проблема что дядя испортил адрес
текущей или размер предыдущей секции? Как тут ни крути ничего не получается, может посоветуете что нибудь?


Ранг: 313.2 (мудрец)
Статус: Участник

Создано: 22 сентября 2019 00:15 New!
Цитата · Личное сообщение · #2

zombi-vadim

А что такое валидность".. это если загрузчик корректно обработает модуль или кто то другой, может инструмент какой
Может даже быть что модуль собран не согласно формату(с нарушениями), а загрузчик из за неполноты проверок его успешно загружает. Зачем такой тулз собирать, если есть готовые апи и сурки тоже ?

Ранг: 11.5 (новичок)
Статус: Участник

Создано: 22 сентября 2019 00:30 · Поправил: zombi-vadim New!
Цитата · Личное сообщение · #3

difexacaw пишет:
апи и сурки
Посоветуйте тогда. Вообще я запускаю файл винда молчит, ошибок нет но и файл не рабочий.
Хотелось бы знать где ошибка. Плюс интересно самому во всем разобраться.А валидность это соответствие формату, плевать на загрузчик.


Ранг: 313.2 (мудрец)
Статус: Участник

Создано: 22 сентября 2019 00:40 New!
Цитата · Личное сообщение · #4

zombi-vadim

Как это ось загружает, но файл не рабочий", подробности нужны. Может к примеру формат импорта правильный, только нет нужных зависимостей. Что тогда считать корректным


Ранг: 660.5 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 22 сентября 2019 00:43 New!
Цитата · Личное сообщение · #5

zombi-vadim
В PeTools уже тыщу лет есть опция Validate PE. Что вы её все так не любите? И писать не надо ничего - она в отдельную динамическую библиотеку вынесена. И сорцы уже доступны даже. Но хочется велик переизобрести, да?

Ранг: 11.5 (новичок)
Статус: Участник

Создано: 22 сентября 2019 00:44 New!
Цитата · Личное сообщение · #6

difexacaw пишет:
Как это ось загружает
Не загружает, просто не выдает ошибок.

Добавлено спустя 2 минуты
ARCHANGEL пишет:
велик переизобрести
Интересно самому. Так мой вопрос про что испорчено размер предыдущей или адрес текущей?


Ранг: 660.5 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 22 сентября 2019 01:07 New!
Цитата · Личное сообщение · #7

zombi-vadim
Вам нужно погуглить, что такое DumpFixer. Вот такие вопросы и отпадут. Уже это 100 раз тут расписывали, нету сил на 101.

Ранг: 133.4 (ветеран)
Статус: Участник

Создано: 22 сентября 2019 02:42 · Поправил: VOLKOFF New!
Цитата · Личное сообщение · #8

ARCHANGEL пишет:
PeTools... сорцы уже доступны даже

Где доступны?

Source code
throw std::exception(“​PE Tools source code is not available”);


Ранг: 660.5 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 22 сентября 2019 02:54 New!
Цитата · Личное сообщение · #9

VOLKOFF
то новые, есть же старые


Ранг: 220.0 (наставник)
Статус: Участник

Создано: 22 сентября 2019 03:51 New!
Цитата · Личное сообщение · #10

Да это какой-то маньяк, если он ходит по домам и портит людям PE-заголовки в нехредакторе. Его нужно срочно изловить и изолировать. Если серьезно, то плохо себе представляю зачем вирусне или может быть слесарю лицензионных защит брать и портить RVA секции, это ж с высочайшей вероятностью сделает файл нерабочим. В подавляющем большинстве случаев rva следующей секции это rva предыдущей плюс virtual size плюс выравнивание. Но можно применять циклические корректирующие коды, либо просто резервную копию списка секций или всего заголовка.


Ранг: 538.4 (!)
Статус: Участник
оптимист

Создано: 22 сентября 2019 06:21 New!
Цитата · Личное сообщение · #11

f13nd
Ну есть проты которые портят заголовок в памяти что бы было трудно дамп снять

Ранг: 5.6 (гость)
Статус: Участник

Создано: 22 сентября 2019 07:43 New!
Цитата · Личное сообщение · #12

zombi-vadim, вообще интересно, откуда у людей такие вопросы возникают после прочтения Нарвахи, читалось ведь, наверное? В общем, если бы читал - знал бы как пересчитывать новые адреса джипов и коль, и в нете досмотрел недостающую инфу.
На здоровье!


Ранг: 220.0 (наставник)
Статус: Участник

Создано: 22 сентября 2019 09:44 New!
Цитата · Личное сообщение · #13

ClockMan, тогда ситуация поставлена некорректно про "открыл в редакторе мой файл".


Ранг: 313.2 (мудрец)
Статус: Участник

Создано: 22 сентября 2019 10:41 · Поправил: difexacaw New!
Цитата · Личное сообщение · #14

zombi-vadim

> Не загружает, просто не выдает ошибок.

Не может быть такого. Первая проверка формата в ядре, она поверхностная(заголовок, секции) при попытке создания отображения. Если проверка не пройдёт ядро вернёт общий код ошибки, не зависимо от причины её. Иначе обьект будет создан, те как минимум валид формата достаточен для отображения.

Вторая проверка глубокая, юзер на этапе загрузки. При этом любая операция в загрузчике подробно описывается --> Link <--



Вот для примера VA релока за пределы модуля:



Если релокация не происходит, то релоки не используются и соответственно никакой ошибки нет.

| Сообщение посчитали полезным: SReg, plutos


Ранг: 11.5 (новичок)
Статус: Участник

Создано: 22 сентября 2019 12:10 New!
Цитата · Личное сообщение · #15

f13nd пишет:
Но можно применять циклические корректирующие коды
Если есть ссылочка где описываются подобные примеры, буду вам очень благодарен.


Ранг: 220.0 (наставник)
Статус: Участник

Создано: 22 сентября 2019 12:19 New!
Цитата · Личное сообщение · #16

zombi-vadim пишет:
Если есть ссылочка где описываются подобные примеры, буду вам очень благодарен.

Ну это известный всем crc (который никто вообще правильно не использует), а теоретическая основа вот --> Link <--. Длина поля корректирующего кода и порождающий полином выбираются такими, чтобы исправлять определенное количество ошибочных бит в определенного размера поле.

Ранг: 11.5 (новичок)
Статус: Участник

Создано: 22 сентября 2019 13:10 · Поправил: zombi-vadim New!
Цитата · Личное сообщение · #17

f13ndУХ это интересно. А как данный алгоритм поможет в моей конкретной задаче. Обьясните пожалуйста новичку.


Ранг: 220.0 (наставник)
Статус: Участник

Создано: 22 сентября 2019 13:14 New!
Цитата · Личное сообщение · #18

zombi-vadim пишет:
данный алгоритм поможет в моей конкретной задаче

Если заранее посчитать циклический код для списка секций, им можно будет исправить назад ряд исправлений злонамеренного извращенца с нехредактором. Но мне почему-то не кажется эта ситуация правдоподобной.

Ранг: 11.5 (новичок)
Статус: Участник

Создано: 22 сентября 2019 13:25 · Поправил: zombi-vadim New!
Цитата · Личное сообщение · #19

f13nd пишет:
злонамеренного извращенца с нехредактором

Если я к примеру удалил секцию в файле, и неправильно пересчитал смещения адресов, то запускаем анализатор и смотрим где ошибка.Вы восприняли шутку слишком правильно. Вообще мне очень стало интересно вычислить точно где ошибка в адресе или размере секции.


Ранг: 220.0 (наставник)
Статус: Участник

Создано: 22 сентября 2019 13:27 New!
Цитата · Личное сообщение · #20

zombi-vadim, да, поможет. Но если ошибок исправлять придется много, длина поля будет сравнимая с размером резервной копии списка секций.

Ранг: 11.5 (новичок)
Статус: Участник

Создано: 22 сентября 2019 13:38 · Поправил: zombi-vadim New!
Цитата · Личное сообщение · #21

f13ndВообще в очередной раз повторюсь. Определить что в смещениях секций ошибка элементарно и особого ума тут не надо. Сложней проанализировать эту ошибку. Вот есть PE Explorer и у него встроенный анализатор. Я меняю адрес секции. Его анализатор выдает ошибку что предыдущая секция выходит за пределы следующей. Такое определить раз плюнуть.Но если следовать его рекомендации и подогнать размер под текущий адрес то это просто до конца убить файл. А как определить , что не размер предыдущей секции виноват, а адрес текущей секции неправильный? Вот где собака зарыта.


Ранг: 220.0 (наставник)
Статус: Участник

Создано: 22 сентября 2019 14:05 · Поправил: f13nd New!
Цитата · Личное сообщение · #22

zombi-vadim, в общем случае нельзя угадать как было в оригинале. Но в подавляющем большинстве случаев секции расположены непрерывно (я выше об этом писал). (RVA+virtual size+OPTIONAL_HEADER.SectionAlignment-1)&~(OPTIONAL_HEADER.SectionAlignment-1) должно равняться RVA следующей секции, если получилось меньше, значит следующая наверное сдвинута.
notepad.exe
Code:
  1. No  | Name      | VSize      | VOffset
  2. 01  | .text     | 0001806C   | 00001000
  3. 02  | .data     | 0000284C   | 0001A000
  4. 03  | .pdata    | 00000684   | 0001D000
  5. 04  | .idata    | 00001DF8   | 0001E000
  6. 05  | .rsrc     | 00019AF0   | 00020000
  7. 06  | .reloc    | 00000134   | 0003A000

Code:
  1. (00001000+0001806C+FFF)&FFFFF000=1A000
  2. (0001A000+0000284C+FFF)&FFFFF000=1D000
  3. (0001D000+00000684+FFF)&FFFFF000=1E000
  4. (0001E000+00001DF8+FFF)&FFFFF000=20000
  5. (00020000+00019AF0+FFF)&FFFFF000=3A000

Накрути RVA любой секции, я смогу угадать что там было по rva предыдущей, ее размеру и выравниванию.

Ранг: 11.5 (новичок)
Статус: Участник

Создано: 22 сентября 2019 14:15 · Поправил: zombi-vadim New!
Цитата · Личное сообщение · #23

f13nd пишет:
(RVA+virtual size+OPTIONAL_HEADER.SectionAlignment-1)&~(OPTIONAL_HEADER.SectionAlignment-1) должно равняться RVA следующей секции
Угу но для получения RVA вы складываете текущий адрес с размером. А если текущий размер не верный то вы подумаете ага адрес следующей секции неверный. Это хорошо определять когда сам заранее знаешь что неправильно


Ранг: 220.0 (наставник)
Статус: Участник

Создано: 22 сентября 2019 14:19 · Поправил: f13nd New!
Цитата · Личное сообщение · #24

zombi-vadim пишет:
Угу но для получения RVA вы складываете текущий адрес с размером. А если текущий размер не верный то вы подумаете ага адрес следующей секции неверный

Если ни на что в списке секций нельзя опереться, остается только его заново сочинить глядя на дамп в дизассемблере. В принципе ничего не мешает вообще весь образ одной секцией объявить.

Ранг: 11.5 (новичок)
Статус: Участник

Создано: 22 сентября 2019 14:26 · Поправил: zombi-vadim New!
Цитата · Личное сообщение · #25

f13ndВообщем я так понимаю идей нет никаких. Неразрешимая задачка.Адрес или размер размер или адрес


Ранг: 538.4 (!)
Статус: Участник
оптимист

Создано: 22 сентября 2019 14:31 New!
Цитата · Личное сообщение · #26

zombi-vadim пишет:
А если текущий размер не верный

Правишь РЕ хидер на одну секцию а размер секции выставляешь исходя от size of image(относятся к файлам сдампленных с памяти)


Ранг: 220.0 (наставник)
Статус: Участник

Создано: 22 сентября 2019 14:33 New!
Цитата · Личное сообщение · #27

zombi-vadim пишет:
Неразрешимая задачка.

Кого-то это мне напомнило.

Выше правильно предлагали DumpFixer, который дамп процесса превращает во что-то похожее на исполняемый файл (мне показалось, или такая задача не ставилась?). В принципе где он не справится всегда или почти всегда можно ручищами и головой обойтись, автоматизировать это сложно.

Ранг: 11.5 (новичок)
Статус: Участник

Создано: 22 сентября 2019 14:40 · Поправил: zombi-vadim New!
Цитата · Личное сообщение · #28

f13nd пишет:
предлагали DumpFixer
Это кувалда а не анализатор. Приравнять все физические адреса к виртуальным.Или я не правильно понял процедуру?


Ранг: 538.4 (!)
Статус: Участник
оптимист

Создано: 22 сентября 2019 14:40 New!
Цитата · Личное сообщение · #29

f13nd
Секции можно восстановить с большой точностью зная компилятор, на делфи это 99.9% на сиська это от 80-90%

Добавлено спустя 2 минуты
zombi-vadim пишет:
Это кувалда а не анализатор

Для тебя как раз кувалда подойдёт, ведь это ты тему поднял


Ранг: 220.0 (наставник)
Статус: Участник

Создано: 22 сентября 2019 14:46 New!
Цитата · Личное сообщение · #30

zombi-vadim пишет:
Приравнять все физические адреса к виртуальным.Или я не правильно понял процедуру?

В общем случае да, хотя вроде бы подобные штуки должны уметь самостоятельно делить на секции чтоб стрипать нули. Я бы вообще нарезал секций вручную и собрал в исполняемый файл вместе с заголовками фасмом. Но в перспективах строительства больших красных кнопок, которые бы делали это сами не уверен.
. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Проверка адресов и размеров секций.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS