Salamander .NET Linker - Comment ça marche?
-
29-09-2020 - |
Question
Je voudrais une étape de la façon dont la salamandre fait ce qu'elle fait? Je comprendrai quelques points im particulièrement intéressés par
-
lien sur demande
Le linker commence par les méthodes d'entrée (que vous pouvez configurer) et promenade récursivement le graphe d'appel pour lier uniquement les bits requis du code MSL. Le code inutilisé ne sera pas lié à l'assemblée finale. Par conséquent, votre code devient plus efficace et la taille du fichier devient plus petite.
-
lien dans les API de cadre La liaison est si puissante que même les assemblages Microsoft .NET Framework, tels que System.Windows.Forms.dll, peuvent être liés à vos propres assemblages .NET. Comme il lie à la demande, seule la partie requise sera liée. Ceci est très utile pour protéger votre code, un déploiement simple des applications et vos problèmes de prise de vue en débogage dans le code-cadre lui-même.
-
Compliation natale Le compilateur natif convertit tous les assemblys gérés, y compris les assemblages système, en code natif x86. Aucune instruction MSIL ne sera expédiée, pas de compilation JIT au moment de l'exécution. Cela fournit la meilleure protection contre les désassemblages et la décompilation, et améliore également la performance et le temps de démarrage.
-
Déploiement simple et rapide sans installation complète Microsoft .NET Framework
L'outil de mini-déploiement met en place l'ensemble minimal de fichiers d'exécution CLR et d'assemblages à charge pouvant être simplement copiés dans un seul dossier d'une machine cible et que votre application est exécutée comme si l'ensemble de l'application est installé. Étant donné que l'installation est isolée dans un seul dossier, il n'y aura pas de conflit avec une future installation .NET. Lorsque la liaison est utilisée pour les assemblages à charge, il réduira davantage la taille du fichier.
-
Protection du code Il n'y a aucun problème aucun problème de l'adresse d'obfuscateurs actuels, c'est-à-dire quel que soit la qualité de l'obfuscation, il existe des appels de bibliothèque système et d'autres références externes dispersées dans votre code (voir rouge ci-dessous). Étant donné que ces appels sont des références externes, les obfusques devront les laisser inchangées. Cependant, ces références aident beaucoup à comprendre le code décompilé, car ils sont bien documentés et des API publiques. La liaison supprime ou réduit ces API publiques en reliant les API de cadre dans votre propre code et rend votre code beaucoup plus difficile à décompiler après l'obfuscation. Ci-dessous montre l'échantillon de code MSIL avant et après l'utilisation de la liaison. Avant: (aucun obfuscators ne peut renommer le code suivant, puisqu'ils sont des API publiques externes)
IL_0000: ldarg.0
IL_0001: call instance void [System.Windows.Forms]System.Windows.Forms.Form::.ctor()
IL_0006: ldarg.0
IL_0007: newobj instance void [System.Windows.Forms]System.Windows.Forms.TextBox::.ctor()
IL_000c: stfld class [System.Windows.Forms]System.Windows.Forms.TextBox A.A::A
IL_0011: ldarg.0
IL_0012: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox A.A::A
IL_0017: call valuetype [System.Drawing]System.Drawing.Color [System.Drawing]System.Drawing.Color::get_Cyan()
IL_001c: callvirt instance void [System.Windows.Forms]System.Windows.Forms.TextBoxBase::set_BackColor(valuetype [System.Drawing]System.Drawing.Color)
IL_0021: ldarg.0
Après: (absolument aucune idée des fenêtres.Forms Les API sont utilisées, un obstacle élevé pour un pirate informatique pour comprendre cela Junk)
IL_0000: ldarg.0
IL_0001: call instance void a.A::.ctor()
IL_0006: ldarg.0
IL_0007: newobj instance void D.c::.ctor()
IL_000c: stfld class D.c A.A::A
IL_0011: ldarg.0
IL_0012: ldfld class f.aA.A::A
IL_0017: call valuetype a.B()
IL_001c: callvirt instance void D.c(valuetype g.e)
IL_0021: ldarg.0
Certaines de ces choses me déflent, et je me demandais si quelqu'un d'autre savait comment tout fonctionnait?
La solution
CLIMINATION NATIVE, Déploiement simple et rapide sans installation complète Microsoft .NET Framework, Protection du code:
Ils compilent "YourApp" + ".NetFramework 'dans une DLL natif. Cela n'a pas d'IL et pas de symboles, il est donc beaucoup plus difficile d'inverser l'ingénieur.
lien sur demande, Lien dans les API-Framework:
Pour conserver la taille de la plainte .DLL, ils doivent laisser le code mort (le code qui ne sera jamais appelé) de la DLL.Pour ce faire, ils marchent l'appel d'appel de la racine, généralement principaux () et incluent simplement ces méthodes.Il peut y avoir des problèmes avec le code appelé via réflexion, alors je suppose qu'ils permettent plus d'une racine.