
ROPfuscator is a fine-grained code obfuscation framework for C/C++ programs using ROP (return-oriented programming).
ROPfuscator est une preuve de concept de recherche et n'est pas destiné à une utilisation en production. Les auteurs déclinent toute responsabilité quant à l'utilisation du logiciel. Veuillez faire preuve de prudence et l'utiliser à vos propres risques.

ROPfuscator est un framework d'obfuscation de code à grain fin pour les langages supportés par LLVM, reposant sur la ROP (return-oriented programming). ROPfuscator obfusque un programme au niveau du code assembleur en transformant les instructions classiques en chaînes ROP, contrecarrant notre conception naturelle du flux de contrôle normal. Il est implémenté comme une extension du backend x86 de LLVM (10.0.1).
Pour la compilation, l'utilisation et l'implémentation, consultez les documents suivants :
Lire l'article ici |
|
Ce projet vise à fournir une version améliorée de ROPfuscator avec un fort accent sur la reproductibilité et la facilité d'intégration. Nous avons apporté plusieurs améliorations clés dans ce dépôt, comme indiqué ci-dessous.
ROPfuscator exploite désormais Nix, un gestionnaire de paquets déclaratif et puissant qui permet des builds fiables et reproductibles. Nix offre plusieurs avantages :
ROPfuscator fournit un flake Nix exposant les stdenv de ROPfuscator et diverses fonctions d'aide utilisées pour compiler nativement des dérivations Nix, sans appliquer aucune modification au système de build du projet à construire.
Le processus d'évaluation a été entièrement réécrit, en tirant pleinement parti du gestionnaire de paquets Nix. Cela garantit une évaluation plus fiable et transparente, qui servira de base aux futurs travaux sur ROPfuscator.
ROPfuscator peut désormais tenter d'obfusquer de manière transparente n'importe quel paquet présent dans le dépôt de paquets Nix amont, nixpkgs, sans nécessiter de modifications. Cela permet aux utilisateurs de Nix d'intégrer ROPfuscator de manière transparente dans leurs flux de travail existants et de tester ses capacités.
ROPfuscator peut cibler un seul projet, en n'obfusquant que les fichiers objets pertinents pour le projet lui-même, ou il peut obfusquer la cible ainsi que toutes ses dépendances.
Installez Nix (le gestionnaire de paquets) et assurez-vous que son démon est en cours d'exécution.
Les Flakes vous permettent de spécifier les dépendances de votre code de manière déclarative et de définir facilement les entrées et sorties des projets. ROPfuscator expose différentes sorties, nous devons donc activer l'utilisation des Flakes dans Nix.
Voici une procédure pas à pas pour les activer.
Cette étape permet de tirer parti du dépôt de cache de ROPfuscator pour éviter de recompiler le projet et toutes ses dépendances à partir de zéro. Cette étape est facultative mais recommandée.
Pour activer le cache de ROPfuscator, installez d'abord cachix :
nix-env -iA cachix -f https://cachix.org/api/v1/install
Ensuite, configurez nix.conf pour utiliser le cache binaire :
cachix use ropfuscator
La dernière étape consiste à compiler ROPfuscator. Cela peut être fait en exécutant :
nix build github:ropfuscator/ropfuscator -L
Si vous souhaitez ouvrir un shell configuré pour utiliser ROPfuscator par défaut, exécutez simplement :
nix shell github:ropfuscator/ropfuscator
ROPfuscator peut être utilisé pour obfusquer des paquets présents dans le dépôt Nixpkgs. Actuellement, nous utilisons un fork personnalisé car certains paquets amont n'étaient pas correctement configurés pour la compilation croisée. Bien que nous ayons déjà soumis certains correctifs en amont, il reste encore du travail à faire pour une expérience sans faille.
Pour commencer, suivez les deux premières étapes ci-dessus et installez Nix. Ensuite, copiez flake-example.nix dans un répertoire en le renommant flake.nix :
mkdir -p ropfuscator-example && cd ropfuscator-example
cp ../flake-example.nix flake.nix
À ce stade, vous pouvez compiler les deux paquets définis dans le flake : hello et obfuscatedHello.
Pour compiler obfuscatedHello, utilisez :
nix build .#obfuscatedHello -L
De même, pour compiler hello, exécutez :
nix build .#hello -L
Nous combinons les couches d'obfuscation suivantes pour obtenir une obfuscation robuste face à plusieurs attaques.
ROPfuscator peut être configuré via des fichiers de configuration TOML. Ce dépôt contient les configurations prêtes à l'emploi suivantes :
Chaque configuration peut être personnalisée à l'aide des options disponibles dans le tableau de configuration du README.
Nous encourageons la collaboration et sommes ouverts à discuter d'extensions ou d'améliorations potentielles du projet. Si vous êtes intéressé(e) par une contribution, n'hésitez pas à nous contacter ou à ouvrir une issue.
Merci pour votre soutien !