Процесс защищенный от WriteProcessMemory/ReadProcessMemory

Тема в разделе "WASM.WIN32", создана пользователем umka60, 18 янв 2009.

  1. umka60

    umka60 New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    7
    Здравствуйте.
    Знаю многим интересно как можно сделать так, чтобы в процесс ничего не могло попасть, чтобы нельзя было сломать программу. Топиков на эту тему здесь было много. И статей. Для блокировки функций WriteProcessMemory/ReadProcessMemory и прочего антидампинга как правило используется драйвер в нулевом кольце, который там уже перехватывает NtOpenProces/NtWriteProcessMemory/NtReadProcessMemory. С эти все понятно, расисанно очень много.
    но недавно я наткнулся на софтину. назначени софтины врядли будет кому инетересно - античит для игрушки.
    сама софтина
    сайт _http://ucp-anticheat.ru/
    ссылка на бинарник _http://ucp-anticheat.ru/client/ucpclient21.zip
    вот эта штука, значит, делает свой процесс недоступным для выше приведенных функций. ПРИЧЕМ НЕ ЛЕЗЕТ ДРАЙВЕРАМИ В РИНГ0!!!!!
    КАК ОНА ЭТО ДЕЛАЕТ???
    понимаю что автор конечно не расскажет, но чтож у нас есть дизасемблеры :)
    поэтому я начал ковырять, уж очень инетересно знать КАК она это делает, я думаю многим будет тоже.
    прога запакованна VMProtect'ом последних версий. хороший конечно криптор.... распоковать у меня не получается, да и это не важно, главное подглядеть как она это делает.
    я смог залезть в дизасм этой проги с олей. вообще олю она все время кикает, в вмпротекте антиотладка есть. (кстати тоже не смог понять как так сделанно, что обнаруживает олю, хотя на ней плугин фантом стоит)
    чтобы залезть мне пришлось сделать так:
    в главном процессе ucp.exe SuspendThread (при помощи ProcessExplorera), он там один егошний.
    кикаем нафиг процесс ucp.exe, который дочерний, т.е. игрушку.
    атачим дебугер к оставшемуся процессу ucp.exe

    что очень интересно! - при заторможенном треде в ucp.exe на него действует WriteProcessMemory/ReadProcessMemory.
    стоит только запустить тред и пипец.
    Он видимо что-то все время подписывает куда-то... какие нибудь контесы процесса/треда... но что и куда?
    кто знает расскажите пожайлуйста, как такое можно сделать??? или давайте кыврять вместе!

    так же нашел аналогичную поделку, ее еще мало ковырял, помоему тогоже автора.
    _http://dump.ru/file/1444187
    помоему менее совершенна в плане защиты, но принципе тотже. зажата ExeCryptorom. Сейчас пойду пытаться снять криптор...
     
  2. freeq

    freeq New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    47
    гы, да полюбому просто сплайсит ф-ции, например CreateProcess в explorer, а дальше запрещает записывать читать новому процесс память из своего, теми же хуками на WriteProcessMemory/ReadProcessMemory
    --
    хотя я не смотрел, так что не орать если ошибся
     
  3. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    umka60 РКУ запусти и проверь.
     
  4. umka60

    umka60 New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    7
    freeq нет. он должен был бы тогда пропатчить все процессы в памяти и контролировать запуск новых. такого точно нету! в любом процесса функции не пропатчены.

    вторая маленькая софтинка, ссылка на нее в первом посту, работает походу 1 в 1. кстати она оказалось не под ехекриптором.
    но вроде поснимал я с нее все это хозяйство.
    общий смысл как понял сводиться к следующему:
    invoke VirtualAlloc,0,6000h,00003000h,40h; и сразу переносим туда ниже следующий код
    ;jmp куда выделили
    invoke UnmapViewOfFile,00400000h;- освобождаем модуль
    invoke VirtualFree,00400000 ,msize 00008000h
    invoke VirtualAlloc, 00400000,msize,00003000h,40h; - на тот же адресс
    ;грузит хедер ехешника
    ;грузит дата в ехешник
    ;создает таблицу импорта
    ; push 00410000
    ; jmp VirtualFree, на кусок где был временный код, т.е. после выхода оказываемся в 00410000

    вроде как эта идея не нова, но лично для меня в новинку, если кто знает, скажите мож где статейка про это есть.

    Aspire, а что такое "РКУ"????
     
  5. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    хы, попеарецо чтоле?
    http://www.wasm.ru/article.php?article=memfile
     
  6. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Rootkit Unhooker. Последняя паблик-версия здесь. Тебе стоит посмотреть перехват соответсвующих функций в SSDT.
    Скорее всего через Device\PhysicalMemory, хотя можно и по-другому, через ZwSystemDebugControl. Так или иначе, при особом желании, все это можно спалить любой проактивкой.
     
  7. umka60

    umka60 New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    7
    ок, почитаю.
    про метод с Device\PhysicalMemory в принципе я знаю но там чето судя подиазсму им и не пахнет.
    а метод который я вытащил из дизасма и привел в преидущем посте работает. ReadProcessMemory возвращает НОЛЬ. ласт еррор - ERROR_PARTIAL_COPY (0000012B)
    а WriteProcessMemory тоже ноль с ласт еррором - ERROR_INVALID_ADDRESS (000001E7)
    Причем адресс выделяемой памяти на место удаленного модуля должно быть меньше хотя бы на одну страницу. видимо используется какая-то ошибка в ядре ОС. Не бось гденибудь атрибуты недоудаляются, и в итоге возвращает ошибку при попытке обратиться к ней. такими вещами как например АртМани, содержимое памяти прочесть можно, но насколько помню там уже через драйвер чтение идет.

    только вот интересная еще вещь. процесс этот не виден в том же олидебугере, в PETools тоже не виден. в ProcessExplorere все видно. Однако интересный момент опять - эта софтина еще ныкать процесс умеет из третьего кольца....