OllyDebug окно MemoryDump несколько вопрсов.

Тема в разделе "WASM.BEGINNERS", создана пользователем VBKesha, 8 окт 2008.

  1. VBKesha

    VBKesha New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    39
    Роясь в одной из функций обнаружил что нужный мне кусок памяти расположен в блоке:
    Код (Text):
    1. Memory map, item 76
    2.  Address=7F6F0000
    3.  Size=00007000 (28672.)
    4.  Owner=         7F6F0000 (itself)
    5.  Section=
    6.  Type=Map  00041020
    7.  Access=R E
    8.  Initial access=R E
    Возникли вопросы:
    1. Я правильно понял что это кусок памяти относится к ядру?
    2. Как узнать кто именно создал этот кусок?
    3. Что обозначает тип данного блока "Map 00041020"?
    4. Как получить доступ к этому блоку на запись?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    1. Нет, это проекция секции которой владеет csrss и проецирует её при запуске процесса.
    2. Процесс csrss, модуль csrsrv.dll, Вызывается NtMapViewOfSection, RVA процедуры(XPSP2 5.1.2600.2180) - 0x3866.
    3. Проеция.
    4. В csrss секция спроецирована с полным доступом(на запись). Записав чтолибо в эту память в процессе csrss, это сразу отразится в проекциях этой секции во всех процессах, глобально.

    Можно получить доступ на запись несколькими способами:
    > Скопировать из процесса csrss себе хэндл этой секции и спроецировать её в текущий процесс с дост. на запись.
    Необходимо найти хэндл этой секции, не знаю скока у csrss открытых секций, нужно посмотреть.
    Ссылка на переменную содержащую хэндл секции находится перед вызовом NtCreateSection.
    В модуле csrsrv.dll только один вызов NtCreateSection, именно он создаёт эту секцию. Поиск прост.
    > Писать в проекцию этой секции в процессе csrss.
    > Для вновь запускаемых процессов - можно пропатчить флаги в сервисе NtMapViewOfSection.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    VBKesha
    Не знаю зачем тебе это, вроде ссылок на эту область немного - IsBadReadPtr()/IsBadWritePtr(), и то только чтобы размер страницы определить. Если нужно локально данные изменить - тогда ничего лучше чем тупо освободить проекцию и спроецировать свою секцию либо просто память выделить, но тогда об изменениях в секции ничего известно не будет.