Сейчас на форуме: tyns777, bezumchik (+5 невидимых)

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

Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

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

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




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

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

zombi-vadim

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

-----
vx




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

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

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




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

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

zombi-vadim

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

-----
vx





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

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

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

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

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

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

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




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

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

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

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

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

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

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

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





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

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

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

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

-----
2 оттенка серого





Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

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

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

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 10.8 (новичок), 4thx
Активность: 0.17=0.17
Статус: Участник

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

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




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

-----
2 оттенка серого





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

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

zombi-vadim

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

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

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



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



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

-----
vx


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

Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

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

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




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

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

-----
2 оттенка серого




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

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

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




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

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

-----
2 оттенка серого




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

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

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

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




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

-----
2 оттенка серого




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

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

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




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 22 сентября 2019 14:05 · Поправил: f13nd
· Личное сообщение · #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 предыдущей, ее размеру и выравниванию.

-----
2 оттенка серого




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

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

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




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

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

-----
2 оттенка серого




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

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

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




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

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

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

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

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

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

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

-----
2 оттенка серого




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

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

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




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

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

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

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

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

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

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

-----
2 оттенка серого



. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Проверка адресов и размеров секций.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати