eXeL@B —› Вопросы новичков —› Можно ли как то вычислить адрес команды другого процесса |
Посл.ответ | Сообщение |
|
Создано: 29 ноября 2019 05:00 · Личное сообщение · #1 Добрый день. Допустим, есть программа 1, которая правит(считывает) какое либо значение в другой программе 2. Могу ли я, как то из запустив программу 2 в отладчике, вычислить адрес в программе 1 с которого идет обращение к памяти в программе 2. По сути нужен такой "брейкпойнт", который ставится на доступ к определенному участку памяти и показывает обращение к нему из вне.... Спасибо |
|
Создано: 29 ноября 2019 05:36 · Поправил: plutos · Личное сообщение · #2 AlexsandrS пишет: программа 1, которая правит(считывает) какое либо значение в другой программе 2. как именно, через какой механизм? AlexsandrS пишет: Могу ли я, как то из запустив программу 2 в отладчике, вычислить адрес в программе 1 с которого идет обращение к памяти в программе 2. Так может нужно программу 1 запускать в отладчике и в ней ставить breakpoint? ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 29 ноября 2019 05:46 · Личное сообщение · #3 |
|
Создано: 29 ноября 2019 06:19 · Поправил: plutos · Личное сообщение · #4 |
|
Создано: 29 ноября 2019 07:54 · Личное сообщение · #5 Формально в юзермоде при ReadProcessMemory обращения к памяти чужого процесса нет, есть вызов сервиса ОС. А сервис ос копирует в указанный буфер данные, он не связан с памятью чужого процесса. Брейкпоинт это когда отладчик может вызвать исключение при каком-то действии и обработать его. То есть либо ты ставишь бряк на исполнение функции, а потом на обращение к буферу (самая приятная часть здесь в том, что содержимое буфера скорей всего будет еще 15 раз скопировано в другие буферы, прежде чем содержимое будет обрабатываться), либо хз чего тебе еще надо. Наверное можно написать скрипт для отладчика, который частично эти пляски автоматизирует, но не больше. ----- 2 оттенка серого |
|
Создано: 29 ноября 2019 07:56 · Личное сообщение · #6 AlexsandrS [Как я понял] Дано: App1 -> патчит App2 Задача: Узнать, что именно App1 пропатчил в App2. Работать нужно только с App2. Решение: 1. Сделать дамп App2 до запуска App1 (когда App1 ещё не пропатчил App2) и после запуска App1 (когда App1 уже пропатчил App2) 2. Сравнить полученные дампы. Увидеть разницу. Можно сравнивать конкретные секции или регионы памяти. Адреса получаются элементарно, поскольку в результате сравнения дампов становится понятно, где что изменилось. ----- EnJoy! |
|
Создано: 29 ноября 2019 08:32 · Поправил: plutos · Личное сообщение · #7 |
|
Создано: 29 ноября 2019 09:56 · Личное сообщение · #8 |
|
Создано: 29 ноября 2019 11:13 · Личное сообщение · #9 Ребят, спасибо за ответы, просто в CheatEngine есть возможность фиксировать определенный адрес и смотреть все обращения к этому адресу. Я знаю, что в отладчиках есть возможность так же поставить точку останова на определенный адрес и отслеживать обращения к этому участку памяти, но было интересно есть ли техническая возможность отлавливать обращения к участку памяти из другого процесса наподобие как это делается в рамках одного процесса. |
|
Создано: 29 ноября 2019 11:21 · Поправил: kunix · Личное сообщение · #10 Мне кажется, единственный нормальный вариант под Windows - это перехват системного вызова из своего драйвера ядре. В Linux-ах это позволяет делать из юзермода механизм ptrace, но в Windows о таком не слышал. Еще можно перехватить Read/WriteProcessMemory в нужном процессе, но это все хореографические постановки с ударными музыкальными инструментами. |
|
Создано: 29 ноября 2019 12:09 · Поправил: dezmand07 · Личное сообщение · #11 |
|
Создано: 29 ноября 2019 14:15 · Личное сообщение · #12 |
|
Создано: 30 ноября 2019 11:44 · Личное сообщение · #13 AlexsandrS пишет: но было интересно есть ли техническая возможность отлавливать обращения к участку памяти из другого процесса Обращение к памяти другого процесса действительно происходит, с кернел мода. Техническая возможность такое ловить однохуйственна фильтрованию аргументов ReadProcessMemory и отслеживанию того, что потом происходит с содержимым буфера. Нету идеального способа ассоциировать мгновенное значение произвольного байта из адресного пространства одного процесса с мгновенным значением байта в адресном пространстве другого. ----- 2 оттенка серого |
|
Создано: 30 ноября 2019 13:13 · Личное сообщение · #14 Кстати, уточняющий вопрос по теме ТС. Можно ли внутри своей программы понять, что к ней кто-то лезет извне? (при условии: драйвера у нас нет и во все процессы системы не внедряемся) Интересует отслеживание OpenProcess, Read/WriteProcessMemory, VirtualAllocEx и VirtualProtectEx. Т.е. например если внешний процесс пытается начать отладку моего процесса, я могу это узнать с помощью перехвата функции DbgUiRemoteBreakin, подобным же образом можно отследить запуск потока, загрузку dll. Но вот с вышеперечисленными функциями я ничего похожего не нашел. |
|
Создано: 30 ноября 2019 13:16 · Личное сообщение · #15 user99 Нет. Отлаживать и грузить длл тоже можно незаметно. С незаметным стартом потока сложнее. Но при некоторых условиях и это решаемо. | Сообщение посчитали полезным: user99 |
|
Создано: 01 декабря 2019 11:40 · Личное сообщение · #16 |
eXeL@B —› Вопросы новичков —› Можно ли как то вычислить адрес команды другого процесса |