Étude de sécurité TurboConf

Bonjour à tous! J'ai décidé de partager avec la communauté des informations sur une petite analyse d'un petit utilitaire (avec un code obscurci), connu dans des cercles étroits de surnoms. Ceci est mon premier article sur Habr, je vous demande de ne pas trop taper dessus, mais digne de critiquer.

Clause de non-responsabilité

Tout ce que vous voyez ici peut affecter vos capacités mentales, n'utilisez pas pour vous-même ce qui est décrit dans l'article, car cela peut vous nuire. L'auteur décline toute responsabilité quant à l'exactitude, l'exhaustivité ou la qualité des informations fournies.

Qu'est ce que c'est

TurboConf est un programme «shareware» qui étend les capacités du configurateur 1s, pas un mot de plus sur 1s , qui ne nécessite pas d'installation. Vous pouvez le télécharger sur le site Internet du même nom Runet. Toutes les études ont été menées sur la version 5.9.7209.21363 datée du 27 septembre 2019.

Analyse initiale

Après le téléchargement, nous obtenons une archive zip. Déballez. Nous voyons plusieurs fichiers exe. Regardons l'application principale avec une icône d'entreprise. Si vous l'ouvrez dans un simple éditeur HEX, par exemple HxD, vous pouvez facilement comprendre qu'il s'agit d'un assembly sous .Net Framework, car les noms de classe de la bibliothèque .Net standard sont visibles:

TurboConf en HxD
image

Ensuite, nous prenons le décompilateur DotPeek et regardons cet assemblage dedans. Le bytecode n'est pas obscurci, donc le décompilateur produit des sources presque originales:

Code de méthode récupéré
image

Il est facile de comprendre ici que le travail de l'utilitaire se poursuit vers l'application «TurboConf.Application.exe». Ouvrez-le dans DotPeek. Il s'agit également d'un assemblage avec du code IL. Mais contrairement à l'assemblage précédent, certaines des méthodes ici sont obscurcies, très probablement à l'aide de Confuser. En étudiant le code, il devient clair que la logique principale du travail se trouve dans "TurboConf.Service.dll" - et c'est également un assemblage pour .Net, et aussi certaines des méthodes sont obscurcies. Génial, c'est encore plus intéressant!

Recherche de défense

Lors de la visualisation de la structure d'assemblage, dans l'espace de noms «TurboConf.Service.Utils», nous trouvons la classe «Crypto», et en elle une méthode avec le nom parlant «DecryptStringAES»:

Méthode DecryptStringAES
image

Bien qu'il soit obscurci, il n'est pas difficile d'en restituer la logique de travail à l'avenir. Trouvez l'utilisation de cette méthode (Maj + F12):

Résultats de recherche
image

Et immédiatement le succès! Cette méthode est appelée 2 fois dans le constructeur de la classe responsable de la licence!

Récupération de la source

L'obfuscateur a chiffré toutes les lignes et les a placées dans un fichier de ressources. Vous pouvez obtenir ce fichier en utilisant le décompilateur Microsoft ildasm.exe inclus dans le SDK Windows (et pas seulement):

Récupération d'un fichier de ressources
image

Et au lieu des lignes d'origine, l'obfuscateur substitue la construction suivante dans le code: «<Module> .c (random_arithmic_operation)», où le résultat de l'opération arithmétique est un certain nombre, sur la base duquel le décalage du fichier de ressources est calculé, à partir duquel les données chiffrées sont ensuite extraites et la chaîne d'origine est restaurée. Pour faciliter la tâche de décryptage des chaînes, nous allons créer un nouveau projet dans Visual Studio, transférer, avec un peu de raffinement, la classe "<Module>" et le fichier de ressource "ressource". Ainsi, nous pouvons comprendre que dans la fenêtre DotPeek le code suivant

<Module>.c(sizeof (float) - 47, sizeof (int) + 6429, (int) ((uint) k >> 16) >= 0 ? sizeof (int) + 200 : System.Type.EmptyTypes.Length - 1805516213) 

c'est la ligne "Utilisateur:"

Restaurez lentement toute la logique de la classe de licence. Nous pourrions nous arrêter à cela, c'est-à-dire faire un simple piratage dans le fichier étudié "TurboConf.Service.dll", en remplaçant le contrôle d'égalité pour une licence par une inégalité, mais ce n'est pas intéressant. Pour aller plus loin ...

Principe de protection

Pour obtenir une licence, vous avez besoin d'un identifiant unique pour l'équipement sur lequel le programme s'exécute. Ce HardwareID est généré en fonction de l'identifiant du processeur et du numéro de série du volume du lecteur «Ts». Pour obtenir une licence d'essai, le programme fait une demande GET avec un identifiant d'équipement pour le domaine "netlenka1c.ru". Et en réponse vient une clé indiquant la date de fin de la période d'essai, signée ... numériquement. Le programme est basé sur l'algorithme RSA asymétrique avec une clé de 1024 bits. A ce stade, j'ai réalisé qu'il est impossible de se passer de modifier le fichier d'origine, car il est presque impossible d'obtenir la clé privée (elle est absente dans les fichiers utilitaires).

Mini centre de licences

Ayant compris le fonctionnement de la protection, j'ai décidé de me faire un petit dieu pour ce programme, afin que je puisse moi-même générer des clés. Pour ce faire, un patcher a été développé, qui remplace d'abord la clé publique de la signature numérique dans l'assembly par la clé publique générée elle-même:

Patcher
image

Et puis l'utilitaire développé pour générer des clés (à la fois temporaires pour une période de validité spécifiée et perpétuelles), ajoute une signature numérique à la clé en fonction de la clé privée générée elle-même:

Keygen
image

En conséquence, nous avons un programme enregistré réalisable avec toutes les fonctionnalités:

À propos du programme
image

Moral

L'obfuscation est une assez bonne méthode pour confondre l'inverse, mais ce n'est qu'une question de temps.

PS

L'article comporte spécifiquement des lacunes dans le récit, afin de ne pas remplacer l'auteur du programme. Aucun code source et programme de travail n'est joint et ne le sera pas. Respectez le travail des autres, en particulier des collègues de la "boutique"!

Merci à tous ceux qui ont lu le post!

Source: https://habr.com/ru/post/fr480280/


All Articles