Отслеживание и блокировка доступа к памяти процесса. Ring0

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

  1. SomeOne_TT_WORK

    SomeOne_TT_WORK New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    7
    Нет ли ring-0 решений с исходным кодом, которые бы контролировали доступ к памяти процесса?
    Если нет, то какие способы наиболее подходят для этой цели?
     
  2. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Заперить доступ к старници памяти, и отслеживать прерывание по ошибке
     
  3. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    + Отслеживать изменение атрибутов доступа к странице :)
     
  4. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    + Отслеживать случаи когда дескрипторов стриниц на один и тот-же участок памяти - несколько.
    + Отслеживать попытки создания дескрипторов страниц, опять же на этот участок памяти.
     
  5. SomeOne_TT_WORK

    SomeOne_TT_WORK New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    7
    Благодарю. Вообще-то ) я имел в виду доступ к памяти процесса со стороны - т.е. внедрение кода/изменение структур/хуки и т.п.
     
  6. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    SomeOne_TT_WORK тоже самое, в r0 по другому не получится
     
  7. SomeOne_TT_WORK

    SomeOne_TT_WORK New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    7
    Гм. Но это же гигантский оверхед, нет?
    Игра с подобной "защитой" от модификации будет еле-еле плестись
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Проверял ?
    Зависит от того , как вы такую защиту реализуете.
    А так, конечно, если винда еле плетется и вы еще защиту включите.. тогда вообще будет ахтунг..
     
  9. green_newbie

    green_newbie New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2006
    Сообщения:
    51
    Для отслеживания записи/чтения в память другого процесса для юзермодных приложений достаточно хукать NtReadProcessMemory/NtWriteProcessMemory
     
  10. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Точно. И нет никаких гарантий, что не будет обходных путей. Именно поэтому в ядро кого попало лучше не пускать

    + Запретить восстановление оригинального обработчика прерывания, что невозможно в принципе
     
  11. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    >> Для отслеживания записи/чтения в память другого процесса для юзермодных приложений достаточно хукать NtReadProcessMemory/NtWriteProcessMemory

    великое заблуждение... см хотя бы Рихтера
     
  12. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    ?
     
  13. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    классический способ Рихтера это загрузка dll функцией CreateRemoteThread с LoadLibrary. NtWriteProcessMemory там не используется .
     
  14. nermest

    nermest New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    157
    А как же WriteProcessMemory с занесением в адресное пространство целевого процесса строки с именем dll? Рихтер как раз использует WriteProcessMemory, что превращается в NtWriteVirtualMemory.
    ЗЫ. А NtWriteProcessMemory где такая? Просто ни в экспорте NtDll, ни в Ntoskrnl мне ее не видно...
     
  15. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    а если подумать чуток?
    решение в лоб:
    1. любой PE файл имеет ASCIIZ строку
    2. системные dll загружены по одним адресам
    3. ...

    у Рихтера вроде были и другие способы

    ЗЫ с NtWriteProcessMemory я ошибся имел ввиду NtWriteVirtualMemory конечно же
     
  16. nermest

    nermest New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    157
    спасибо за носом об батарею)) и правда не подумал
     
  17. Dimson

    Dimson New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2005
    Сообщения:
    59
    Адрес:
    Russia
    А если инжектровать .dll в адресное пространство процесса через LoadLibrary вполне документированно, а из неё попытаться считать то, что нужно? Получится дампер. Т.е. получается, что надо проверять из какой именно области адресного пространства исходного процесса произошло обращение. Так что надо ещё много чего похучить, чтобы таким образом построить защиту...
     
  18. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Построить подобную защиту в принципе невозможно. Защититься можно только от юзер-модного кода, который работает без прав отладки, загрузки драйверов, и не может никаким образом их получить (т.е. не может надурить пользователя, не существует никаких сплойтов и много всяких других если). В реальной жизни такого не встречается.
     
  19. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    просто человек не понял о чем идет речь, а об страничной адресации не имеет понятия :)
     
  20. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    впринципе то возможна - запускать код на эмуляторе... но скорость никакая. или парсить перед выполнением код и верифицировать. но это хорошо работает для других языков ( дотнет )