HookLib

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

  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    При всём разнообразии библиотек для перехвата функций, не видел ни одной, использующей лишь NativeAPI. Решил написать свою.

    Итак, либа:
    • Написана на чистом си
    • Основана на самом быстром и легковесном дизассемблере Zydis
    • Использует только NativeAPI
    • Патчит дисплейсменты в инструкциях и контексты потоков
    • Поддерживает и юзермод, и ядро

    Ссылочка на гитхаб:
    https://github.com/HoShiMin/HookLib
     
    M0rg0t, Ronin_, __sheva740 и ещё 1-му нравится это.
  2. sty

    sty Member

    Публикаций:
    0
    Регистрация:
    2 фев 2019
    Сообщения:
    102
    Очень интересно. Особенно, если учесть возраст ТС. В том смысле, что какой сложности будут его проекты, когда пройдет лет 10-15? И самое главное(для меня имеется в виду) у человека есть своя разработка визора, которая, судя по отзывам, - достаточно неплохая. Вот жалко я чуть раньше не знал об этом. Я бы тогда тут с одним крутым специалистом - здороваться даже не стал, а не только просить его о чем-либо или задавать ему вопросы :).

    HoShiMin, удачи вам во всех ваших проектах.
     
  3. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    К сожалению, не моя: концепцию и общую архитектуру позаимствовал у китайского ресёрч-инженера Satoshi Tanda, а сам лишь немножко причесал код, немножко дополнил. Посмотри его визор SimpleSvm - очень хороший образец хорошего кода и продуманной архитектуры!
    Спасибо ^_^
     
  4. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Ни разу не видел) Все юзают MinHook, новый модный PolyHook, а чтобы чисто на NativeAPI - не встречался
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    в чем плюсы конкретно этого дизассемблера?
     
  6. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Наиболее полный, разрабатывается при поддержке интелa, быстрее капстона и интеловского XED'a, не тащит никаких зависимостей (даже от LibC), легковеснее остальных.
    А ещё в пользу Zydis'a говорит признание со стороны, например, x64dbg, который перешёл с капстона на него
     
    Последнее редактирование: 12 фев 2019
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    не, я о том, что в принципе дизассемблер для хуков не нужен, нужен только дизассемблер длин... есть же всякие LDE: https://github.com/BeaEngine/lde64
     
  8. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    А Zydis тем и хорош, что его можно собрать как отдельный дизасм длин, без декодинга мнемоник, без поддержки ненужных расширений, типа AVX, безо всего лишнего.
    Кроме того, он обновляется чуть ли не раз в неделю, а у LDE смотрим - последний раз обновлялся 4 года назад.
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    понял, остыл)
     
  10. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Смотря в каком проде) Вообще, думаю, абсолютно все паблик-хуклибы уже в блэклистах, но я не для VX-целей писал (скорее, даже, наоборот - для антиинжектов) - мне нужен был именно минимум абстракций, поэтому и NativeAPI (даже задумывался о прямых вызовах сисколлов). А в паблике действительно ни одной хуклибы без зависимости от k32 не видел. Хотя, возможно, просто плохо искал. Скажем, это был такой челлендж!
     
  11. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    503
    HoShiMin, спасибо за либу, будем посмотреть:)

    Выложите? А у вас обфускатора API нигде не завалялось? Любого двигателя, по любой технике обфускации?
     
  12. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    503
    sty, наоборот стараюсь на "вы". Мож где то забылся - сорри. Ну ибо так считаю правильным, никого не склоняю к подобному поведению, лишь сам придерживаюсь:)
     
  13. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Выдалась минутка и переписал хуклибу с нуля.
    Из новшеств:
    1. Оптимизация по памяти: оригинальные начала функций хранятся в страницах, разбитых на чанки: в одну страницу укладывается 39 хуков вместо широко использующейся схемы "1 хук - 1 страница".
    2. Возможность установки множества перехватов за одну сессию: не будет лишних накладных расходов на заморозку процесса, перечисление потоков и правку контекстов для каждого отдельного хука.
    3. Радикально уменьшено количество аллокаций и повторяющихся действий при установке хуков.
    4. Поддержка перехватов юзермодных функций из ядра (с остановкой процессов и правкой контекстов, в том числе в Wow64) - Win7..Win11.

    Ссылка на гитхаб в шапке.
     
    Artem_N, GRAFik, MaKaKa и 3 другим нравится это.
  14. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    Просто вкину, можно патчить не джампом, а каким-нить mov eax, <id_хука> + jmp <один_универсальный_обработчик>, где универсальный обработчик просто выбирает адрес хука по id из джамп тейбла и прыгает по нему. Так тебе не придется выделять страницу для хуков в принципе, универсальный обработчик - часть твоей библиотеки, джамп тейбл можно на куче выделить, или в секции неконстантных данных. Плюс это отвадит некоторые особо тупые детекторы хуков (которые просто проверяют первый байт на джамп).
     
    Artem_N нравится это.
  15. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Да, тоже хороший вариант
     
  16. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Да, вот так вот живешь себе спокойненько и думаешь, что C++ - ты(в смысле я) на каком-то среднем уровне знаешь. Но стоит только появится HoShiMin'овскму посту, особенно с отсылкой на его страничку Гитхаба, то сразу понимаешь истинную цену своим познаниям в C++. Да Рел еще "масла в огонь" добавляет. :)

    Кстати, любопытно: вроде, самый молодой форумчанин у нас Хошимин, а Инди на старом кл частенько называл f13nd'а - студентом с ВАСМа. Нужно будет с этим, на досуге, разобраться - с точки зрения логики. И какое отношение ко всему этому имеет ник Aiks? :) Ну а что, зря что ли f13nd называл меня на старом кл - "горе-Шерлок Холмс". :)

    Ну, а если чуть посерьезней, то хорошо, что на ВАСМе есть такие люди, у которых знаний чуть ли не на порядок больше чем у меня. В противном случае, я бы уже давным давно забыл бы про ВАСМ, вместе со всеми его никами.
     
  17. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    GRAFik, даже не знаю, что и ответить... О_о
     
  18. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    Лучше ничего и не отвечать.
     
    M0rg0t нравится это.
  19. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Это Рел имеет в виду, что раз нет вопроса, то и отвечать не на что. :)

    А что касается C++, то у меня там конкретные "провалы" в макросах и шаблонах. В шаблонах еще могу разобраться примерно в 50% случаев, а с макросами и того меньше. Как только нахожу их в чужих исходниках - начинаю злиться на самого себя, что не могу выкроить время, чтобы "добить эти пробелы".
     
  20. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Так ты спрашивай, если что непонятно - форум ведь для того и нужен