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

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


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

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

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

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

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

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

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

{ Атач доступен только для участников форума } - 123214.png

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

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


Ранг: 1011.4 (!!!!)
Статус: Участник

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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



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

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

x0x0x

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


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

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

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


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

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

f13nd

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


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

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

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

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


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

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

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

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

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

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

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


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

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

rmn

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

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

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

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

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

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

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

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

Ранг: 67.5 (постоянный)
Статус: Участник

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

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

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

Ранг: 42.4 (посетитель)
Статус: Участник

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

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

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

Ранг: 67.5 (постоянный)
Статус: Участник

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

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

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


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

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

rmn

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


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

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

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

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

Ранг: 44.8 (посетитель)
Статус: Участник

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

_


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

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

f13nd

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

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


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

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

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

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

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

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

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

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

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

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