Есть программа, память которой хочется прочитать, но при этом хочется, чтобы программа об этом 100% не узнала (подобный способ упростил бы кое в чем жизнь, но и без него можно выполнять нужные мне действия, поэтому если нет простого или готового решения, то и черт с ним). Проблема в том, что вместе с программой идет драйвер защиты, который может перехватывать ReadProcessMemory и сообщать о нем программе. Есть ли у кого-нибудь драйвер-посредник, самостоятельно реализующий ReadProcessMemory? Или возможно можно вытащить информацию читая физическую память? Права администратора на компе имеются.
Если это xprotector / themida, то для снятия дампа можно поступить так: Ставим хук на ntdll!ZwTerminateProcess. Когда защищённая прога завершится, но ещё не вернёт управление в ядро, сработает наш хук. Тут можно спокойно аттачиться к ней хоть отладчиком и дампить со всеми потрохами. Как обойти защиту от ZwReadVirtualMemory в процессе выполнения программы - не знаю. В принципе, эти хуки можно сбрасывать, но пакеры также ловят ZwWriteVirtualMemory и т.п., т.е. там ещё несколько уровней защит.
загрузи свой драйвер а дальше ставь хук на какую нить функцию sdt и лови контекст из драйвера, предварительно пробей id процесса, или проще KeStackAttachProcess()
либо действительно можешь для этого процесса сделать копию sdt, предварительно прописав в Eprocess адрес и ставить туда свои хуки , это будет уже интереснее
Мне нужно сдампить не только код (но у меня нет цели сделать из него работающий exe'шник), но и данные во время работы программы. Утилита SDT Restore (немедленно записанная в директорию самых полезных программ ) показывает, что перехвачены только ZwClose, ZwCreateKey, ZwCreatePagingFile, ZwEnumerateKey, ZwEnumerateValueKey, ZwOpenKey, ZwQueryKey, ZwQueryValueKey, ZwSetSystemPowerState (это нормальный список для антивируса?). Это значит, что ReadProcessMemory не перехватывается?
Делаешь в обработчике IOCTL_MY_MEMORY_OPERATION в драйвере следующее: Мапишь память требуемого процесса в свой процесс через MDL Считываешь\записываешь данные Размапливаешь
mix_mix Нужно не просто прочитать память процесса - это я сделал без труда. Нужно сделать это не заметно (а программа еще шифрует свои данные, когда ее окно не активно - первый раз такое вижу). На счет предыдущих постов - все это конечно хорошо, если бы я что-нибудь понимал в драйверописании. Поэтому мне либо нужен готовый драйвер, либо я обойдусь "заметным" чтением памяти.
halyavin А зачем тебе это нужно? Не проще ли запустить твою супер-защищенную программу под вирутальной машиной и просто слить память виртуальной машины в файл, в VMWare даже опция такая есть - остановка системы с дампингом памяти в файл. Ну, или можно искусственно вызвать бсод предварительно настроив виндовс на дампинг памяти при ошибке ядра. Если очень хочется программно - попробуй найти селектор дескрипторной таблицы твоего процесса и с его помощью из драйвера на асме прочитать память. Даже если не получиться, много нового узнаешь
Folk Acid Не забудь, что надо еще найти память процесса в дампе всей памяти. Селектор дескрипторной страницы = таблица страниц? Селекторы сегментов-то у всех приложений одинаковы.
halyavin А отладчик почему не используешь ?! Или ты уже знаешь, где править, но знаешь чем ?! Тогда используй готовые патчеры. Есть такие, которые могут интерактивно работать по скриптам.
valterg Мне не нужно ломать прогу (по крайней мере пока) - у меня цель разобраться в ее коде и данных (в основном в данных). Проблема, в том, что прога может втихую записать в сохраняемые файлы пометку, о том, что ее дампили (и у меня нет средств, чтобы проверить есть эта пометка или нет). А файлы потом будут проверяться на сервере в интернете и эту проверку хочется пройти. Поэтому на данный момент после использования дампера прогу приходиться на всякий случай перезапускать (вот от этой операции и хочется избавиться, сэкономив таким образом свое время). S_T_A_S_ Хорошая утилита, но разве она не использует просто ReadProcessMemory? По крайней мере эта функция есть в секции импорта. PS Кажется в статье Ms-Rem'a есть описание того, как это нужно делать. Но готовое решение все же не устраивает по скорости и по интерфейсу. Попробую его модифицировать, чтобы устраивало...
Зачем там ReadProcessMemory хз, с ней идёт драйвер userdump.sys который импортирует KeAttachProcess... Подробнее знаю лишь одно - дамп можно в WinDbg загружать