Об этом проекте
dearxan — это библиотека для статического и динамического анализа и патчинга проверок, которые Arxan (ныне GuardIT) вставляет в бинарный файл. Согласно README, она может полностью нейтрализовать Arxan в играх FromSoftware, которые его используют: после применения патчей никакой код Arxan (например, антиотладка и проверки целостности) не выполняется, а зашифрованные функции остаются расшифрованными.
В README отмечается одно ограничение: заглушки точки входа Arxan всё равно должны выполняться. Эти заглушки не выполняют проверок антиотладки, но в некоторых играх (например, Dark Souls Remastered) они выполняют проверки целостности и могут привести к сбою игры при обнаружении модификаций. Это можно смягчить, установив хуки в обратном вызове, передаваемом в neuter_arxan. Автор утверждает, что после полного реверс-инжиниринга заглушек точки входа это станет ненужным.
Протестированные игры, перечисленные в README:
- Dark Souls Remastered
- Dark Souls II SOTFS
- Dark Souls III
- Elden Ring
- Armored Core VI
- Elden Ring: Nightreign
Крейт протестирован только против вариантов Arxan в последних версиях этих игр FromSoftware и может не работать с конфигурациями Arxan, используемыми другими разработчиками. Приветствуются вклады.
Описанные варианты использования:
- Из Rust с функцией disabler: добавьте dearxan в Cargo.toml и вызовите dearxan::disabler::neuter_arxan один раз, желательно до выполнения точки входа игры. Обратный вызов получает результат и является рекомендуемым местом для установки хуков.
- Из C++: загрузите статическую библиотеку из Releases, свяжите её с включёнными Windows-библиотеками импорта, включите include/dearxan.h и вызовите dearxan::neuter_arxan. Минимальный поддерживаемый стандарт — C++14, рекомендуется C++17+.
- Из C: та же библиотека и заголовок, вызовите dearxan_neuter_arxan с обратным вызовом.
- Из других языков: сгенерируйте C-привязки из include/dearxan.h и вызовите dearxan_neuter_arxan.
README предупреждает, что многие DLL-инжекторы или мод-лоадеры не приостанавливают процесс при создании или иным образом не позволяют коду выполняться до точки входа игры. Крейт поддерживает такие загрузчики по мере возможности, но настоятельно рекомендуется использовать тот, который загружает моды до точки входа. Для игр Souls, совместимых с me3, крейт уже интегрирован в этот мод-лоадер через опцию профиля disable_arxan, и его использование рекомендуется, если мод уже зависит от me3.
Для написания собственного патчера (например, для патчинга исполняемого файла на диске) README говорит, что нужно анализировать заглушки Arxan с помощью dearxan::analysis::analyze_all_stubs или эквивалентных API, передавать полученные значения StubInfo в dearxan::patch::ArxanPatch::build_from_stubs и применять патчи вручную. Это необходимо повторять, пока не будут найдены новые заглушки, потому что в некоторых играх есть зашифрованные заглушки, не обнаруженные при первом проходе анализа. Для живого образа исполняемого файла важно, чтобы заглушка точки входа Arxan была вызвана; бинарные файлы FromSoftware также могут быть обёрнуты в SteamStub.
README описывает функции Arxan, включая мутации инструкций и обфускацию потока управления, шифрование чувствительных функций в состоянии покоя с расшифровкой во время выполнения, проверки антиотладки и проверки целостности, которые могут записывать флаги в буфер, вызывать сбой игры через порчу стека или потока управления или восстанавливать код функций. Логика Arxan содержится в заглушках, вставленных в произвольные игровые функции; они сохраняют контекст, выполняют логику Arxan, восстанавливают контекст и возвращаются обратно.
Крейт отключает Arxan, находя эти заглушки и обходя их графы потока управления. Он использует частичную эмуляцию инструкций и разветвление состояния программы на ветвлениях для работы с обфускацией потока управления, затем анализирует структуру заглушек для извлечения патчей. Обычно это хук-переход на трамплин, который исправляет стек заглушки, и иногда включает извлечение расшифрованных областей кода для прямой записи их содержимого.
Флаги функций:
- disabler (по умолчанию): предоставляет патчер, который полностью отключает Arxan через neuter_arxan.
- rayon (по умолчанию): параллелизует анализ заглушек с помощью rayon.
- ffi: экспортирует C-функцию dearxan_neuter_arxan.
- instrument_stubs: расширяет disabler, инструментируя каждую заглушку для записи сообщения при первом вызове; README предупреждает, что это в настоящее время вызывает сбой для игр, кроме Dark Souls Remastered, из-за порчи регистров.
- internal_api: открывает большинство внутренних API анализа бинарных файлов через dearxan::analysis::internal; они не стабилизированы и могут ломаться между минорными версиями.
В благодарностях упоминается dasaav за глобальную синхронизацию для neuter_arxan, помощь в реверс-инжиниринге того, как Arxan хранит области памяти для расшифровки, и нахождение алгоритма шифрования (32-раундовый TEA).
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.