Незаметное чтение памяти процесса.

Тема в разделе "WASM.WIN32", создана пользователем halyavin, 6 июл 2006.

  1. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Есть программа, память которой хочется прочитать, но при этом хочется, чтобы программа об этом 100% не узнала (подобный способ упростил бы кое в чем жизнь, но и без него можно выполнять нужные мне действия, поэтому если нет простого или готового решения, то и черт с ним). Проблема в том, что вместе с программой идет драйвер защиты, который может перехватывать ReadProcessMemory и сообщать о нем программе. Есть ли у кого-нибудь драйвер-посредник, самостоятельно реализующий ReadProcessMemory? Или возможно можно вытащить информацию читая физическую память? Права администратора на компе имеются.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Если это xprotector / themida, то для снятия дампа можно поступить так:
    Ставим хук на ntdll!ZwTerminateProcess.
    Когда защищённая прога завершится, но ещё не вернёт управление в ядро, сработает наш хук. Тут можно спокойно аттачиться к ней хоть отладчиком и дампить со всеми потрохами.

    Как обойти защиту от ZwReadVirtualMemory в процессе выполнения программы - не знаю. В принципе, эти хуки можно сбрасывать, но пакеры также ловят ZwWriteVirtualMemory и т.п., т.е. там ещё несколько уровней защит.
     
  3. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    Востанови таблицу. Посмотри как это делает SDT Restore от 90210. И тогда делай что хочешь.
     
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    А если драйвер контролирует снятие хука?
     
  5. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    Ну так ... я ж не знаю, что это за драйвер, пусть автор смотрит и принимает решение, как делать.
     
  6. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    загрузи свой драйвер а дальше ставь хук на какую нить функцию sdt и лови контекст из драйвера, предварительно пробей id процесса, или проще KeStackAttachProcess()
     
  7. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    либо действительно можешь для этого процесса сделать копию sdt, предварительно прописав в Eprocess адрес и ставить туда свои хуки , это будет уже интереснее
     
  8. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Мне нужно сдампить не только код (но у меня нет цели сделать из него работающий exe'шник), но и данные во время работы программы.
    Утилита SDT Restore (немедленно записанная в директорию самых полезных программ ;)) показывает, что перехвачены только ZwClose, ZwCreateKey, ZwCreatePagingFile, ZwEnumerateKey, ZwEnumerateValueKey, ZwOpenKey, ZwQueryKey, ZwQueryValueKey, ZwSetSystemPowerState (это нормальный список для антивируса?). Это значит, что ReadProcessMemory не перехватывается?
     
  9. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    Это значит что в таблице SDT адресса не изменены. Но перехват еще возможен методом сплайсинга.
     
  10. valinor

    valinor New Member

    Публикаций:
    0
    Регистрация:
    7 май 2005
    Сообщения:
    27
    Делаешь в обработчике IOCTL_MY_MEMORY_OPERATION в драйвере следующее:

    Мапишь память требуемого процесса в свой процесс через MDL
    Считываешь\записываешь данные
    Размапливаешь
     
  11. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    А нельзя просто окрываеть процесс с флагом отладки, тормозить его и делать все, что хочется?
     
  12. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    mix_mix
    Нужно не просто прочитать память процесса - это я сделал без труда. Нужно сделать это не заметно (а программа еще шифрует свои данные, когда ее окно не активно - первый раз такое вижу). На счет предыдущих постов - все это конечно хорошо, если бы я что-нибудь понимал в драйверописании. Поэтому мне либо нужен готовый драйвер, либо я обойдусь "заметным" чтением памяти.
     
  13. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    halyavin
    А зачем тебе это нужно? Не проще ли запустить твою супер-защищенную программу под вирутальной машиной и просто слить память виртуальной машины в файл, в VMWare даже опция такая есть - остановка системы с дампингом памяти в файл.

    Ну, или можно искусственно вызвать бсод предварительно настроив виндовс на дампинг памяти при ошибке ядра.

    Если очень хочется программно - попробуй найти селектор дескрипторной таблицы твоего процесса и с его помощью из драйвера на асме прочитать память. Даже если не получиться, много нового узнаешь :)
     
  14. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Folk Acid
    Не забудь, что надо еще найти память процесса в дампе всей памяти.
    Селектор дескрипторной страницы = таблица страниц? Селекторы сегментов-то у всех приложений одинаковы.
     
  15. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    halyavin
    А отладчик почему не используешь ?! Или ты уже знаешь, где править, но знаешь чем ?! Тогда используй готовые патчеры. Есть такие, которые могут интерактивно работать по скриптам.
     
  16. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Попробуй UserMode Process Dumper от Microsoft, может её драйвера будет достаточно.
     
  17. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    valterg
    Мне не нужно ломать прогу (по крайней мере пока) - у меня цель разобраться в ее коде и данных (в основном в данных). Проблема, в том, что прога может втихую записать в сохраняемые файлы пометку, о том, что ее дампили (и у меня нет средств, чтобы проверить есть эта пометка или нет). А файлы потом будут проверяться на сервере в интернете и эту проверку хочется пройти. Поэтому на данный момент после использования дампера прогу приходиться на всякий случай перезапускать (вот от этой операции и хочется избавиться, сэкономив таким образом свое время).
    S_T_A_S_
    Хорошая утилита, но разве она не использует просто ReadProcessMemory? По крайней мере эта функция есть в секции импорта.
    PS Кажется в статье Ms-Rem'a есть описание того, как это нужно делать. Но готовое решение все же не устраивает по скорости и по интерфейсу. Попробую его модифицировать, чтобы устраивало...
     
  18. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Зачем там ReadProcessMemory хз, с ней идёт драйвер userdump.sys который импортирует KeAttachProcess... Подробнее знаю лишь одно - дамп можно в WinDbg загружать ;)