Бесследное чтение памяти программы

Тема в разделе "WASM.ZEN", создана пользователем LastNoob, 28 дек 2019.

  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Да просто грузятся в UEFI и угоняют Hyper-V, а через него уже перехватывают сисколлы, подменяя LSTAR/CSTAR (ну или что им надо перехватить).
    Вот самый известный пример: Voyager
    Раньше в читах писали свои гипервизоры (например, на основе hvpp или Hyper-Platform), но античиты очень быстро их научились детектить, а обходы этих детектов оказались очень сложны.
    На Hyper-V античиты ругаться не могут, поскольку он может быть включен легально, поэтому очень быстро кастомные гипервизоры вымерли и все переключились на угон Hyper-V.

    А работает всё это так: ты останавливаешь выполнение на всех процессорных ядрах, каждое ядро переводишь под виртуализацию и продолжаешь с того места, на каком они остановились, уже в виртуальном режиме.
    Гипервизор даёт возможность задавать события, на которых процессор перестаёт делать то, что он делал, и передаёт управление заданному обработчику.
    Тот определяет, по какой причине он вызван, как-либо меняет состояние гостя (например, память или регистры), и отдаёт управление гостю обратно.
    События, на которые процессор будет передавать выполнение гипервизору, довольно разнообразны: в основном, это системные инструкции, доступ к MSR-регистрам и портам, прерывания. Но одно из главных - доступ к памяти.
    В гипервизоре ты настраиваешь ещё одну таблицу трансляций по аналогии с цепочкой PML4E -> PDPE -> PDE -> PTE, только используется она не для трансляции виртуальных адресов в физические, а для трансляции гостевых физических адресов в хостовые физические.
    Получается примерно так:
    GuestVirtual -> GuestPML4E -> GuestPDPE -> GuestPDE -> GuestPTE -> GuestPhysical -> [Тут мы переключаемся в гипервизор] -> VmmPML4E -> VmmPDPE -> VmmPDE -> VmmPTE -> HostPhysical.

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

    Или подмена CSTAR/LSTAR - гипервизор ловит обращение к ним на чтение и отдаёт валидное содержимое, когда на самом деле там кастомный обработчик сисколлов.

    Вот примерно так.
     
    Последнее редактирование: 9 ноя 2023
    mantissa нравится это.
  2. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    301
    Вот несколько способов улучшить скрытие виртуализации и перехвата системных вызовов через угон Hyper-V:
    - Использовать технологии вроде VT-x для Maskable Hardware Interrupts. Это позволяет гипервизору перехватывать некоторые аппаратные прерывания невидимо для гостевой ОС.
    - Использовать Extended Page Tables (EPT) для изоляции памяти гипервизора от гостевой ОС. Это затрудняет обнаружение гипервизора через сканирование памяти.
    - Использовать технологии вроде VT-d для изоляции доступа к периферии, чтобы гостевая ОС не могла напрямую обращаться к устройствам.
    - Использовать нестандартные места для размещения кода гипервизора, например в неиспользуемых областях памяти или за пределами физической памяти в MMIO регионах.
    - Шифровать и компрессировать код и данные гипервизора, чтобы затруднить его обнаружение.
    - Использовать полиморфный код, чтобы гипервизор выглядел по-разному при каждом запуске.
    - Минимизировать взаимодействия гипервизора с гостевой ОС и перехватывать только необходимый минимум событий.
    - Использовать руткит-техники в сочетании с гипервизором для более глубокого скрытия.


    Нейросеть выдала такую шляпу, насколько верно?
     
  3. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    156
    круто, спасибо. для меня это оверхед будет жесткий, в игре юзер мод ач, на тестовый режим не обращает внимание. теперь думаю, какой вариант использовать: нужно рисовать оверлей (хукать в ядре какую-то функцию отрисовки можно?) или отдельной юзермод приблудой управлять ботом, в таком случае надо как-то связь между драйвером и юзермод приложением настроить, может ли юзермод ач пронюхать такое?
     
  4. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Ну это слишком общие советы.
    Например, EPT - это и есть тот второй уровень трансляций.
    VT-d нам не нужен, т.к. мы не виртуализуем железо.
    Держать программу в MMIO - это уже нейронку понесло)
    Шифрование, сжатие, полиморфный код - никак не помогут обойти детекты. А производительность просадят очень сильно (и в самом гипервизоре мы сильно ограничены, т.к. в обработчике у нас выключены прерывания - неудобно расшифровывать самого себя, когда мы даже не можем выделить память).


    Здесь уже зависит от того, как античит детектит оверлеи. Если периодически скринит весь экран, то может найти и твоё рисование из ядра. Условно он сделает скриншот, вызовется функция рисования, а на пути в ядро твой хук рисует оверлей на скриншоте - вот и спалились.
    А связь между драйвером и юзермодом - смотря что и как часто надо передавать. Если античит юзермодный, то наверно можно не особо заморачиваться и общаться через обычный именованный девайс. Если надо читать память процесса - можешь отмапить эту память в свой процесс через MDL - античит об этом не узнает, и будешь работать с этой памятью как со своей. Если хочется общаться именно с драйвером и без девайса, то можно общаться через сторонний девайс: например, патчишь у одного из валидных драйверов таблицу обработчиков IRP (например, у Beep.sys), посылаешь ему запрос, а он прыгает на твой обработчик.
    Или что-то можно сделать на разделяемой памяти, на файлах, реестре, на минифильтрах, в качестве интерфейса используя файловые функции, можно подписаться на bound exception и ловить его в ядре... В общем, there are ways)
     
    Marylin и mantissa нравится это.
  5. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    156
    looks like то что надо, спасибо.
     
  6. Andrey333

    Andrey333 Member

    Публикаций:
    0
    Регистрация:
    30 янв 2020
    Сообщения:
    35
    HoShiMin. А атаку на сам античит сейчас применяют? К примеру перехватывая ioctl-запросы между юзермодной и ядерной частью чита. Просто не всегда вижу, в требованиях у читиров, GPT disk + Windows Pro (внедрение в Hyper-V). Из этого делаю вывод, что применяют.
    --- Сообщение объединено, 9 ноя 2023 ---
    А как они грузятся? Через уязвимость или отключают Secure boot?
     
  7. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Да, например есть проекты по эмуляции античита. Насколько сейчас это актуально - хз, но года 4 назад вполне работал эмулятор BattleEye.
    Между юзермодной часть и ядерной частью античита? Вряд ли применяют, это же очень сильно палится, если ты подменишь обработчик.
    Так встроиться можно и без GPT, и на любой винде, хоть на XP.
    Отключают SecureBoot, с ним ты свой модуль не запустишь
     
    Andrey333 нравится это.
  8. Andrey333

    Andrey333 Member

    Публикаций:
    0
    Регистрация:
    30 янв 2020
    Сообщения:
    35
    Не, не подменять обработчик. Похучить, посредством гипервизора, NtDeviceIoControlFile. Для Intel стандартный сплайсинг скрытый через EPT, а для AMD подмена LSTAR/CSTAR. Т.о. ядерную часть античита мы ослепим, а юзермодная не так страшна. Ведь скрыть гипервизор от юзермода не так сложно. Верно?
    А на факт отключенного SecureBoot античит не отреагирует. Конечно не забанит, но выставит какой-нибудь флаг "подозрительности". Или это ни на что не повлияет? А может можно эмитировать, после того как мы получили управление, что SecureBoot включен?
     
  9. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Отключение SecureBoot’а никак не скажется на подозрительности - многие даже не знают, что это такое и как его включать, поэтому никаких проблем.

    Как ни странно, но нет. Гипервизор очень сильно палится по сильно возросшему времени выполнения некоторых инструкций (самое простое - cpuid). Казалось бы, возьми да подделай rdtsc, но есть ещё системное время, мультимедийные таймеры, GetTickCount, которые работают не через rdtsc, и чтобы корректно подделать их все и не свалить винду из-за проблем со временем - мы внезапно из проблемки на пять минут скакнули в какую-то неведомую хтонь с APIC и MPERF/APERF.

    А насчёт перехвата DeviceIoControl: слишком сложный путь.
    Надо разобрать протокол, вклиниться, а потом окажется, что античиту не нужна связь с драйвером, чтобы драйвер и юзермодный античит могли искать читы независимо, а драйвер продолжал бы защищать игру.
    Например, драйверу не нужны DeviceIoControl’ы, чтобы ломать адресное пространство игры для желающих его почитать.
    А в игре продолжает жить и юзермодная часть, накрытая вмп, и что она делает - неизвестно.
     
    Andrey333 нравится это.
  10. Andrey333

    Andrey333 Member

    Публикаций:
    0
    Регистрация:
    30 янв 2020
    Сообщения:
    35
    HoShiMin, но если мы отключаем SecureBoot, то про совместимость с Windows 11 придется забыть? Она вроде как без SecureBoot теперь не грузится Fix the ‘This PC can’t run Windows 11’ Error: How to enable TPM and Secure Boot. Хотя у меня на VMWare на 22H2 и
    инсайдерской 23H2 без SecureBoot-a все работает. В скором времени попробую поставить не инсайдерскую 23H2 и там проверю. Или нужно на реальном железе пробовать?
     
  11. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Не, всё нормально работает без него. Устанавливаться она не захочет (хотя это можно пропатчить), но после установки можно смело отключать, всё будет работать.
     
    Andrey333 нравится это.
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    что значит НИЧЕГО??? жестянка, к примеру, косит под хард - значит должна пройти все тесты харда (размер, тип записи, скорость и тип подключения к компу). едем дальше - содержимое харда должно быть понятным для чекера, то бишь хард нельзя шифровать. если жестянка не прошла тесты - юзверу выпадает сообщение, молДе надобно отключить мутную керь от компа, а иначе игруХА не запустится. короче, чит должен полностью подтверждать параметры, под кои он косит. как обойти такую защиту??? практически нужно сломать протокол передачи данных игруХИ, но зачем тогда мутить дма??? :)
    --- Сообщение объединено, 10 ноя 2023 ---
    как-то публика забывает, о сервачной части античита :) все дампы и скриншоты идут - то тудЫыыы.. к примеру, можно полноценно провести оценку производительности компа и адекватность работы клиентской части игруХИ - чита станет слишком много в плане кол-ва перехватов и вирта будет съезжать в режим эмуля, что дико тормознуто. :)
     
  13. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Ну как ты напишешь такой чекер? Вот поймаешь ты подключение, девайс скажет, мол, мои VID/PID = 0x1F/0xC3. И что тебе делать с этой информацией?
    Эта фигня может быть чем угодно: флешкой, токеном, МФУ без драйверов. Что ты скажешь пользователю? «Отключите неведомую фигню с таким-то номером»? Так юзер сам не знает, что это такое. Такой античит защитит только от одного - от игроков)

    Так наоборот, конечная цель - заставить сервер думать, что всё норм.
    Он запрашивает содержимое памяти - мы скрываем либу чита и патчи.
    Он делает скриншоты - на момент скрина мы отключаем ESP.
    Они пытаются записать демку - учишься рисовать так, чтобы ты видел, а на демке оверлея не было.
    И так аккуратно обманываешь все их детекты.

    Конечно, они анализируют статистику боёв, сколько раз убил, сколько раз убили тебя, с какой точностью ты стрелял, сколько жалоб было, и никак ты это не обойдёшь, если намеренно не ослабишь свой чит (а тогда какой смысл). Но за предположения банить они не любят: а вдруг ты киберкотлета из нави - столько вони потом будет.
    Поэтому в современных играх даже с мощными античитами так много читеров - все знают, что у тебя читы, но пока ты открыто не спалился и не жестишь, на тебя условно закроют глаза.
     
  14. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    у любого мало-мальски офиц. девайса есть более вразумительные надписи, тч такую мутную керь явно нужно отключать даже без разбирательств. второй момент, что именно тебе мешает определить номер и тип порта, к коему подключен неведомый девайс??? и третий момент, в ряде случаев порт можно отключить программно, а если не получается - обращаемся к юзверу с указанием откуда надо вытащить приблуду. если юзверь сам разобраться не может - служба поддержки ему/ей в помощь. ну, и в конце-концов едва ли у обычного юзверя может оказаться керь, коя не пройдёт тесты. :grin:
    ну, к примеру, Hyper-V не сделана для того, чтоб скрывать своё присутствие и попытка навесить на неё хуки прекрасно светится в телеметрии мокрых, тч разрабы игрух легко могут подписать договор с мокрыми, чтобы их античит мог ловить наличие таких хуков без лишних костылей. что же касается читов в общем и целом - есть официальные вебшопы/биржи читов от самих же владельцев игрух. самое смешное, что вся ся фиХЪня по стоимости в разы (порой даже в 10ки раз) обгоняет цену жестянок юзверя :)
     
  15. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    А вот сам объективно оцени, насколько эта идея жизнеспособна)
    Неа, телеметрия про хуки не знает.
    Это очень большая редкость, но бывает и такое. Функционал там околонулевой - как альтернатива донату. Это так не работает, на двух стульях не усидишь: или будешь бороться с читерами, или сервера сначала превратятся в hvh, а затем игра умрёт.
     
  16. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    https://us.shop.battle.net/en-us/product/world-of-warcraft-service-character-boost
    банальный функционал аверки требует отлова хуков. :grin:
    опять же повторяюсь траты на игрухи сильно превышают стоимость железок, куча публики даже натурой платят, чтоб прокачать свою учётку. тч извернуться на установку чистого компа под игруху они уж акь-нибудь смогут - это акь ни крути из разряда наркозависимости.
     
  17. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Так это обычный донат
    А в чём антивирус будет их искать? Для него компонентов «снаружи» гипервизора не существует - в этом и смысл виртуализации. Про нас не знает ни PatchGuard, никто.
    Более того, что должен делать антивирус, найдя такой хук? С чем он будет бороться? В карантин отправлять некого.
    О, мы уже скакнули от «вытащите флешку» до «купите новый комп». Неплохо)
     
  18. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    обзови это акь хочешь, но такой керью можно отлично прокачивать учётку :)
    как можно всю вынь запихнуть под вирту, если используешь её собственную вирту??? иль хочешь запускать две оси - хост и гость? :)
    кхм :) 60 баков за один буст до 70го левела - вполне могут и комп купить :)
     
  19. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Ага, но деньги-то получает разработчик. И посмотри на отношение игроков к донатным гриндилкам: никто их не любит. Но это социальный контракт: разработчик открыто заявляет: «У нас выигрывают те, кто платит». Соответственно, играют те, кто согласен с этими условиями.
    Обратная сторона с читами: игроки не соглашаются с таким контрактом (если это не hvh-сервер, который намеренно заточен под читы против читов), и потому не захотят играть вообще, если разработчик ничего с этим не делает. Поэтому варианта два: или улучшаем античиты, или игра умирает.

    А Hyper-V вполне самодостаточный. Когда ты его включаешь, твой «хост» на самом деле уже запускается под виртуализацией.
    На глаз никаких отличий нет, но ты уже внутри виртуалки, и VMM изолирует себя от основной части системы.

    Так ты мысли масштабнее: в компах из магазина могут быть уже неизвестные античиту компоненты. Пусть производитель будет продавать сразу доверенный неразборный комп с предустановленной игрой. Под каждую игру новый системник.
    Погодите… мы же изобрели… тетрис!

    upload_2023-11-11_2-31-23.jpeg
     
  20. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    ага, варкрафт прям умирает и умереть не может.. владельцы игрух борятся с ЛЕВЫМИ читами и все реально прокаченные учётки использовали читы донаты :)
    Ты как-то более оптимистичен, чем сами мокрые :)
    итак, возвращаемся к исходной ситуации - у игрока не хватает знаний/умений настроить комп под игруХУ, но есть баблишко (кое он резво тратит на читы донаты). он что.. не может позвонить технарю, кой ему всё воткнёт и выткнет по мере надобности, а ??? :)