Obfusquer votre code en C#

Saad Aslam 12 octobre 2023
  1. Qu’est-ce que l’obfuscation de code signifie en C#
  2. Obfuscation de code en C#
  3. Approches pour implémenter l’obscurcissement en C# à l’aide de ces outils
  4. Renommer Obfuscation en C#
  5. Cryptage de chaînes en C#
  6. Anti-débogage de code en C#
  7. Anti-falsification du code en C#
  8. Insertion de code factice en C#
  9. Liaison/Fusion binaire en C#
Obfusquer votre code en C#

Cet article vous présentera comment vous pouvez obscurcir votre code en C#. Utiliser une variété de moyens et certains outils qui peuvent faciliter le processus.

La plupart des compilateurs non .Net émettent des programmes binaires contenant des instructions CPU natives. Qui sont très difficiles à désassembler, décompiler et désosser.

Cependant, tous les compilateurs .Net comme C# et Managed C++ fournissent des programmes compilés en MSIL (Microsoft Intermediate Language Format).

Ce format conserve de nombreuses informations de haut niveau sur votre logiciel, telles que les noms de classe, les champs, les méthodes, les propriétés et les paramètres, ainsi que même le code réel dans une structure riche.

En conséquence, différents décompilateurs et désassembleurs ont été créés pour extraire ces informations d’un assemblage .Net.

Qu’est-ce que l’obfuscation de code signifie en C#

La technique consistant à modifier un exécutable pour qu’il ne soit plus utile à un pirate mais reste entièrement fonctionnel est connue sous le nom d’obfuscation de code.

Bien que la procédure puisse modifier des instructions de méthode ou des métadonnées, elle n’affecte pas la sortie du programme.

Obfuscation de code en C#

Code Obfuscation comprend plusieurs approches diverses qui fonctionnent ensemble pour fournir une défense en couches. C’est particulièrement utile pour les langages comme C# qui émettent des instructions de niveau intermédiaire.

Il existe plusieurs outils Obfuscator disponibles qui peuvent vous aider à rendre votre code C# difficile à interpréter par les pirates.

  • Réacteur .NET
  • Eazfuscator.NET
  • Babel
  • ConfuseurEx

Approches pour implémenter l’obscurcissement en C# à l’aide de ces outils

Il existe plusieurs approches pour rendre votre code incompréhensible pour quiconque. Quelques-uns d’entre eux sont abordés dans les paragraphes suivants.

Renommer Obfuscation en C#

Cette technique modifie les noms des méthodes et des variables. Cela rend la source décompilée difficile à comprendre pour les humains mais n’affecte pas l’exécution du programme.

Les nouveaux noms peuvent utiliser divers schémas tels que des alphabets, des chiffres et des lettres non imprimables ou invisibles.

Tant que les portées des noms diffèrent, ils peuvent être surchargés. La plupart des obfuscateurs C# utilisent le nom d’obfuscation comme transformation fondamentale.

Code source d’origine avant renommer l’obfuscation :

public class Data {
  public int age;
  public Data(int age) {
    this.age = age;
  }
}

Code source avec obfuscation de renommage implémenté.

public class a {
  public int b;
  public a(int b) {
    this.b = b;
  }
}

Cryptage de chaînes en C#

Les chaînes sont immédiatement identifiables comme faisant partie d’un code bien géré et bien exécuté.

Même si les méthodes et les variables sont renommées, les références de chaîne peuvent trouver des zones de code importantes en vérifiant les références de chaîne dans le binaire.

Il contient tous les messages que l’utilisateur peut afficher. Il fournira une barrière contre cette forme d’attaque.

Le chiffrement de chaîne chiffre les chaînes dans l’exécutable mais ne renvoie leur valeur réelle que lorsque cela est nécessaire.

Code source d’origine avant le cryptage de chaîne :

Console.WriteLine("Encrypt this");

Code source avec cryptage de chaîne mis en œuvre.

Console.WriteLine("x%$&#@");

Anti-débogage de code en C#

Lorsqu’un attaquant essaie de modifier vos données ou de voler la fonctionnalité d’un composant critique, il commencera probablement par une ingénierie inverse et un débogage.

Les professionnels et les hackers utilisent des outils pour analyser le code ligne par ligne. Un obfuscateur peut l’identifier via l’autoprotection de l’application.

Lorsqu’un débogueur est utilisé, il peut détruire des données cruciales, déclencher des plantages aléatoires ou effectuer une action particulière.

Les professionnels de la sécurité informatique peuvent utiliser des outils anti-débogage pour détecter si un pirate utilise une application de débogage dans le cadre d’une attaque.

Les pirates peuvent utiliser des outils anti-débogage pour identifier quand un outil de débogage est utilisé pour déterminer les modifications qu’ils appliquent au code.

Anti-falsification du code en C#

Un obfuscateur peut y injecter une autoprotection de l’application. Si une altération est découverte, le programme peut être arrêté, ses fonctionnalités limitées, des plantages aléatoires (pour masquer la cause du plantage) ou toute autre action spécifique entreprise.

Il peut également envoyer un message à un service l’informant de la falsification découverte.

Insertion de code factice en C#

Insérez du code dans un exécutable qui n’a aucune influence sur la logique du programme mais casse les décompilateurs ou rend le code de rétro-ingénierie beaucoup plus difficile à comprendre.

Liaison/Fusion binaire en C#

Cette transformation combine plusieurs exécutables/bibliothèques d’entrée en un ou plusieurs fichiers binaires de sortie.

La liaison peut vous aider à réduire la taille de votre application, en particulier lorsqu’elle est associée à un changement de nom et à un découpage.

Cela peut également faciliter le déploiement et minimiser le nombre d’informations auxquelles les pirates ont accès.

Auteur: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn