Enum.GetNames()

Eine Falle bei Übersetzung bzw. Obfuskierung

Sonntag 28 Februar 2010 at 2:59 pm. Stichwörter: , ,

Dieses Problem ist mir bei einem Vortrag über die Lokalisierung von Programmen zum ersten mal aufgefallen. Bei einem Treffen der Dortmunder .net Usergroup (www.do-dotnet.de) berichtete Matthias Raacke von Problemen bei der Übersetzung von solchen Konstrukten. 

Etwas später stolperte ich beim Schutz des Quelltextes mit einem Obfuscator über das gleiche Problem. Nach der Obfuskierung waren die Texte in den Enum Typen nicht mehr lesbar!

Daher mein Tip:
Niemals die Namen einer Enumeration mit Enum.GetName() auslesen und in der Benutzeroberfläche ausgeben.

Doch worum geht es dabei eigentlich genau?

Schaut euch mal diesen Quelltext Ausschnitt an:

using System;
using System.Windows.Forms;
namespace EnumTip
{
public partial class Form1 : Form
{
enum Farbe { rot = 0, gelb, grün }
public Form1()
{
InitializeComponent();
string[] FarbenListe = Enum.GetNames(typeof(Farbe));
comboBox1.Items.AddRange(FarbenListe);
}
}
}

ProgrammFenster EnumTipDas Bild zeigt das Programm bei einem Start aus Visual Studio heraus. Mit der ComboBox kann man zwischen den Farben wählen. Es sieht gut aus und funktioniert auch ohne Probleme.

Farbauswahl nach dem Obfuskieren Nach dem Obfuskieren sieht es aber ganz anders aus! Das zweite Bild zeigt das Problem. Die Farbnamen sind in unlesbare Zeichen konvertiert worden. Dennoch funktioniert das Programm! Nur der Anwender kann die Farben nicht mehr richtig auswählen.

Natürlich könnte man auch den Obfuscator so einstellen, dass die Enumerations nicht verschleiert werden, aber das würde eine Sicherheitslücke bedeuten.

Ein Kommentar

Einer oder mehrere Kommentare sind noch nicht freigeschaltet.



(optionales Feld)
(optionales Feld)

Auf dieser Seite werden die Kommentare moderiert.
Das bedeutet, dass die Kommentare erst dann veröffentlicht werden, wenn sie freigeschaltet wurden.

Persönliche Informationen speichern?
Hinweis: Alle HTML-Tags außer <b> und <i> werden aus Deinem Kommentar entfernt. URLs oder Mailadressen werden automatisch umgewandelt.