À propos du projet
dearxan est une bibliothèque pour l'analyse statique et dynamique, ainsi que la correction, des vérifications qu'Arxan (désormais GuardIT) insère dans un binaire. Selon le README, elle peut neutraliser complètement Arxan dans les jeux FromSoftware qui l'utilisent : une fois les correctifs appliqués, aucun code Arxan (comme les vérifications anti-débogage et d'intégrité) ne s'exécute et les fonctions chiffrées restent déchiffrées.
Le README note une réserve : les stubs du point d'entrée Arxan doivent toujours s'exécuter. Ces stubs n'effectuent pas de vérifications anti-débogage, mais dans certains jeux (par exemple Dark Souls Remastered), ils effectuent des vérifications d'intégrité et peuvent faire planter le jeu si des modifications sont détectées. Cela peut être atténué en plaçant des hooks dans le callback passé à neuter_arxan. L'auteur déclare qu'une fois les stubs du point d'entrée entièrement rétro-ingénierés, cela ne sera plus nécessaire.
Jeux testés listés dans le README :
- Dark Souls Remastered
- Dark Souls II SOTFS
- Dark Souls III
- Elden Ring
- Armored Core VI
- Elden Ring: Nightreign
La crate n'est testée que contre les variantes d'Arxan dans les dernières versions de ces jeux FromSoftware et peut ne pas fonctionner avec les configurations Arxan utilisées par d'autres développeurs. Les contributions sont les bienvenues.
Options d'utilisation décrites :
- Depuis Rust avec la fonctionnalité disabler : ajoutez dearxan à Cargo.toml et appelez dearxan::disabler::neuter_arxan une fois, idéalement avant que le point d'entrée du jeu ne s'exécute. Un callback reçoit le résultat et est un endroit suggéré pour installer des hooks.
- Depuis C++ : téléchargez la bibliothèque statique depuis Releases, liez-la avec les bibliothèques d'importation Windows incluses, incluez include/dearxan.h et appelez dearxan::neuter_arxan. La norme minimale prise en charge est C++14, avec C++17+ recommandé.
- Depuis C : même bibliothèque et en-tête, appelez dearxan_neuter_arxan avec un callback.
- Depuis d'autres langages : générez des liaisons C à partir de include/dearxan.h et appelez dearxan_neuter_arxan.
Le README avertit que de nombreux injecteurs DLL ou lanceurs de mods ne suspendent pas le processus à la création ou ne permettent pas autrement au code de s'exécuter avant le point d'entrée du jeu. La crate prend en charge ces chargeurs au mieux, mais il est fortement recommandé d'en utiliser un qui charge les mods avant le point d'entrée. Pour les jeux Souls compatibles avec me3, la crate est déjà intégrée dans ce chargeur de mods via l'option de profil disable_arxan, et il est recommandé de l'utiliser si le mod dépend déjà de me3.
Pour écrire un correcteur personnalisé (par exemple pour corriger un exécutable sur disque), le README indique que vous devez analyser les stubs Arxan avec dearxan::analysis::analyze_all_stubs ou des API équivalentes, passer les valeurs StubInfo résultantes à dearxan::patch::ArxanPatch::build_from_stubs, et appliquer les correctifs manuellement. Cela doit être répété jusqu'à ce qu'aucun nouveau stub ne soit trouvé, car certains jeux ont des stubs chiffrés non découverts lors de la première passe d'analyse. Pour une image exécutable en direct, il est important que le stub du point d'entrée Arxan ait été invoqué ; les binaires FromSoftware peuvent également être enveloppés dans SteamStub.
Le README décrit les fonctionnalités d'Arxan, y compris les mutations d'instructions et l'obfuscation du flux de contrôle, le chiffrement des fonctions sensibles au repos avec déchiffrement au moment de l'exécution, les vérifications anti-débogage, et les vérifications d'intégrité qui peuvent écrire des drapeaux dans un tampon, faire planter le jeu via une corruption de la pile ou du flux de contrôle, ou réparer le code de fonction. La logique Arxan est contenue dans des stubs insérés dans des fonctions de jeu arbitraires ; ceux-ci sauvegardent le contexte, exécutent la logique Arxan, restaurent le contexte et reviennent en arrière.
La crate désactive Arxan en trouvant ces stubs et en visitant leurs graphes de flux de contrôle. Elle utilise une émulation partielle d'instructions et bifurque l'état du programme aux branches pour traverser l'obfuscation du flux de contrôle, puis analyse la structure du stub pour extraire des correctifs. Ceux-ci sont généralement un hook de saut vers un trampoline qui corrige la pile du stub, et incluent parfois l'extraction de régions de code déchiffrées pour écrire leur contenu directement.
Indicateurs de fonctionnalité :
- disabler (par défaut) : fournit un correcteur qui désactive complètement Arxan via neuter_arxan.
- rayon (par défaut) : parallélise l'analyse des stubs en utilisant rayon.
- ffi : exporte la fonction C dearxan_neuter_arxan.
- instrument_stubs : s'appuie sur disabler en instrumentant chaque stub pour journaliser un message la première fois qu'il est appelé ; le README avertit que cela plante actuellement pour les jeux autres que Dark Souls Remastered en raison d'un écrasement de registres.
- internal_api : expose la plupart des API d'analyse binaire internes via dearxan::analysis::internal ; celles-ci ne sont pas stabilisées et peuvent changer entre les versions mineures.
Les crédits mentionnent dasaav pour la synchronisation globale pour neuter_arxan, l'aide à la rétro-ingénierie de la façon dont Arxan stocke les régions mémoire à déchiffrer, et la découverte de l'algorithme de chiffrement (TEA à 32 tours).
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.