Отключение защиты памяти в NT

Тема в разделе "WASM.WIN32", создана пользователем Drakon Rider, 30 янв 2006.

  1. Drakon Rider

    Drakon Rider New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2002
    Сообщения:
    21
    Адрес:
    Russia
    Есть комплект старых программ, которые сделаны для Вин98 и передача некоторых данных между разными програмами происходит "прямой записью в память процесса"... ну или как-то похоже через полухакнутое WinAPI. В Вынь98 это все работает нормально, он при попытке работы с Win2000 или далее, система закрывает этот софт за ошибку доступа к памяти, т.е. в НТях такое похоже уже запрещено.



    Есть какие-нить методы отключения проверки на запись в память "другого процесса" в НТях ? Т.е. фактически надо порушить часть системы разграничения доступа к памяти в НТях имхо...



    Или может как-нить для этих программ "поднять приоритет" чтобы им разрешалось перекидываться байтами между собой ?
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
  3. Drakon Rider

    Drakon Rider New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2002
    Сообщения:
    21
    Адрес:
    Russia
    в описании указано The handle must have PROCESS_VM_WRITE and PROCESS_VM_OPERATION access to the process.



    т.е. необходимо как-то поставить эти опции (флаги) у хендлов обоих процессов ?



    программы есть только в виде готовых исполняемых файлов : editor.exe и engine.exe ... из editor.exe по команде запускается engine.exe и некоторым образом через "запись в память" передаются параметры и что-то возвращается... при этом engine.exe достаточно быстро закрывается системой за запрещенный доступ к памяти при пересылке информации о некоторых объектах (не всех - часть пересылок работает)...
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Права задают при получении хендла OpenProcess'ом.

    Если есть только исполняемые файлы - для начала нужно определить как происхолит "запись в память"
     
  5. Drakon Rider

    Drakon Rider New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2002
    Сообщения:
    21
    Адрес:
    Russia
    вообщем как было примерно раскопано реверсингом обмен идет через File Mapping причем похоже CreateFileMapping создается одним процессом, а OpenFileMapping и затем чтение/запись производится вторым (по переданному хендлу похоже) - это работает в Вынь98, но падает в Вынь2000 ...
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Drakon Rider

    > "по переданному хэндлу похоже"

    Похоже или точно ?

    В отличие от NT+, в 9x файлы маппятся в 3-й гигабайт, разделяемый всеми процессами.

    Поэтому в 9х есть возможность прямого обращения к View, созданного другим процессом, т.е. второй процесс может и не создавать дубликат хэндла FM-объекта и свой View, а просто читать\писать по адресу, переданному из другого процесса. Ес-но в NT такой trick не проходит, т.к. все View являются приватными
     
  7. Drakon Rider

    Drakon Rider New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2002
    Сообщения:
    21
    Адрес:
    Russia
    >Похоже или точно ?



    предположительно... т.к. вроде OpenFileMapping сам не может получить хендл и его где-то надо брать...



    >В отличие от NT+, в 9x файлы маппятся в 3-й гигабайт, разделяемый всеми процессами.

    Поэтому в 9х есть возможность прямого обращения к View, созданного другим процессом, т.е. второй процесс может и не создавать дубликат хэндла FM-объекта и свой View, а просто читать\писать по адресу, переданному из другого процесса. Ес-но в NT такой trick не проходит, т.к. все View являются приватными



    и чем тогда это фиксить то ?
     
  8. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    Drakon Rider

    я что тебе мешает присоеденить к процессу передатчику свою длл и к процессу приемнику тоже и пусть они симулируют для этихпроцессов обмен.
     
  9. Drakon Rider

    Drakon Rider New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2002
    Сообщения:
    21
    Адрес:
    Russia
    > присоеденить к процессу передатчику свою длл и к процессу приемнику тоже и пусть они симулируют для этихпроцессов обмен



    ну это немало прикручивать имхо... еще багу похоже программную раскопал - там в одном месте сначала делается UnMapViewOfFile, а потом и отмапленной памяти читается через несколько команд - возможно это работало в Вынь98, но в Вынь2000 сразу приводит к ошибке... если UnMap обойти, то валится уже не Engine.exe, а Editor.exe - вообщем похоже не совсем правильно исходные программы были сооружены...



    исходный вопрос сохраняется - вообще отключить проверку "защищенности" памти в НТях можно как-нить несложно или это аппаратная фича процессора и т.д. ? почему тогда в Вынь98 это все работало ? или она по-другому обрабатывает UnMapViewOfFile и отмапленная память остается доступна для чтения ?
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    > "почему тогда в Вынь98 это все работало ? или она по-другому обрабатывает UnMapViewOfFile и отмапленная память остается доступна для чтения ?"

    Я ж тебе толкую, что в 9x MapView создается в системном shared регионе, поэтому к нему сохраняется доступ из любого процесса пока система его не грохнет. А грохнуть она его может ес-но только после того как все процессы, владеющие данным объектом MMF, сделают UnMap и к тому же закроют все хэндлы этого MMF.

    В NT все MapView приватные для каждого процесса и становятся инвалидными сразу после UnMap в каждом конкретном процессе



    PS: Если дело в этом, то фантазии на тему "отключить проверку" это просто бред, т.к. в результате UnMap в NT делается VirtualFree выделенного региона памяти данного процесса, соответствующие страницы его виртуальной памяти помечаются как неприсутствующие, их связь с физ.памятью разрывается и тут уж ничего не поделаешь - "программно-аппаратная фича", если угодно ;)
     
  11. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    что так тянет использовать устаревший софт на совеременной ОС? если прога из-за несовместимости не работает в WinNT/2k/XP, а работает в Win9x, то и ползуйтесь её в Win9x

    или вас держит привязанность к закрытым помершим программам?

    если это всё ещё и коммерческая разработка - то тут уж вообще не понятно желание ТАК экономить на новом.
     
  12. Drakon Rider

    Drakon Rider New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2002
    Сообщения:
    21
    Адрес:
    Russia
    >что так тянет использовать устаревший софт на совеременной ОС?



    потомушто после апгрейда железа на i915, Вин98 перестала запускаться :/ ... зато на новом железе Engine тянет существенно больше полигонов при достаточном фпс, чем в 1999 году и можно сделать более детализированные модели и уровни...
     
  13. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ




    отключить защиту памяти то есть чтобы все страницы в системе были "user" как ни странно весьма несложно - пару бит в ntldr-е

    но только тебе это 99% не поможет

    винда 98 от NT не только этими битами отличается :)

    дореверси до конца и разберись почему именно не идет

    тогда можно на эту так дозарезу нужную прогу написать обертку например

    или попатчить ну это как доктор пропишет

    если в питере - давай помогу
     
  14. Drakon Rider

    Drakon Rider New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2002
    Сообщения:
    21
    Адрес:
    Russia
    >пару бит в ntldr-е



    а которые ? :) ... я хоть попробую...



    >или попатчить ну это как доктор пропишет

    если в питере - давай помогу



    да - в питере, как связаться я не нашел... у меня адрес admin@drakan.ru - напиши плиз чтобы обсудить как что...