Сейчас на форуме: rmn, exp50848 (+7 невидимых)

 eXeL@B —› Основной форум —› Как формируется карта памяти в OllyDbg?
Посл.ответ Сообщение

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

Создано: 07 февраля 2013 17:45
· Личное сообщение · #1

Вопрос может быть туповатый,но я в поиске ответов не нашел.
Смотрите как интересно получается: мы открыли прогу в OllyDbg,дебаггер остановился на EntryPoint и в памяти уже загружены все библиотеки,какие нужны.У всех DLL одинаковое значение ImageBase=10000000 как рекомендует Microsoft, но библиотеки всегда загружаются в строго определенном порядке и по фиксированным адресам, зависящим от версии операционной системы.
Где происходят эти вызовы LoadLibrary и почему мы их не видим до ЕР?



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

Создано: 07 февраля 2013 17:51
· Личное сообщение · #2

И второй вопрос на эту же тему: есть несколько динамических библиотек,у каждой есть секция relocations. Далее проводим научный эксперимент: меняем ImageBase каждой из них: 15000000,20000000,25000000,30000000 и так далее. Запускаем прогу - получаем сообщение об ошибке доступа. Почему так происходит, весь должна срабатывать переадрессация всех имеющихся функций?




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 07 февраля 2013 17:51 · Поправил: hors
· Личное сообщение · #3

DobryGnom пишет:
Где происходят эти вызовы LoadLibrary и почему мы их не видим до ЕР?


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

-----
http://ntinfo.biz


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

Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 07 февраля 2013 17:56
· Личное сообщение · #4

Оля ничего не загружает, загружает загрузчик PE загружаемого файла.
Во блин тавтология какая...

DobryGnom пишет:
И второй вопрос на эту же тему: есть несколько динамических библиотек,у каждой есть секция relocations. Далее проводим научный эксперимент: меняем ImageBase каждой из них: 15000000,20000000,25000000,30000000 и так далее. Запускаем прогу - получаем сообщение об ошибке доступа. Почему так происходит, весь должна срабатывать переадрессация всех имеющихся функций?


Ну ты же ролокам не объяснил, что в другое место переехал.
Была тулза от Dr.Golova (кажется) для смены IB.

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

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

Создано: 07 февраля 2013 17:59 · Поправил: DobryGnom
· Личное сообщение · #5

И ещё вопрос на засыпку: есть одна библиотека,которая всегда грузится по адресу 10000000 независимо от версии операционной системы. Она ничем не упакована,написана на Visual C++ 7.1 - как так происходит,у неё что получается максимальный приоритет при загрузке в память?
hors пишет:
Эти вызовы происходят когда заполняется таблица импорта.

Как их отловить и чем определяется сам порядок длл в адресном пространстве?

Vovan666 пишет:
Была тулза от Dr.Golova (кажется) для смены IB.

У Microsoft есть какая то утилита,Rebase кажется.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 07 февраля 2013 18:12
· Личное сообщение · #6

DobryGnom пишет:
И ещё вопрос на засыпку: есть одна библиотека,которая всегда грузится по адресу 10000000 независимо от версии операционной системы. Она ничем не упакована,написана на Visual C++ 7.1 - как так происходит,у неё что получается максимальный приоритет при загрузке в память?

Есть! Она в импорте первая прописана... или у нее единственной такая ImageBase, а дллки как правило грузятся по своей ImageBase, если место не занято.



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

Создано: 07 февраля 2013 18:18
· Личное сообщение · #7

Vovan666
Таблица импорта в аттаче. Библиотека vbase71.dll находится в самом конце таблицы,но в памяти жестко привязана к адресу 10000000

eecf_07.02.2013_EXELAB.rU.tgz - import_table.txt



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

Создано: 07 февраля 2013 18:25
· Личное сообщение · #8

Vovan666 пишет:
Ну ты же ролокам не объяснил, что в другое место переехал.

ImageBase который указан в опциональном хидере он я так понимаю рекомендуемый. Библиотека должна нормально загружаться по любому адресу.Или релоки привязаны к текущей базе?




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 07 февраля 2013 18:25 · Поправил: hors
· Личное сообщение · #9

DobryGnom пишет:
Как их отловить и чем определяется сам порядок длл в адресном пространстве?


Отловить можно поставив хуки, только загрузчик использует не LoadLibrary, а другие функции с префиксом Ldr*. Порядок загрузки специфичен для каждой оси. В начале грузится сама программа, потом ntdll или kernel32. потом уже другие длл. Посмотреть порядок загрузки модулей можно в структуре PEB_LDR_DATA.

-----
http://ntinfo.biz




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

Создано: 07 февраля 2013 18:29
· Личное сообщение · #10

hors
А если делаешь дамп защищенного файла,структура PEB_LDR_DATA изменяется? Как её вообще починить,в PETools? Я хочу полностью изменить карту памяти и адреса библиотек,не трогая системные




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 07 февраля 2013 19:51
· Личное сообщение · #11

Это всё свинья корячится, регая новые ники.
Лучше в его топики не отвечать. Или будьте готовы, что в личку посыпется уйма идиотских вопросов. Жалобы на это уже были. Просто подождите, всё равно он будет забанен, а топик стёрт.


 eXeL@B —› Основной форум —› Как формируется карта памяти в OllyDbg?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати