Avanguard: The Win32 Anti-Intrusion Library

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

Метки:
  1. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    она так аль иначе решена в виртах == берём кему/вбокс/.. и модифицируем их сорцы под нужды.
    и как ты пытался определить расхождение по таймингам?
     
  2. Indy_

    Indy_ Well-Known Member

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

    Замер времени(или числа инструкций за время) для двух разных блоков, один по идеи должен напрямую выполняться, второй модифицироваться вм. Должна быть значительная разница под вм, но её нет.
     
  3. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    ну если замерял чрез rdtsc == есть тупо хитроЖО.. схема == эмулят rdtsc и он выдаёт значение с минусом лага, отседа О-ЧУДО :)
     
  4. Indy_

    Indy_ Well-Known Member

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

    Время идёт одинаково на вм и хосте. Берём эталонный цикл, без обращений в память: inc r/add r/etc и крутим 0x80000000 итераций, замеряем разницу времени(через GetTickCount()): dT1. Затем второй цикл с тем же количеством итераций, вот dT2/dT1:

    Код (Text):
    1. VMWARE -- HOST
    2. Mread
    3. 0.14
    4. 0.14
    5.  
    6. rdtsc
    7. 3.75
    8. 3.67
    9.  
    10. mov DS,r
    11. 3
    12. 2.8
    13.  
    14. sgdt
    15. 1.5
    16. 1.5
    17.  
    18. pushf
    19. 3.5
    20. 3.5
    21.  
    22. lar
    23. 8.5
    24. 8.6
    25.  
    26. smsw
    27. 1.6
    28. 2
    29.  
    30. cpuid
    31. 44
    32. 28
    33.  
    34. iret
    35. 24
    36. 31
    37.  
    38. mfence
    39. 5.3
    40. 5.2
    - значительная разница для cupid и iret. Но iret выполняется по разному в зависимости от мода и окружения. А вот rdtsc одинаковое время выполняется.
     
    Последнее редактирование: 1 мар 2020
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    вот апЧомЪЪ и речь == тупо подтасовку делают :) обычно вирты/эмули палят чрез внешний таймер иль дельты меж счётчиками в параллельных потоках.
     
  6. Indy_

    Indy_ Well-Known Member

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

    Если изменить в настройках способ эмуляции на bin translation, то тайминг меняется rdtsc: 3.7 -> 134, cpuid: 44 -> 497.
     
  7. Indy_

    Indy_ Well-Known Member

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

    Переделал для инжекта в процесс, в принципе работает. Только нужно найти не резервную область, вместо фикс базы и как то восстановить ebp для возврата из нотифи. Как думаешь такое обходить, бэктрейсить стек ?
     

    Вложения:

    • L3.7z
      Размер файла:
      5,7 КБ
      Просмотров:
      377
  8. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Кроме стека у нас ничего нет. Проверки кодовых секций, проверки трейса на NtProtect/NtMap.
    Можно ремапить исполняемые модули, чтобы NtProtect на них не сработал - но встаёт проблема с выравниванием на 64 Кб.
    Можно что-нибудь придумать с WriteWatch - детектить факты записи в ридонли-память.
    В общем, лечение симптоматическое.
     
    Indy_ нравится это.
  9. Indy_

    Indy_ Well-Known Member

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

    > Можно ремапить исполняемые модули, чтобы NtProtect на них не сработал

    Этот метод первым я предложил, много лет назад.

    WW на сколько помню не работает при записи из иного процесса.

    > Можно ремапить исполняемые модули, чтобы NtProtect на них не сработал

    Изначально кодовые секции не менялись, последний пример использует предыдущую ROP и запись в секцию данных.

    > Кроме стека у нас ничего нет.

    Как всегда бороться с OP что с ветром, если стек сместился то можно любую последовательность выполнить, ну как в примерах выше.

    Просто в принципе невозможно такую защиту реализовать при прямом исполнении.
     
  10. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    351
    В чем идея метода палева?
     
  11. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
  12. Indy_

    Indy_ Well-Known Member

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

    Накопал вот этот док, пару лет назад было написано.
     

    Вложения:

    • Inje.pdf
      Размер файла:
      249,5 КБ
      Просмотров:
      407
    q2e74 нравится это.
  13. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    А что делать, если модуль собран без CFG? Анализировать в рантайме?
     
  14. Indy_

    Indy_ Well-Known Member

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

    Вечная проблема - отличие кода от данных. Это изначально кривость пе формата и архитектуры. Указатели можно найти в динамике, но для этого нужен bt. Собственно почему я этот док и нашёл :)
     
  15. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    1. Программа создает раздел памяти, копирует туда некий код (между метками Ient и Iend) и дублирует дескриптор этого раздела в адресное пространство другого процесса.
    2. Затем она находит в ntdll.dll функцию LdrRegisterDllNotification и сохраняет указатель на нее. Эта функция используется для отслеживания загрузки DLL в процессе.
    3. Далее программа формирует стек, в который помещает некоторые флаги, указатели на функции из ntdll.dll и собственные callback-функции.
    4. После этого вызывается функция LdrRegisterDllNotification, передавая в качестве параметров указатели на сформированный стек.
    5. Когда происходит загрузка DLL в процессе, вызывается callback-функция ExecuteHandler. Она выполняет вызов функций из ntdll для проверки загруженных DLL и в конце загружает библиотеку psapi.dll.

    пригодиться да ))