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

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


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

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

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

 eXeL@B —› Вопросы новичков —› Как найти функцию выделившую память ?
Посл.ответ Сообщение

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

Создано: 29 августа 2017 13:51 New!
Цитата · Личное сообщение · #1

Всем привет!
Есть функция-метод класса, читает значения по определенному адресу в памяти и рисует картинку.
Адрес каждый раз меняется.
Значения по тому адресу записываются только один раз, во время инициализации приложения.
Мне нужно найти функцию, которая записала туда значения.
Есть ли специальные инструменты или плагины для OllyDbg, x64dbg
позволяющие посмотреть какая функция память выделяет и по какому адресу ?

Сама прога это демка: http://www.nvidia.ru/coolstuff/demos#!/geforce-2/lightning
0x0041524b адрес функции-метода

Code:
  1. mov     ecx, [esi+8]
  2. mov     edx, [ecx+18h]
  3. mov     ecx, [esp+1Ch+z]
  4. push    ecx             ; z
  5. mov     eax, [edx] <-------EDX указывает на значения.
  6. mov     edx, [eax+edi*8+4]
  7. push    edx             ; y
  8. lea     eax, [eax+edi*8]
  9. mov     eax, [eax]
  10. push    eax             ; x
  11. call    ebp ; glVertex3f

Ранг: 569.5 (!)
Статус: Модератор

Создано: 29 августа 2017 13:55 New!
Цитата · Личное сообщение · #2

Любой отладчик, поддерживающий hardware breakpoint.

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

Создано: 29 августа 2017 15:55 New!
Цитата · Личное сообщение · #3

Я не могу поставить брейкпоинт не зная адреса. Память выделяется динамически.
Этот адрес я могу найти только по этой функции

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

Создано: 29 августа 2017 17:17 New!
Цитата · Личное сообщение · #4

trololp пишет:
Я не могу поставить брейкпоинт не зная адреса

А кто мешает узнать?

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

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


Ранг: 377.8 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 29 августа 2017 17:38 New!
Цитата · Личное сообщение · #5

Code:
  1. mov     eax, [edx] <-------EDX указывает на значения.

а не проще посмотреть под кем регион ходит?!?
если я правильно понял, нужно вот ето:
Code:
  1. 0044B766  |.  6A 04         PUSH 4                                                       ; /Protect = PAGE_READWRITE
  2. 0044B768  |.  68 00200000   PUSH 2000                                                    ; |AllocType = MEM_RESERVE
  3. 0044B76D  |.  68 00001000   PUSH 100000                                                  ; |Size = 1048576.
  4. 0044B772  |.  57            PUSH EDI                                                     ; |Address
  5. 0044B773  |.  FF15 18814500 CALL DWORD PTR DS:[<&KERNEL32.VirtualAlloc>]                 ; \KERNEL32.VirtualAlloc
  6. 0044B779  |.  3BC7          CMP EAX,EDI
  7. 0044B77B  |.  8946 0C       MOV DWORD PTR DS:[ESI+0C],EAX

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

Создано: 29 августа 2017 20:07 · Поправил: trololp New!
Цитата · Личное сообщение · #6

Я нашел что искал !
VOLKOFF сделал по вашему колхозному методу. поставил condition break на функцию new(int size)
и ограничил вывод 1000 срабатываниями(после того как x64dbg упал ).
sub_414B40 функция которая выделяет память . По всей видимости координаты
полигонов генерируются в этой функции. приложение не хранит их в какой-то структуре а генерирует один раз при каждом запуске.

Ранг: 508.6 (!)
Статус: Модератор

Создано: 29 августа 2017 22:23 New!
Цитата · Личное сообщение · #7

trololp пишет:
после того как x64dbg упа


черканите мистеру (автору), он вроде ушивается здесь также..


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

Создано: 30 августа 2017 01:35 New!
Цитата · Личное сообщение · #8

trololp

Что бы не колхозить, нужно немного матчасть знать. Устанвливаем конфиг для процесса(globalflags) маркер USER_STACK_TRACE и получаем полный бэктрейс аллокаций в виде базы данных. Для анализа лога есть даже спец тулз --> Link <--

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

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

Создано: 30 августа 2017 18:02 New!
Цитата · Личное сообщение · #9

Заколхозить здесь было самым просты путем.
umdh принимает на вход только уже запущенный процесс и с отладчиком работать отказывается.
 eXeL@B —› Вопросы новичков —› Как найти функцию выделившую память ?
Эта тема закрыта. Ответы больше не принимаются.

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

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