Avanguard: The Win32 Anti-Intrusion Library

Тема в разделе "CHEATS", создана пользователем HoShiMin, 17 мар 2019.

Метки:
  1. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    avanguard
     
  2. Indy_

    Indy_ Well-Known Member

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

    А что даст виртуализация бинаря ?

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

    Если же полностью виртуализировать апп в динамике, то это была бы сильная защита. Например можно было бы обнаружить смену контекста по предсказанию следующей инструкции транслятором. Или например передачу управления на не безопасный код. Впрочем как и отследить изменения памяти.. Только как такое реализовать, кроме локальной бинарной трансляции, изменить значе ?

    HoShiMin,

    Я покопался по нэйтиву 10-ки, получается следующее.

    Код (Text):
    1.     push Args
    2.     call  ds:___guard_check_icall_fptr
    Если даже загрузить на стек произвольный указатель, то передав управление на произвольную апи это приведёт к такой же проверке аргумента. Но вот что странно, найден один интересный вызов:

    Код (Text):
    1.     mov eax,ds:_RtlpInterceptorRoutines[eax*4]
    2.     push edx
    3.     call eax
    - отсутствует cfg проверка. При этом в данных:

    Код (Text):
    1. .text:6A211988 _RtlDecompressFragmentProcs dd 0
    2. .text:6A21198C                 align 10h
    3. .text:6A211990                 dd offset _RtlDecompressFragmentLZNT1@32
    4. .text:6A211994                 dd offset _RtlDecompressFragmentNS@32
    5. .text:6A211998                 dd offset _RtlDecompressFragmentNS@32
    6. .text:6A21199C _RtlpInterceptorRoutines dd offset _RtlpStackTraceDatabaseLogPrefix@16
    7.  
    Рядом RtlDecompressFragmentProcs:

    Код (Text):
    1. .text:6A2D9EFE                 mov     esi, ds:_RtlDecompressFragmentProcs[eax*4]
    2. .text:6A2D9F05                 mov     ecx, esi
    3. .text:6A2D9F07                 push    [ebp+final_size]
    4. .text:6A2D9F0A                 push    0
    5. .text:6A2D9F0C                 push    [ebp+offset]
    6. .text:6A2D9F0F                 push    [ebp+compressed_size]
    7. .text:6A2D9F12                 push    [ebp+compressed]
    8. .text:6A2D9F15                 push    [ebp+uncompressed_size]
    9. .text:6A2D9F18                 push    [ebp+uncompressed]
    10. .text:6A2D9F1B                 call    ds:___guard_check_icall_fptr
    11. .text:6A2D9F21                 call    esi ; _RtlDecompressFragmentProcs
    - вызов как всегда с cfg.

    Как такое возможно, ведь модуль собрал один линкер ?
    Почему один вызов без проверки ?
     
  3. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.427
    Адрес:
    Россия, Нижний Новгород
    Хм, да, собрано одним линкером. Но собиралось в инсайдерской VS, что не исключает баги в кодогенерации.
    Хотя очень маловероятно, что это - баг.
    На платформах AMD хостовая PTE (NPT), в отличие от интеловской EPT, не позволяет отдельно фильтровать доступ на чтение и отдельно на исполнение.
    Это можно сэмулировать, но костылями, которые сильно просадят профайл - игра станет неиграбельной.
    И против виртуалок есть множество детектов. Пример: замеры времени выполнения инструкций, генерирующих #VMEXIT.
    Но таки да, обходы через гипервизоры сейчас мейнстрим.
     
  4. Indy_

    Indy_ Well-Known Member

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

    > Хотя очень маловероятно, что это - баг.

    Не похоже на баг, тоесть обычная конструкция простая. Походу лазейку оставили :scratch_one-s_head:
     
  5. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.427
    Адрес:
    Россия, Нижний Новгород
    Indy_, а скинь сэмпл, на котором у тебя виснет семёрка. Или ты его из гитхабовских сурсов собирал? Хочу сейчас посмотреть на виртуалке
     
  6. Indy_

    Indy_ Well-Known Member

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

    cf.png
    - два индексируемых массива рядом. Две аналогичные конструкции, на два массива нет ссылок для перезаписи. Это намеренно помеченный вызов для создания уязвимости.
    --- Сообщение объединено, 26 фев 2020 ---
    HoShiMin,

    Твой же семпл, я его переименовал в Tc.exe, в него все инжекты выше.

    > на котором у тебя виснет семёрка.

    7 у меня на варе, а 8 хостовая, висяк на двух. На XP не заведётся, так как нет там в экспорте RWL. Хотя я там по возможности всё отлаживаю 86.
     

    Вложения:

    • Tc.7z
      Размер файла:
      661 байт
      Просмотров:
      362
    Последнее редактирование: 26 фев 2020
  7. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    Indy_ что значит виртуализировать в динамике? как это отличается от обычной виртуализации?
     
  8. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.427
    Адрес:
    Россия, Нижний Новгород
    Неа, не мой - там твой payload спамит в консоль. Но не суть - не воспроизводится. Запускаю сразу под олькой (именно под олькой, не x64dbg) - никаких фризов, всё работает как обычно. Поставил лицензионную Win7 x64 Pro.
    ¯\_(ツ)_/¯
     
  9. Indy_

    Indy_ Well-Known Member

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

    Где что спамит ?
    Этот семпл ты мне дал где то в начале темы. И есчо к нему есть символы(pdb).
    Вывод в консоль при инжекте - я не выделял новую.

    > Поставил лицензионную Win7 x64 Pro.

    У меня 7-32. Но там и без того всё глючит, так как ось инфицирована(там отладка всякой малварки). Но вот текущая хостовая 8-64 чистая относительно и ядро вешает олли с твои семплом. Вероятно связано с worker factory, так как там активной нагрузки на ось больше нет.

    tc.png

    galenkane,

    > что значит виртуализировать в динамике? как это отличается от обычной виртуализации?

    В статике бинарь виртуализируется, к примеру VMP. В динамике виртуализируется процессор, это VMware например.
    --- Сообщение объединено, 26 фев 2020 ---
    А да, забыл либу, сорян.
     

    Вложения:

    • avn.7z
      Размер файла:
      1,1 МБ
      Просмотров:
      335
    galenkane нравится это.
  10. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    можно ли утверждать, что Themida лучше vmp? насколько помню там процессор вирт.машина
     
  11. Indy_

    Indy_ Well-Known Member

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

    Ну а какое отношение к этой теме имеет криптование бинарей ?
    Навесь три слоя крипта на сабж я всё равно лог визором по выборкам сниму, ничего не меняет.
     
    galenkane нравится это.
  12. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    на какой системе? xp?
     
  13. Indy_

    Indy_ Well-Known Member

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

    На любой, сабж не привязан к ос. Он на всей линейке работает и в compat. mode, за исключением xp. Прекрати писать чушь.
     
  14. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    если чё спросил про ваш визор
     
  15. Indy_

    Indy_ Well-Known Member

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

    Он может не работать только если будет зависим от апи в старших версиях. Но я это никогда не использую, даже те же RWL. Если бы ты внимательно посмотрел, то заметил бы что я использую свой сурец с rwl-блокировками. Он получен пересборкой нэйтива и добавлением сигнатур для загрузки туда синхро-апи. Именно для обратной совместимости. Получен аналогично https://wasm.in/threads/avl.31736/
    --- Сообщение объединено, 26 фев 2020 ---
    galenkane,

    > на какой системе? xp?

    Кстате на счёт XP. Там можно не думать про релокацию, таким образом забивать адреса хардкодом. Ты знаешь способ отключить это на 8-10 ?

    Ну и конечно если бы ты понимал что либо в реверсе, то знал что чем меньше компонент задействовано, тем проще. В нашем деле новый функционал не нужен, всё должно быть минимальным что бы исключить помехи.
     
  16. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    не отрицаю, что мало знаю по реверсу
     
  17. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.427
    Адрес:
    Россия, Нижний Новгород
    В идеале бы глянуть в WinDbg, чем же ядро занято в этот момент. Антиотладки там нет, тредпул не блокируется, да и с ходу я не вспомню даже целенаправленных способов подвесить ядро. Весьма и весьма интересно...
     
  18. Indy_

    Indy_ Well-Known Member

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

    Я не могу хостовую систему через вд отлаживать. Поставь 8-ку на варю и посмотри. А на счёт странностей - тут их непрерывный поток, так что нечему удивляться, интересно разобраться и при этом не заблудиться в столь обширной теме ;)
    --- Сообщение объединено, 27 фев 2020 ---
    Да и есчо есть один важный нюанс. Что 8-64 а олли 32. Но x64dbg-32 так же вешает. Странно как отладочный порт может вмешиваться на обработку звука(IRP..).
     
  19. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.427
    Адрес:
    Россия, Нижний Новгород
    Глянул про CFG и тут же наткнулся на интересную функцию: https://docs.microsoft.com/ru-ru/windows/win32/api/memoryapi/nf-memoryapi-setprocessvalidcalltargets
    Выкатили защиту и тут же дали способ её обойти
    --- Сообщение объединено, 27 фев 2020 ---
    В это больше верится, коль скоро отладка - глубинный ядерный механизм. Где-то что-то подвисло в ожидании на высоком IRQL - и минус звук
     
  20. Indy_

    Indy_ Well-Known Member

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

    > Выкатили защиту и тут же дали способ её обойти

    Это нужно что бы запускать интерпретаторы(.net). Но это не касается отсутствия проверки выше, на ту функцию множество ссылок, все из heap-rtl. Надо бы пореверсить это. Вызов в глубине нэйтива и наверно так просто вызвать не получиться, но если учитывать что это лазик, то должен быть простой путь для вызова.

    > отладка - глубинный ядерный механизм.

    Он не касается обработки драйверных обменов. Тут получается чем больше тестишь в не штатных ситуациях, тем больше всяких багов вылазит. Только вот все последние плавающие, та тема про wow-сегменты, анстаб с get-set-ctx etc. Проще конечно если сразу бсоднет, но вот такие они сейчас баги.