Добрый день форумчанам! Пишу фреймворк на C++ для свободной работы в Ring0 и исследования памяти ядра и процессов. Представляет собой готовый драйвер с заготовками для лёгкого добавления своих обработчиков и файловых фильтров; API, не привязанный к проекту, и который можно использовать в сторонних самописных драйверах, а также юзермодная библиотека с обёртками над всем функционалом. Из основных возможностей: Гипервизор (AMD-V/RVI) Работа с портами ввода-вывода, проброс в юзермод через IOPL Работа с памятью (физической и виртуальной, юзермодной и ядерной) - аллокации/чтение/запись/маппинг MSR Создание ядерных и юзермодных потоков Доставка APC из ядра Загрузка неподписанных драйверов (без поддержки SEH) Отправка ядерных каллбэков в юзермод (Ob*** и Ps***) Юзермодный файловый фильтр (Create/Read/Write/DeviceIoControl) Исполнение произвольного кода в Ring0 из юзермодной памяти, поддержка SMEP Парсер PE-файлов Парсер PDB Сканер сигнатур из ядра Работа с Mdl из юзермода Биндинг для питона В планах: GUI-платформа для рантайм-анализа памяти, дампов, модификации системных данных Скриптовый движок на питоне для прототипирования и выполнения произвольного кода в ядре Интеграция с AsmJIT Библиотека для инжектов и перехватов функций Простой гипервизор для обхода PatchGuard и фильтрации сисколлов Документация, до которой никак не дойдут руки Страничка для проекта либо на github.io, либо на отдельном хостинге Пройти HLK, если драйвер такого типа вообще может его пройти Примеры использования: Здесь: https://habr.com/post/429198/ И здесь: https://www.unknowncheats.me/forum/anti-cheat-bypass/295416-kernel-bridge-framework.html И, наконец, репозиторий, где можно скачать подписанные бинарники: https://github.com/HoShiMin/Kernel-Bridge К свободному участию в проекте приглашаются все желающие - фронт работ ещё большой, и будут полезны программисты всех специальностей - от системщиков до веб-дизайнеров. P.S.: Всего неделю назад узнал про аналогичный проект - Google Rekall. Что, однако, не отменяет моих планов! P.P.S.: Mikl___ , не серчай за даблпостинг, здесь ошибся с разделом, этот более подходящий (и более живой).
интересный проект. и на каких выньках пашет? в твоем желание сделать отдельный проект есть, конечно, серьёзный изъян == много прогеров скорей примкнут к хухлю, чем к тебе. у тебя должна быть особая фича в проекте.
Пашет на Win7..Win10. В планах есть поддержка ХР, но не в приоритете. А что до Rekall'a, он всё же отличается и от Blackbone (тоже "конкурент"), и от кб. В каждом есть свои фичи, которых нет у других. У меня, например, юзермодные фильтры и, видимо, самый обширный набор функций для работы с памятью. И банальная простота: скачал, подключил хедеры и юзай. Rekall же гвоздями приколочен к своему амплуа standalone-инструмента.
Нельзя Давно уже нет - все его способы инжекта давно палятся всеми античитами, как и сам он давно во всех чёрных списках. Сейчас читеры пишут свои драйвера "под ключ", загружая через win64ast (или через турлу), обходы через DMA. Кое-кто пишет свои гипервизоры. И всё в привате, ибо паблик = моментальный блэклист.
Отличный проект, пробуйте, и ссылку на гитхаб тоже прикрепите. Может кто помогать будет, ревью сделает.
ну, что (если сохранишь банальную простоту) это (пожалуй) может стать очень важным аргументом для разгона твоего проекта. главное, что код открытый, тч годное можно выдернуть на свои нужды. вот на сие точно забей поддержка андроида иль линя будут гораздо актуальней
Минута критики... 1) много опасного кода.. в стиле size_t sig_length = strlen(mask) 2) работа с PE Заявлена но она только UserMode судя по коду, возможно плохо смотрел . Вообще не хватает списка АПИ группированного по функционалу и по режиму работы, с нормальной навигацией, а не по гитхабу. 3) нет тестов на плохих данных. Например если вы заявляете о безопасном АПИ то имеет смысл добавить тесты, где идут вызовы Всех АПИ с разными некорректными параметрами. И это так, на вскидку. к слову сказать подобный проект уже лет 10 назад был на гитхабе, и уже тогда С++ использовался гораздо шире. Проект был очень сильный. https://github.com/icestudent/ontl У вас С++ в проекте сильно ограничен. Попробуйте улучшить этот момент тоже. Добавьте Auto в конце концов ) --- Сообщение объединено, Nov 19, 2018 --- Немного почистил во избежании срача
HoShiMin, > MmSecureVirtualMemory Вы должны знать что это кривая реализация. Она защищает лишь от удаления, но не от смены аттр. > Иногда возникает вопрос Верно всё, я просто завис на своих идеях. У меня свет клином сошёлся на протекторах и крипторах.
Да, есть такое. В основном, в работе с юзермодными буферами при передаче их по указателю. Где имело смысл, защитил память, поставил проверки, но кое-где - действительно - полагаюсь на то, что пользователь передал валидную память. Решил, что в таких случаях пока лучше положиться на try..except, а потом, при необходимости, в нужных местах добавлять проверки и валидацию. А с другой стороны, в конкретно этом примере с strlen - как мы можем быть уверены, что передали валидную строку? strlen_s не гарантирует, что не случится PageFault. Передавать длину извне? Тоже не можем полагаться на эти данные. И, честно говоря, я не вижу гарантированно надёжного способа работать с пользовательскими данными. Сделаю поддержку в км, когда напишу км-контейнеры, типа сетов, векторов и мап. Хочется перенести юзермодный модуль в ядро без изменений интерфейса. Сделаю вики-страничку на гитхабе, когда закончу питоновский биндинг В планах есть, но отложил на потом - слишком долго писать настолько всеобъемлющие тесты. Закончить бы основной функционал, там ещё делать и делать... Страшно представить, сколько времени он его писал... А как же AddSecureMemoryCacheCallback? Сам её не пробовал, но, судя по докам, каллбэк вызывается также при изменении атрибутов (и нет указания, что только при изменении в сторону уменьшения прав)
И ещё приходится держать баланс между надёжностью и скоростью разработки, иначе можно погрязнуть в простынях проверок) --- Сообщение объединено, Nov 19, 2018 --- Как увидел Rekall - тоже появилась шальная мысль написать аналог под линь, но в лине хотя бы нет проблем с драйверами, всегда можно накидать простенький драйвер в 20 строчек и заinsmod'ить. А в сторону андроида даже не смотрел, хотя идея интересная)
HoShiMin, кстати, самый сок, когда ковырялка пашет под виртой, а юм панелька управления на хосте. + дамп пишется на хост. Тогда можно рестартить вирту с бэкап дампом.
Хммм, допустим: на виртуалке драйвер и юзермодный прокси, отвечающий за загрузку-выгрузку и общение с хостовой машинкой. Это можно.
да, акь сказать == проприетарные модули идут без исходников порой, тч надобность ковырялок и в лине начинает быть актуальной
Тупой инжект через хуки до сих пор работает почти везде, ибо если его заблочить, то сразу отвалится куча всяких фрапсов, плееров, и прочего) --- Сообщение объединено, Nov 20, 2018 --- thx