Отследить обращение к памяти одной программы, другой...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Отследить обращение к памяти одной программы, другой...

Сообщение TrueTrue » 17.05.2011 (Вт) 19:36

Прошу прощения, возможно похожие вопросы существуют, но я не знаю, как правильно поставить вопрос.

Вобщем ситуация следующая. Есть процесс, игра, необходимо отследить обращение к памяти этого процесса и возможные изменения (из вне). Тоесть, возможно ли отследить, какие программы, обращаются к памяти данного процесса в данным момент. Производят чтение или изменение конкретных или любых байтов в памяти данного процесса. Вобщем мне необходима любая инфа о том, какие программы из вне, лезут в память данного процесса.
Возможно ли подобное сделать на VB6. Разбираться готов сам, подскажите направление. :)

К чему это? Необходимо сделать Античит.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Отследить обращение к памяти одной программы, другой...

Сообщение Хакер » 17.05.2011 (Вт) 20:34

Есть два пути:
  1. воспользоваться родной системой безопасности NT. Препятствовать действиям можно установкой прав, следить — с помощью аудита. Но я не уверен, что у тебя получится задуманное.
  2. Внедриться во все процессы и перехватить нужные функции. Для отслеживания придётся перехватить ReadProcessMemory и WriteProcessMemory. Для воспрепятствования достаточно обламывать запросу на получение права PROCESS_VM_XXX. Хотя родитель заведомо будет иметь все права.
Полноценно работающих способов не будет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: Отследить обращение к памяти одной программы, другой...

Сообщение TrueTrue » 17.05.2011 (Вт) 23:41

Хакер писал(а):Есть два пути:
    Внедриться во все процессы и перехватить нужные функции. Для отслеживания придётся перехватить ReadProcessMemory и WriteProcessMemory. Для воспрепятствования достаточно обламывать запросу на получение права PROCESS_VM_XXX. Хотя родитель заведомо будет иметь все права.
Полноценно работающих способов не будет.

Тоесть, нет смысла даже ломать над этим голову? Или всё же шансы есть?

А если меня бы устроило хотя бы просто, знать... что есть программа, которая вмешивается в память моего процесса. Что касается воспрепятствования, то я просто буду банить человека по IP. Такое, однозначно добиться возможно? Меня бы это полностью устроило.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Отследить обращение к памяти одной программы, другой...

Сообщение Twister » 18.05.2011 (Ср) 7:33

Можно не писать ничего самому, а найти в сети программу HideToolz версии > 2.
А я все практикую лечение травами...

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: Отследить обращение к памяти одной программы, другой...

Сообщение TrueTrue » 18.05.2011 (Ср) 9:31

Twister писал(а):Можно не писать ничего самому, а найти в сети программу HideToolz версии > 2.
но мне нужно, эту возможность проверки, внедрить именно в свою программу-клиент.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Отследить обращение к памяти одной программы, другой...

Сообщение Twister » 18.05.2011 (Ср) 11:29

Разбираться готов сам, подскажите направление.
Направление было подсказано. Это перехват функций, работающих с памятью.

Однако перехватывать в третьем кольце довольно муторное занятие - тебе придётся не только внедрить свой код во все работающие процессы, но так же контролировать создание новых. Гораздо легче производить фильтрацию в ядре, для этого достаточно контролировать лишь два сервиса: NtReadVirtualMemory и NtWriteVirtualMemory.
Но не стоит так же забывать, что из ядра твою память можно читать и в обход этих функций. Думаю что найдётся немало утилит, способных аттачиться к целевому процессу с помощью KeStackAttachProcess и работать с его памятью напрямую, как со своей (так, к примеру, поступает плагин ExtremeDumper для PETools).
Можно пойти еще дальше и взять под надзор KeStackAttachProcess и KeAttachProcess, но и тут найдутся обходные пути: начиная от изменения регистра cr3 до чтения физической памяти.

В общем, всё это борьба с ветряными мельницами. Если кому-то потребуется прочитать/модифицировать твою память, он сделает это в любом случае.
А я все практикую лечение травами...

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: Отследить обращение к памяти одной программы, другой...

Сообщение TrueTrue » 18.05.2011 (Ср) 13:50

Twister писал(а):В общем, всё это борьба с ветряными мельницами. Если кому-то потребуется прочитать/модифицировать твою память, он сделает это в любом случае.
Меня это полностью устраивает, на сегодняшний день, дело в том, что сами игроки вряд ли будут разбираться в принципах моего античита, им по большей части проще скачать готовый чит. А читы, не писались под наш портал... Потому, пока кто-то созреет написать обход моей защиты, надеюсь у меня будет время придумать ещё что-то)

Twister писал(а):Однако перехватывать в третьем кольце довольно муторное занятие - тебе придётся не только внедрить свой код во все работающие процессы, но так же контролировать создание новых. Гораздо легче производить фильтрацию в ядре, для этого достаточно контролировать лишь два сервиса: NtReadVirtualMemory и NtWriteVirtualMemory.
Спасибо за подсказку) Пошёл разбираться..., буду очень признателен, если кто-то подскажет любую инфу или ссылки, по поводу интеграции в процессы и контроля NtReadVirtualMemory и NtWriteVirtualMemory.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Отследить обращение к памяти одной программы, другой...

Сообщение Хакер » 18.05.2011 (Ср) 13:56

Вот ещё способы, которые устойчивы к вышеописанному:
  1. Пометить особо важные страницы памяти guard-флагом и повесить SEH-хендлер, который будет реагировать на соответствующие исключения и ставить guard-флаг обратно. Тогда, если обращение есть, а guard-флага вдруг нет, значит сторонний процесс (или сторонний поток) читал память. Хотя сторонний агент может и заново поставить guard-флаг, тут надо иметь специальный инструмент. И вообще, «читателя» собьёт большой заguardенный регион: он подумает, что это чей-то стек.
  2. Ставить особо важным страницам доступ PAGE_NOACCESS. И не снимать его самому. Ставить SEH-хендлер и реагировать на все EXCEPTION_ACCESS_VIOLATION при обращении к этим страницам. Если это чтение — читать dword и расшифровывать его. Если запись — зашифровывать и записывать. Тогда, если читатель и уберёт NOACCESS, он увидит зашифрованный мусор. И как минимум тупым поиском по памяти какую-нибудь строчку или последовательность байтов он уже не найдёт.
Но и это обходится, правда не так легко (в плане большей работы по исследованию) как перехват.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Отследить обращение к памяти одной программы, другой...

Сообщение Twister » 18.05.2011 (Ср) 16:33

буду очень признателен, если кто-то подскажет любую инфу или ссылки, по поводу интеграции в процессы и контроля NtReadVirtualMemory и NtWriteVirtualMemory
Так ты уж определись. Или ты лезешь во все процессы в юзермоде, или пишешь драйвер для контроля вышеупомянутых сервисов. Я думаю понятно, что второго на VB не сделать. Да и с первым не всё просто будет.

В общем, если эта тема для тебя новая (а я думаю что это так) - вперед на wasm.ru учить матчасть.

Кстати, если защищаемое приложение твоё и ты имеешь доступ к сорцам, то второй предложенный Хакером способ вполне себе ничего. Известный протектор Themida юзает что-то похожее.
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 23

    TopList  
cron