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

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


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

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

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

 eXeL@B —› Вопросы новичков —› Функция вызывается несмотря на отсутствие в Xrefs
Посл.ответ Сообщение

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

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

Есть такая функция. Код:
Code:
  1. .text:0000000000621E10            someFunction    proc near
  2. .text:0000000000621E10                            mov     edx, [rdi]
  3. ...
  4. .text:0000000000621F91                            mov     rbp, rdx
  5. .text:0000000000621F94                            call    someFunction
  6. .text:0000000000621F99                            mov     rsi, rbp


Xrefs ссылается только на 621F94.
Если занопить "call someFunction", то она из Xrefs пропадает, но все-равно как-то вызывается при исполнении кода.
Как определить что вызывает эту функцию?


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

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

useretail

Это значит что функция вызывается из разных мест, не важно нашла ида ваши xref" или нет.

> Как определить что вызывает эту функцию?

Очевидно ведь - поставить останов на начало функции и на стеке будет caller-ip.

ps: ida не отладчик, это дизассемблер.


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

Создано: 30 июня 2019 23:09 New!
Цитата · Личное сообщение · #3

То, что ида не нашла референс, не значит, что его нет.


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

Создано: 30 июня 2019 23:15 New!
Цитата · Личное сообщение · #4

f13nd

Из за этой парадигмы, ида инструмент.. вот такие вопросы и появляются. Не верное восприятие предмета, точнее его полное не понимание, обьект рассматривается как некий в инструменте(ида).

С таким подходом ничего тс решить не сможет. Оно уже и видно - референсов нет и что делать дальше тс не знает, поэтому и задал вопрос.

Не верный, ошибочный подход.

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

Создано: 30 июня 2019 23:33 New!
Цитата · Личное сообщение · #5

Нормальный инструмент. И вопрос именно об иде.
Играться с дебаггером можно (и нужно) если вариант с идой не проходит (как в моем случае).
Я вот одного не могу понять. Как еще можно вызвать если не через call (E8 <адрес>)?
Выходит что алгоритм в иде не идеален или как это понимать?


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

Создано: 30 июня 2019 23:41 · Поправил: Модератор New!
Цитата · Личное сообщение · #6

useretail

Ты совсем тупой чтоле, сказал ведь что вызовы из разных мест.

> Как еще можно вызвать если не через call (E8 <адрес>)?

Через RET например. Или есчо как то. Твой код выполняется в ОС, а там свои механизмы. Есть ядерные сервисы для загрузки контекста в процессор, ну что бы ты понимал что ида это фигня.

От модератора: Нарушение п.5 Правил форума

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

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

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

Code:
  1. mov rax,base
  2. add rax,func_offset
  3. call rax

или
Code:
  1. push func_addr
  2. ret

Да куча вариантов.
И всё, XREFов не будет.
Бери отладчик и не занимайся ерундой.
Если приспичила именно Ида, в ней тоже отладка есть.

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


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

Создано: 1 июля 2019 00:16 · Поправил: useretail New!
Цитата · Личное сообщение · #8

Спасибо за ответы.

difexacaw
Почему вы меня оскорбляете? Вопрос задан в разделе для новичков.
Вы походу нарушаете пункт 5 правил этого форума + пункт 4 правил подфорума "Вопросы новичков"


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

Создано: 1 июля 2019 04:25 New!
Цитата · Личное сообщение · #9

cppasm пишет:
А как Ида должна определить вызов через вычисляемый адрес например?

С солвером у гидры например несколько получше. В ситуациях, где ида не разглядит динамически рассчитываемый референс, есть ненулевая вероятность, что гидра разглядит.
useretail пишет:
Как еще можно вызвать если не через call (E8 <адрес>)?

У самых примитивных архитектур так и есть. Но вызов метода объекта в интеле например выглядит так:
Code:
  1. MOV EAX,DWORD PTR DS:[EAX]
  2. CALL DWORD PTR DS:[EAX+90]

А каждая копия объекта конструируется в памяти отдельно, отследить какой метод в +90 был помещен в статике бывает тяжело. И это только частный случай динамики, есть и другие.


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

Создано: 1 июля 2019 08:25 New!
Цитата · Личное сообщение · #10

в х64 всё еще веселее
не только call (0xE8) кодируется с относительным смещением, но даже и mov, из-за чего поиск статических байтов адреса не особо помогает даже в незащищенных модулях.

адрес функции может быть также частью таблицы методов класса или еще какого-то интерфейса:
Code:
  1. vftable:
  2.   dq func1
  3.   ...
  4.   dq funcN
  5. ;============
  6. mov rax, N
  7. mov rax, [vftable+rax*8]
  8. call rax


И кстати, если уж искомый эффект - это "невызываемость" целевой функции, то я бы рекомендовал патчить саму функцию, а не все референсы к ней. Просто вставить ret с учётом стэковых аргументов, и посмотреть что будет.

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

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

Создано: 1 июля 2019 14:11 New!
Цитата · Личное сообщение · #11

useretail пишет:
но все-равно как-то вызывается при исполнении кода

БП на начало (возврат\тело по ситуации) функции и смотрим (логируем без остановки по ситуации) откуда вызов. Profit.

В зависимости от инструмента (в иде тоже можно, но не всегда нативно), можно получить на выходе аккуратный лог с каждым вызовом, аргументами (если есть) и участком откуда данный вызов сделан.

Вы же идете от обратного напрасно усложняя себе задачу.
 eXeL@B —› Вопросы новичков —› Функция вызывается несмотря на отсутствие в Xrefs
Эта тема закрыта. Ответы больше не принимаются.

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

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