2010-02-26 3 views
5

Ainsi, dans le code ci-dessous, vous remarquerez le commentaire "// Cet objet est obfusqué et ne peut être traduit". Ce que je me demande, est-ce que cela signifie que le commentaire est là à la place d'un code obfusqué et que ce qui suit n'est pas réellement obscurci ou cela signifie-t-il que le code suivant est obfusqué? D'après ce que je peux trouver sur le web, cela ressemble à l'ancien mais je ne suis pas sûr. Le code semble clairement obscur mais il n'est pas intraduisible, juste hilarant.Réflecteur: Est-ce que le commentaire dans ce code signifie que tout est obscurci?

public static NameValueCollection ParseStringIntoNameValueCollection(string responseString, bool undoCallbackEscapes) 
{ 
    // This item is obfuscated and can not be translated. 
    NameValueCollection values; 
    string[] strArray; 
    int num; 
    string str2; 
    string str3; 
    int num3; 
    goto Label_0027; 
Label_0002: 
switch (num3) 
{ 
    case 0: 
     if (!undoCallbackEscapes) 
     { 
      goto Label_0057; 
     } 
     num3 = 4; 
     goto Label_0002; 

    case 1: 
     goto Label_00E5; 

    case 2: 
     if (num < strArray.Length) 
     { 
      string str = strArray[num]; 
      int index = str.IndexOf('='); 
      str2 = str.Substring(0, index); 
      str3 = str.Substring(index + 1); 
      num3 = 0; 
     } 
     else 
     { 
      num3 = 6; 
     } 
     goto Label_0002; 

    case 3: 
     if (7 < (7 - 5)) 
     { 
      goto Label_0071; 
     } 
     goto Label_00E5; 

    case 4: 
     str2 = unEscapeCallbacks(str2); 
     str3 = unEscapeCallbacks(str3); 
     num3 = 5; 
     goto Label_0002; 

    case 5: 
     goto Label_0057; 

    case 6: 
     return values; 
} 
Label_0027: 
    values = new NameValueCollection(); 
    strArray = responseString.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries); 
    num = 0; 
    num3 = 1; 
    goto Label_0002; 
Label_0057: 
    values.Add(str2, str3); 
    num++; 
    num3 = 3; 
    goto Label_0002; 
Label_00E5: 
    num3 = 2; 
    goto Label_0002; 
} 

Mise à jour: Je ne trouve cela ... « Parfois, pas trop souvent, lorsque réflecteur est DEMONTAGE code source pour vous, il affichera « Cet article est obscurcie et ne peut pas être traduit » au lieu de code."

Ce qui pour moi implique qu'il recouvre le code obscurci avec le commentaire. Quelqu'un peut-il vérifier cela? J'ai regardé l'IL et il semble que tout montre, alors peut-être que cette affirmation n'est pas exacte.

Pour moi, ce code a l'air d'avoir été obscurci par un enfant de 5 ans avec une connaissance de BASIC, par opposition à un logiciel d'obfuscation.

+4

J'aime le cas 3 ci-dessus. –

+1

Il convient de noter que le cas 3 est également la façon dont les générateurs de nombres aléatoires fonctionnent. – Woot4Moo

Répondre

2

Peu importe à quel point il est obfusqué, vous devriez toujours pouvoir vous décompiler en IL, vous pouvez donc regarder cela et voir si le réflecteur vous montre réellement tout.

+1

Donc, j'ai regardé l'IL pour cela et je veux dire qu'il semble que tout est probablement là, mais c'est difficile à dire. Comment le réflecteur sait-il que c'est un code obscurci? – Carter

3

Il semble avoir l'air obfusqué dans le sens où c'est une fonction de chaîne qui divise une chaîne basée sur l'esperluette et passe par le switch/case pour déterminer comment le gérer. L'utilisation de goto est purement (par l'apparence de) des lecteurs de code confus dans un certain sens ...

Bien sûr, vous pouvez charger .NET EXE/DLL en utilisant le réflecteur de Redgate (anciennement réflecteur de Rutz Loeder) pour analyser et vider le code, donc peu importe à quel point il est "obfusqué", l'obfuscation ne sert pas vraiment un but que le code peut être décompilé assez facilement.

Il n'existe aucun moyen réel de protéger .NET EXE/DLL à moins d'être chiffré et d'utiliser un code C/C++ non géré pour charger .NET EXE, décrypter le .NET EXE et le charger dans un domaine d'application nouvellement hébergé. ..

Espérons que cela aide, Cordialement, Tom.

+1

alors on peut faire ça? pouvez-vous montrer un bon exemple de plaine? –