2010-07-25 5 views
1

J'aimerais savoir comment la salamandre fait ce qu'elle fait? Je vais inclure quelques points im particulièrement intéressés parSalamander .NET Linker - Comment ça marche?

-

Lien à la demande

L'éditeur de liens commence par les méthodes d'entrée (que vous pouvez configurer), et des promenades récursive l'appel graphique pour lier uniquement les bits requis du code MSIL. Le code non utilisé ne sera pas lié à l'assemblage final. Par conséquent, votre code devient plus efficace et la taille du fichier diminue.

-

lien dans API cadre

L'éditeur de liens est si puissant que même les ensembles de Microsoft .NET Framework, comme System.Windows.Forms.dll, peuvent être liés dans vos propres assemblages .NET. Comme il est lié à la demande, seule la partie requise sera liée. Ceci est très utile pour protéger votre code, le déploiement d'applications simples et le dépannage en déboguant dans le code du framework lui-même.

-

Compliation natif

Le compilateur natif convertit tous les ensembles gérés, y compris les ensembles de système, en code natif x86. Aucune instruction MSIL ne sera envoyée, aucune compilation JIT lors de l'exécution. Cela fournit la meilleure protection contre le désassemblage et la décompilation, et améliore également les performances et le temps de démarrage.

-

Déploiement simple et rapide sans installation complète de Microsoft .NET Framework

L'outil mini-déploiement met ensemble l'ensemble minimal de fichiers d'exécution CLR et ensembles dépendants qui peuvent être simplement copié dans un seul dossier sur une machine cible, et votre application s'exécute comme si tout le framework était installé. Puisque l'installation est isolée dans un seul dossier, il n'y aura aucun conflit avec l'installation future de .NET. Lorsque la liaison est utilisée pour les assemblages dépendants, elle réduit davantage la taille du fichier.

-

Code de protection Il y a un problème aucun des adresse obfuscators actuelle, qui est, peu importe la qualité du obscurcissement est, il y a des appels à la bibliothèque du système et d'autres références externes dispersés dans votre code (voir en rouge ci-dessous). Puisque ces appels sont des références externes, les obfuscateurs devront les laisser inchangés. Cependant, ces références aident beaucoup à comprendre le code décompilé, car ils sont bien documentés et les API publiques.L'éditeur de liens supprime ou réduit ces API publiques en liant les API du framework dans votre propre code, ce qui rend votre code beaucoup plus difficile à décompiler après l'obfuscation. Ci-dessous montre l'exemple de code MSIL avant et après l'utilisation de l'éditeur de liens.

avant: (pas obfuscators sont en mesure de renommer le code suivant, car 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 API de Windows.Forms d'indice sont utilisés, un haut obstacle à un pirate de comprendre cette ordure )

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 chicane , et je me demandais si quelqu'un d'autre savait comment tout cela a fonctionné?

+3

Je suis désolé, mais il y a à peine une question ici. Cela ressemble vraiment à une publicité shill pour Salamander. –

Répondre

1

natif Compliation, déploiement simple et rapide sans installation complète de Microsoft .NET Framework, Code Protection:.

Ils compilent "YourApp" + » .NetFramework » dans une dll native Cela n'a pas d'IL et pas de symboles de sorte qu'il est beaucoup plus difficile à désosser

Lien à la demande, lien dans API Framework.

pour garder le .dll une taille raisonnable, ils doivent laisser le code mort (le code qui ne sera jamais appelé) de la DLL. Pour ce faire, ils parcourent l'arbre d'appel à partir de la racine, généralement Main(), et n'incluent que ces méthodes. Il peut y avoir des problèmes avec le code qui est appelé via la réflexion, donc je suppose qu'ils permettent plus de 1 racine.