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

 eXeL@B —› Вопросы новичков —› Что это за функции, которые Hex Ray не может декомпилировать
Посл.ответ Сообщение

Ранг: 5.0 (гость)
Активность: 0.020
Статус: Участник

Создано: 12 февраля 2019 13:20
· Личное сообщение · #1

Доброго времени суток, форумчане. Вопрос такой:
У меня есть exe-шник, я его открываю в IDA. Нахожу X-Refs to на некую переменную, выдает несколько sub_ функций, и участки кода в секции .text. Вот эти самые sub_ функции, декомпилируются ХЕкс Реем на ура, а вот эти участки кода в секции text - нет. См. картинку.
Вопрос такой: что это за участки кода такие и как они могли попасть в код?

5c3c_12.02.2019_EXELAB.rU.tgz - 123214.png

Добавлено спустя 2 минуты

Вот если что картинка с этой секцией. При декомпиляции, пишет мол поставьте курсор внутрь функции.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 12 февраля 2019 13:31
· Личное сообщение · #2

rayS не умеет декомпилить голые участки кода



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 12 февраля 2019 13:32 · Поправил: cppasm
· Личное сообщение · #3

x0x0x
Ну и?
Создай функцию.
Поставь курсор на "mov ecx, dword_821DE8" и нажми P.



Ранг: 5.0 (гость)
Активность: 0.020
Статус: Участник

Создано: 12 февраля 2019 13:42 · Поправил: x0x0x
· Личное сообщение · #4

reversecode пишет:
rayS не умеет декомпилить голые участки кода

А как понять, голые участки кода? Что это за такие участки кода? Как они могут попасть в exe файл, если компилятор, не компилирует по идее те функции, которые не используются?




Ранг: 114.4 (ветеран), 21thx
Активность: 0.040.01
Статус: Участник

Создано: 12 февраля 2019 13:55 · Поправил: Larry
· Личное сообщение · #5

x0x0x, участки кода, на которые не выполняется явный переход из других областей программы.



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 12 февраля 2019 13:58
· Личное сообщение · #6

x0x0x - кто тебе сказал что они не используются?
IDA не поняла что это функция - и всё.

Code:
  1. mov eax, IMAGE_BASE
  2. add eax, FUNCTION_OFFSET
  3. call eax

Вполне достаточно чтобы IDA не поняла что есть вызов этой функции.

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


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

Создано: 12 февраля 2019 15:28 · Поправил: difexacaw
· Личное сообщение · #7

x0x0x

Что бы все процедуры были определены, апп должно быть собрано с опцией защиты(картой cfg). Без этого в принципе нельзя весь код покрыть. Это проблема не декомпилера в основном, а формата. Проблема code vs data", ищи поиском.

-----
vx





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

Создано: 12 февраля 2019 15:38
· Личное сообщение · #8

Это значит, что угадывать где код где нет тебе нельзя, только трассу от визора натянуть можно. Что в этой трассе не исполнялось - не код.

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





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

Создано: 12 февраля 2019 15:43
· Личное сообщение · #9

f13nd

Не смотря на сарказм, это верно. Динамика даёт входа для дальнейшего покрытия, это нельзя сделать в статике. Но такое ида не умеет.

-----
vx





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

Создано: 12 февраля 2019 15:51 · Поправил: f13nd
· Личное сообщение · #10

x0x0x пишет:
Вопрос такой: что это за участки кода такие и как они могли попасть в код?

Это значит, что они адресуются либо по смещениям относительно чего-то, либо по указателям, которые ида не восприняла как указатели. Зависит от настроения(/настроек) компилера и настроения(/настроек) иды.

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





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

Создано: 12 февраля 2019 21:42
· Личное сообщение · #11

Ну или функции виртуальные или вызываются из неразмеченных таблиц - вариантов тут куча...

-----
Everything is relative...




Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 12 февраля 2019 21:47
· Личное сообщение · #12

difexacaw пишет:
Без этого в принципе нельзя весь код покрыть.

Воу-воу, полехче. Это же реальный софт, а не сферические кони. Все можно. По прологам там, трассировкой с выявлением мусора и т.п.




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

Создано: 12 февраля 2019 22:06
· Личное сообщение · #13

rmn

Покажи как, метод плз. Видимо ты не понимаешь проблему, раз такое пишешь.

