нужен совет по сканеру сигнатур античита

Тема в разделе "WASM.NT.KERNEL", создана пользователем _us0, 25 июн 2017.

  1. _us0

    _us0 New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2017
    Сообщения:
    1
    приветствую
    имеется античит работающий только в ring3. В данном античите есть функции для сканирования памяти. Я проицирую мою память в процесс через ring0 и закрываю ее через VAD (blackbone). Какое то время помогало, но теперь каким то образом этот античит умудряется получить доступ к ней и сканировать. Возможно кто подскажет какие еще варианты сканирования могут быть через которые они могут сканировать закрытый регион?
    Если кто подскажет буду очень благодарен.
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    _us0,

    А что значит регион закрытый" ?

    Он исключён из VAD, но страницы присутствуют в WS ?

    Тоесть регион скрыт от дампа(NtQueryVi) ?

    Какой смысл при скане памяти перечислять регионы через сервис ядра, учитывая что он может фильтроваться - никакого, ко всем областям памяти должна быть прямая выборка данных. Ставим ловушку и в цикле обращаемся ко всем регионам ап. Учитывая технологии типо анклавов, запрос в ядро на дамп памяти смысла не имеет для реализации защиты.
     
    _us0 нравится это.
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    > Возможно кто подскажет какие еще варианты сканирования могут быть через которые они могут сканировать закрытый регион?

    Имеется монитор рабочего набора. Сбрасываем его и накапливаем лог, это даст все адреса по которым выполняется выборка - которые читаются и исполняются. Семплы есть в статье по анклавам.
     
    _us0 нравится это.
  4. ivanpos2010

    ivanpos2010 New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2017
    Сообщения:
    7
    Код (Text):
    1. NTSTATUS BBUnlinkVAD( IN PEPROCESS pProcess, IN ULONG_PTR address )
    2. {
    3.     NTSTATUS status = STATUS_SUCCESS;
    4.     PMMVAD_SHORT pVadShort = NULL;
    5.  
    6.     status = BBFindVAD( pProcess, address, &pVadShort );
    7.     if (!NT_SUCCESS( status ))
    8.         return status;
    9.  
    10.     // Erase image name
    11.     if (pVadShort->u.VadFlags.VadType == VadImageMap)
    12.     {
    13.         PMMVAD pVadLong = (PMMVAD)pVadShort;
    14.         if (pVadLong->Subsection && pVadLong->Subsection->ControlArea && pVadLong->Subsection->ControlArea->FilePointer.Object)
    15.         {
    16.             PFILE_OBJECT pFile = (PFILE_OBJECT)(pVadLong->Subsection->ControlArea->FilePointer.Value & ~0xF);
    17.             pFile->FileName.Buffer[0] = L'\0';
    18.             pFile->FileName.Length = 0;
    19.         }
    20.         else
    21.             return STATUS_INVALID_ADDRESS;
    22.     }
    23.     // Make NO_ACCESS
    24.     else if (pVadShort->u.VadFlags.VadType == VadDevicePhysicalMemory)
    25.     {
    26.         pVadShort->u.VadFlags.Protection = MM_ZERO_ACCESS;
    27.     }
    28.     // Invalid VAD type
    29.     else
    30.         status = STATUS_INVALID_PARAMETER;
    31.  
    32.     return status;
    33. }
    Наверное он это имел в виду.
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ivanpos2010,

    В первом посте ссылка на сурки есть. Только не ясно зачем эти извраты нужны.
     
    _us0 нравится это.
  6. ivanpos2010

    ivanpos2010 New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2017
    Сообщения:
    7
    Мне тоже интересна эта тема но меня больше интересует как можно изолировать регион памяти от R/W в User-Mode.
     
  7. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    684
    Если бы я делал античит запидорасил бы все в ядро, и обошел бы уак в зависимости от задачи, а в ядре уже пляши как хочешь ну и может патч гуард обойти пришлось бы
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ivanpos2010,

    Это можно сделать, софтверный анклав. Для этого нужно раскодировать эффективный адрес каждой инструкции из их потока, для этого код должен быть исполнен под визором. При таком исполнении кодовый регион уже не исполняем, при раскодировке адреса получаются modr/m компоненты. Далее выборка данных перенаправляется на анклав через изменение адресной компоненты, полученной раскодировкой modr/m. Тогда регион физически не существует - на каждой итерации адресуемый блок памяти может быть расшифрован, при этом без прямой выборки данных вне визора его прочитать невозможно, так же это нельзя сделать из более привилегированных режимов. Тоесть нельзя просканить память удалённо.

    Вот тут пример есть https://wasm.in/threads/skrytie-modulja.31872/
     
    Последнее редактирование: 27 июн 2017
  9. ivanpos2010

    ivanpos2010 New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2017
    Сообщения:
    7
    посмотрела предоставленную вами информацию такой метод мне не подходит .. мне больше интересно какими структурами можно манипулировать через ядро чтобы запретить доступ R/W (Windows x64)
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ivanpos2010,

    Не подходит из за сложности - иначе всё бессмысленно, сейчас такой уровень техник.
    Иначе создать анклав никак нельзя.
     
  11. ivanpos2010

    ivanpos2010 New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2017
    Сообщения:
    7
    я правильно понимаю тут будет ограничение по процессору
     
  12. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ivanpos2010,

    Будет зависимость от архитектуры, так как нужно раскодировать поток инструкций, а их кодировка(набор) у каждой архитектуры разный. Так же будет зависимость от ос, системная обработка необходимая для работы визора различается на разных ос. Падения профайла же фактически нет(разы) при грамотной реализации. Но при этом есть обратная совметимость, это можно запустить на младших версиях CPU/системы и не нужно встраиваться в ядро.
    Аппаратного аналога нет, более того принципиально любая защита перестаёт иметь смысл на одинаковом с ней уровне привилегий.
     
  13. ivanpos2010

    ivanpos2010 New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2017
    Сообщения:
    7
    скажем вы понимающий человек во сколько обойдется такой проект Windows 7-10 x64 на заказ
     
  14. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ivanpos2010,

    Во первых с нуля это не нужно реализовать, есть и паблик визоры(pin etc). Во вторых я к комерсу никакого отношения не имею, так что без понятия что по чём :no2:
     
  15. ivanpos2010

    ivanpos2010 New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2017
    Сообщения:
    7
    На мой взгляд это уже перебор для моих целей писать такое не стоит оно того
     
  16. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ivanpos2010,

    Тогда только виртуальные машины. Но опять же в них данные раскрыты, защищается только код.
    Если вы строите какую то защиту, то классические методы не годятся, она сразу будет вскрыта.
     
  17. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
  18. ivanpos2010

    ivanpos2010 New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2017
    Сообщения:
    7