J'ai récemment étudié des documents liés à DotNet, et sscli est vraiment une bonne chose :P.
Pendant mes études, j'ai synthétisé les connaissances et réalisé ce petit outil.
Le principe de protection est similaire à celui des chinois remotesoft et maxtocode. Le programme crypté doit également être accompagné d'une bibliothèque d'exécution lors de sa sortie.
Cependant, contrairement à ces deux-là, la bibliothèque d'exécution incluse n'est pas une pure DLL native, mais un assemblage hybride C++/CLI.
L'outil a pris forme et le cadre global du noyau a été complété. Utilisé pour chiffrer un échantillon et il fonctionne normalement.
Certains aspects dépassent même maxtocode.
1. Ne s'appuie pas sur les programmes ildasm et ilasm de Microsoft.
Le désassemblage et l'assemblage IL sont implémentés par programme.
Les assemblys contenant du code natif peuvent être chiffrés.
2. Outil anti-décompilation, l'assemblage chiffré maxtocode ne peut pas être visualisé directement avec le réflecteur, mais après avoir exécuté le programme, utilisez pedumper, et après le dumping, vous pouvez utiliser Reflectotr pour afficher la structure. Bien sûr, vous ne pouvez toujours pas voir le code.
L'assembly chiffré par dnguard est meilleur que ce à quoi je m'attendais. L'assembly chiffré ne peut pas être visualisé avec le réflecteur, et l'assembly vidé ne peut pas être visualisé avec le plug-in du réflecteur.
Je pense que le réflecteur est encore un peu faible. Des logiciels similaires, Disa# et Xenocode fox, peuvent directement ouvrir et visualiser les assemblys cryptés maxtocode et dnguard.
À cette fin, j'ai essayé d'ajouter un obscurcissement structurel à l'assembly chiffré dnguard. Cela a eu un effet, c'est-à-dire que lors de la visualisation de la structure dans Disa# et fox, il y aura une certaine confusion, c'est-à-dire que les fonctions de classe A peuvent être affichées. en classe B. L'effet n'est pas très bon, il n'y a que quelques fonctions dans chaque classe qui poseront des problèmes.
3. Les nouvelles fonctionnalités d'Anti .Net 2.0 ne sont pas très puissantes. La force est similaire à celle de maxtocode 3.13 (version interne). J'ai entendu dire que maxtocode avait publié la version 3.14. à la réponse sur le blog de Jason, cela semble être la même chose que 3.13). Max 3.12 peut être utilisé en corrigeant seulement quelques octets, et la réflexion peut être utilisée 3.13 n'est pas très différente, et le nombre d'octets requis pour être corrigés est encore inférieur à celui de 3.12.
Il existe désormais une meilleure solution à cet égard, qui peut augmenter considérablement l’intensité sans affecter l’efficacité. Mais cela ne peut pas empêcher complètement les décharges.
Il existe également une solution anti-dumping relativement parfaite, qui doit être mise en œuvre en conjonction avec une autre technologie de protection.
Nous n'avons pas l'intention de discuter de cet aspect en profondeur. Une fois le shell de chiffrement DNGuard terminé, nous lancerons une autre technologie de protection et enfin combinerons les deux protections.
4. Utilisez ildasm et ilasm pour restaurer l'assemblage après Anti dump. En plus des nouvelles fonctionnalités anti-dump d'anti .net 2.0, DNGuard ajoute également anti, un dumper que j'ai créé au début. De plus, la fonctionnalité de l'assemblage hybride C++/CLI est également utilisée pour éviter l'ildasme après le vidage. Cependant, ce n'est pas très solide et un petit assemblage peut être facilement réparé pour mettre en œuvre un assemblage IL.
Il reste encore beaucoup de travail à faire. L'algorithme de cryptage n'a pas encore été élaboré et la protection de la bibliothèque d'exécution elle-même n'a pas encore été réalisée. J'ai trouvé que vous pouvez trouver des outils de protection prêts à l'emploi pour les DLL purement natives, comme thmida, ce qui est très bien. La bibliothèque d'exécution de maxtocode utilise ce shell, mais je n'ai jamais réussi à trouver une bonne méthode pour les DLL C++/CLI. . Il semble que nous ne puissions ajouter une couche de protection que manuellement, et nous avons déjà commencé à la tester. Nous allons maintenant ajouter un simple shell de chiffrement. Une fois cette opération terminée, nous y mettrons une démo de DNGuard.
Une fois que DNGuard a chiffré l’assembly, utilisez le réflecteur pour afficher :
Utilisez le réflecteur pour afficher le vidage de l'assembly chiffré DNGuard :
L'assemblage chiffré par Maxtocode est visualisé avec Reflector :
Après avoir vidé l'assembly chiffré Maxtocode, visualisez-le avec Reflector :