-----
vx




Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 12 февраля 2019 22:17
· Личное сообщение · #14

difexacaw пишет:
Видимо ты не понимаешь проблему, раз такое пишешь.

Тут только одна проблема, причем офтопиковая. Называется она "сферические кони инди клекра в вакууме".



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 12 февраля 2019 22:50
· Личное сообщение · #15

difexacaw
Тащемта, никакого секрета тут нет. Берем первый undefined байт и предполагаем, что это инструкция. Начинаем декодировать control-flow. Если происходит перекрытие с уже существующей инструкцией или defined блоком, или если у инструкции операнд-адрес указывает в ебеня, или если это инструкция, никогда не встречающаяся в коде, который генерится любым известным компилем для юзермода, дропаем всю ветку - это не код. 99.9% покрытие гарантирую. Видишь, как просто все?




Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 12 февраля 2019 23:34
· Личное сообщение · #16

cppasm пишет:
достаточно чтобы IDA не поняла что есть вызов этой функции.

Ильфак сам говорил, что они анализируют только компиляторный код, потому что "человек может написать такого, что ни один анализатор не разберет"

-----
В облачке многоточия




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 13 февраля 2019 08:53
· Личное сообщение · #17

Boostyq пишет:
Ильфак сам говорил, что они анализируют только компиляторный код

Сказки. Часть. Выше уже писали, что могут быть таблицы ссылок на код (интерфейсы), Ида их на автомате редко может взять. Хотя компилятором делано!




Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 13 февраля 2019 13:44 · Поправил: Boostyq
· Личное сообщение · #18

DrVB_5_6 пишет:
Сказки. Часть.

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

-----
В облачке многоточия





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

Создано: 14 февраля 2019 21:12 · Поправил: difexacaw
· Личное сообщение · #19

rmn

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

-----
vx





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

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

difexacaw пишет:
А есчо есть всякие конструкции, где указатель вычисляется и в статике его не получить(не индексация в массиве). И это помимо обычных структур, где данные-указатели-данные-etc. Эта недоработка формата была исправлена процедурной картой, где каждый адрес помечается как код.

То, что ты предлагаешь, работать не будет. Невозможно добиться того, чтобы абсолютно все кейсы (ведь абсолютно все нужны, никаких компромиссов?) в трассировку или несколько попали. По вычисляемым указателям таки можно и в статике пройтись, зависит от того, как они устроены. А трюки с процедурной картой не помогут восстановить код до исходника, в котором эти считаемые динамически адреса будут работать. А теперь попробуй представить задачу, в рамках которой это понадобится. Только риппинг и в нем как раз только статическая обработка будет работать.

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




Ранг: 44.8 (посетитель), 19thx
Активность: 0.040
Статус: Участник

Создано: 14 февраля 2019 22:04 · Поправил: SegFault
· Личное сообщение · #21

_




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

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

f13nd

> А теперь попробуй представить задачу, в рамках которой это понадобится.

Мне не надо уже это представлять, я на данную проблему кучу времени потратил. А тебе пока студентик с васма эту тему рано трогать, маловато скилла. Ты вон накосячил с элементарной гуй апи, создав уязвимость. Так что кури матчасть и не лезь к взрослым"

-----
vx





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

Создано: 14 февраля 2019 22:37
· Личное сообщение · #23

difexacaw пишет:
Мне не надо уже это представлять, я на данную проблему кучу времени потратил.

Ты потратил кучу времени на бесполезную туфту, которую ни сам не используешь, ни кому-то еще навязать не можешь.

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




Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 15 февраля 2019 05:06
· Личное сообщение · #24

difexacaw пишет:
Ты вон накосячил с элементарной гуй апи, создав уязвимость.

Взаимодействие процессов с одинаковым уровнем IL c графинтерфейсом друг друга не является ни уязвимостью, ни багом. Ты еще раз доказал, что не только не умеешь в собственно венду (помимо может быть виндоус хп), но и еще крайне глуп и уперт в своей неправоте, поскольку о твоем факапе тебе было сказано заранее. А вообще, помнится господин Клекр несколько лет носился по форумам, вещая про некий win32k сандбокс в винхп, но похоже с тех пор так и не утрудился открыть хотя бы википедию и прочитать про изоляцию привилегий пользовательского интерфейса.


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


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