1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Avanguard: The Win32 Anti-Intrusion Library

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

Метки:
  1. galenkane

    galenkane Member

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

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    284
    Адрес:
    Россия, Нижний Новгород
    Да, это тестовое приложение, там крутится while (true), чтобы не закрылась консолька: https://github.com/HoShiMin/Avanguard/blob/master/AvnSample/AvnSample.cpp#L432

    Заменить на while (GetMessage(...)) и грузить не будет.
     
    Последнее редактирование: 30 май 2019
  3. Indy_

    Indy_ Забанен

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

    Запускается, но через раз самопроизвольно падает(Eip = 0xCCCCCCCC).

    Если восстановить кодовую секцию и инжектиться, то так же падает. Детектит выделенную область, соотвественно нужно выделять память локально в процессе, что бы область добавилась в списки. Получается очень просто, формируем ROP цепочку через GET/SET-context:

    Код (Text):
    1.  -> ZwAllocateVirtualMemory():
    2.     @memcpy()
    3.     NtCurrentProcess
    4.     @Dst
    5.     0
    6.     @S
    7.     MEM_COMMIT
    8.     PAGE_EXECUTE_READWRITE
    9. -> memcpy():
    10.     @ZwYieldExecution
    11. Dst:    0
    12.     @Src
    13. N:    X
    14. S:    X
    15. Src:
    16.     [Code]
    17.     [TaskState]
    Тоесть сохраняем в стеке контекст, формируем параметры и передаём управление на ZwAlloc. Она выделит память и передаст управление на memcpy, Она скопирует со стека в выделенный буфер код и перейдёт на ZwYield(ret), от туда в буфер. Там откатывается стек и контекст:

    Код (Text):
    1.     add esp,[esp][4]
    2.     add esp,12
    3.    
    4.     Payload()
    5.    
    6.     popad
    7.     iretd
    Оттуда я для примера выводил дебагпринтом TID. Такой инжект работает :preved:
     
    q2e74 нравится это.
  4. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    284
    Адрес:
    Россия, Нижний Новгород
    Неудивительно. Что выделяет сам процесс, автоматом считается доверенным.
     
  5. Indy_

    Indy_ Забанен

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

    Тогда получается от инжекта в потоки не защищается.
     
  6. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    284
    Адрес:
    Россия, Нижний Новгород
    А что будет, если поставить проверку стактрейса в фильтре ZwAlloc? Возможно, после манипуляций со стеком там будет что-то, компрометирующее твой обход.
    --- Сообщение объединено, 31 май 2019 ---
    Хотя да, раз ты сохраняешь контекст в стек, при попытке снять трейс получим мусор и обход спалится. Но это просадит профайл на JIT'е, нежелательно.
     
  7. Indy_

    Indy_ Забанен

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

    Это получается защита от OP-инжектов, в простейших случаях проверяют что вызов через call, так например EMET делал. Но это сомнительные способы, цепочку можно любую собрать.
    --- Сообщение объединено, 1 июн 2019 ---
    > Хотя да, раз ты сохраняешь контекст в стек, при попытке снять трейс получим мусор и обход спалится.

    Какой именно мусор ?
    Это 8 регистров GRP с произвольным значение, произвольная часть стека содержит произвольные данные.

    Стектрейс на 86 через стековые фреймы выполняется, ebp не изменна, а можно и фейковых фреймов наделать.

    У emet двух типов проверки есть - caller и simexecflow". В первом случае проверяется инструкция ниже адреса возврата на call, причём адрес ветви вычисляется, те call [r + n] -> hook: [r + n] = @hook. Если сформировать такой корректный вызов то детекта нет.
    Второго типа проверка это фактически эмуляция кода что бы получить следующий адрес возврата и выполнить проверку caller".
     
    q2e74 нравится это.
  8. Indy_

    Indy_ Забанен

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.518
    Какое такое письмо ?
    И причём тут гугл со своим мнением, его не спрашивали :popcorm1:
     
  9. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    284
    Адрес:
    Россия, Нижний Новгород
    Мне дропбокс несколько раз блочил аккаунт за выложенные в паблик дэльфовые эксешники даже без намёка на малварь, и потом ходи-доказывай, что не верблюд!