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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top