Как отловить запись данных в чужой процесс? (Win32)

Тема в разделе "LANGS.C", создана пользователем MuForum, 22 ноя 2010.

  1. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Доброго времени суток.
    Есть чужая программа Main.exe, мне необходимо написать алгоритм в своей программе MyProgram.exe, чтобы он смог засечь запись данных в область памяти программы Main.exe;
    Вносить изменения в код программы Main.exe я не могу, так как нет исходников, это чужая программа.

    Задача: Мне необходимо определить факт записи данных в область памяти программы Main.exe, а не защитить процесс от записи!
    - Моя программа MyProgram.exe будет запущена всё время на протяжение работы программы Main.exe, и делать какие-то манипуляции по обнаружению записи в чужой процесс.


    То есть, нужно что-то из этого:
    1. Либо обнаруживать открытие чужого процесса. (OpenProcess)
    2. Либо обнаруживать чтение чужого процесса. (ReadProcessMemory)
    3. Либо обнаруживать запись в чужой процесс. (WriteProcessMemory)
    - Нужно что-то придумать по одному из этих методов - Без драйвера.


    P.S. -> Надеюсь на ваши советы, предложения.
    - Необходимо защитится от программ типа ArtMoney...
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    MuForum

    Хукать WriteProcessMemory?

    А причем здесь C++?
     
  3. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Вы предлагаете делать инжект во все процессы системы на функцию WriteProcessMemory?
    - Мне бы хотелось как-то без внедрения в чужие процессы.
     
  4. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    В cmain.dll хук и перехват WPM.
     
  5. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Если вас не затруднит, можно по подробнее?
    WPM - Я так понимаю WriteProcessMemory.
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Нужно в комплексе и желательно пониже (на уровне Nt/Zw).

    +Вариант - инжектнуцо в защищаемую прогу, поставить странице ноаксес и ловить/обрабатывать сепшны.
     
  7. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Вот по этому методу можно немного по подробнее.
    На сколько я понимаю вы имеете ввиду сделать инжект в Main.exe, и вызвать функции VirtualLock(), VirtualProtectEx() с атрибутом "PAGE_EXECUTE_READ"?
    - И поставить обработчик на исключение в том приложении?
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    ну вообще-то я имел ввиду PAGE_NOACCESS, но в вашем случае возможно и PAGE_EXECUTE_READ достаточно.
    а в общем - да, вы все правильно понимаете.
     
  9. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    В лузермоде ваша задача не решается полноценно. Даже вычисление CRC и прочих сумм для сегмента кода не поможет решить задачу - если очень захотеть всегда можно найти способ пропатчить клиента так, чтобы ни одна защита не вякнула. Даже если сделаете отдельный поток для проверки целостности - его просто остановят :) Ну и вариации на тему...
     
  10. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Почему не решается? Задача "защитить от всего" и в кернелмоде не решается полностью. А задачу защитить процесс от "OpenProcess,WriteProcessMemory,ReadProcessMemory" можно решать в юзермоде, и достаточно эффективно. Наиболее оптимальным будет защитить себя от открытия процесса с помощью process token, достаточно блокировать PROCESS_VM_READ и PROCESS_VM_WRITE. Только для этого нужно изначально создавать процесс со специальным token, и защита не будет работать от кернелмода, хотя кернелмод всё равно не использует Read\WriteProcessMemory
     
  11. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Это как, расскажите нам? И что, даже TOKEN_ADJUST_PRIVILEGES не поможет? Не смешите.
     
  12. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    не достаточно... как быть с дублированием хендла из самого процесса или из csrss.exe...

    вот это довольно весело, поддерживаю!)
     
  13. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Можно по подробнее о данном методе?
     
  14. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Если для объекту процесса на старте присвоить security descriptor такой, что никто к этому процессу доступа иметь не может, то его нельзя будет открыть. Есть проблема, пользователь SYSTEM, админ или ещё какой пользователь который имеет SeDebugPrivilege будет игнорировать DACL для процесса (Могу тут врать, если вру поправьте). Однако если а) пользователь не сидит под админом б) у всех процессов суметь отнять SeDebugPrivilege каким либо образом, то описанной проблемы не будет. Точно так же нет проблемы клонирования хендла из csrss.exe т.к. он защищён подобным образом.
    Правда судя по первому посту человеку не подходит этот метод... Хотя если суметь отнять SeDebugPrivilege у "программ типа ArtMoney", то всё сработает.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    щас проверил, для того чтобы дублировать хендл с PROCESS_ALL_ACCESS у процесса на том же Integrity Level под вистой SeDebugPrivilege не нужно... хендл csrss.exe не получить в любом случае, так как он на более высоком Integrity Level... насчет csrss.exe в xp - не помню, возможно потребуется SeDebugPrivilege... решение с залочиванием памяти мне как то гораздо больше нравится...
     
  16. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    А как же UAC bypass?
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    UAC включен и молчит...