Heyho!
Ich möchte demnächst mit einem neuen Projekt starten welches mit Coderverschleierung zu tun hat.
Im groben soll es so funktionieren:
Man soll in eine Textbox fertigen C# Code einfügen.
Auf Knopfdruck sollen nach Möglichkeit alle Variablendeklarationen/Methodennamen/Klassennamen usw usw in Random strings umbenannt werden.
Natürlich so dass der Code danach noch funktioniert 😉
Zusätzlich habe ich noch vor Trash Code einfügen zu lassen.
Leere Methoden/Sinnlose Deklarationen usw.
Mein Thread soll einfach der Nachfrage dienen ob sich jemand schonmal mit sowas beschäftigt hat.
Ich habe nämlich noch keine Gute Idee wie ich den "Code String" effektiv gesplittet bekomme, so dass ich die ganzen Deklarationen/Methodennamen rausgefiltert bekomme.
Regex mit einem Pattern? Vielleicht hat jemand ja eine gute Idee 😃
Danke schonmal im Vorraus 😃
Hallo Andybritten,
Regex alleine ist für das Parsen von gängigen Programmiersprachen nicht ausreichend. Stichwort ist Parser/Parsergenerator/Compilergenerator o.ä. Auch im Forum wurde das schon behandelt.
Leider bringt das Framework keinen C#-Parser mit, obwohl die CodeDOM-Interfaces sogar eine Methode dafür enthalten. Diese wirf aber in allen Klassen, die das Interface implementieren eine NotSupportedException. Man könnte das an vielen Stellen gebrauchen. Gibt es aber leider nicht.
herbivore
Das klingt nach einem herben Rückschlag für meine Planung.
Du sprichst jedoch Codedom an... Soweit habe ich gar nicht gedacht.
Ich glaube man kann sich aus C# Code einen CodeDomTree erzeugen lassen.
Hast du eine Ahnung ob man durch diesen durchlaufen kann und dort methoden/variablen finden und umbennen kann?
Hallo Andybritten,
effektive Obfuscation kann IMHO nur auf kompilierte Assemblies angewandt werden - C#-Code direkt zu verschleiern halte ich nicht für sinnvoll.
Schaue dir einmal Cecil (Teil des Mono-Projektes) an - damit kannst du dann sogar kompilierten Methoden Namen geben, die der C# Compiler niemals akzeptieren würde.
Vielen Dank für den Tip 😃
Hab auch schon von Mono.Cecil gehört. Wollte aber eigentlich für den Anfang klein Anfangen und nicht gleich riesen Geschütze auffahren.
Nur da es anscheinend keinen einfachen Weg gibt den Code zu parsen werd ich mich die Tage mal in Mono.Cecil einlesen.
Die komplexität der API hat mich schon ein wenig abgeschreckt 😛
Hast du dich damit schonmal befasst?
Die komplexität der API hat mich schon ein wenig abgeschreckt 😛
Wenn du dich über die "Komplexität" von cecil beschwerst, dann fang garnicht erst an, c# parsen zu wollen. Letzteres ist noch deutlich komplexer als mit cecil zu arbeiten.
Hast du dich damit schonmal befasst?
Ich befasse mich grade damit und die api fühlt sich etwas nach .net 1.0 an, ist aber an sonsten recht einfach, wenn man sich in .net auskennt.
Ein paar namen ersetzen bekommt damit denke ich auch ein einsteiger hin, es gibt da noch wesentlich ausgefuchstere möglichkeiten, code zu obfuskieren.
Hallo Andybritten,
ich kann dir zur Orientierung SharpObfuscator empfehlen. Dein Vorhaben, so wie du es beschrieben hast, ist wirklich die schlechteste Vorgehensweise. Stichwort: Parser, Mono.Cecil.
zero_x
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Viele Dank!
Ich werde mich dann ein wenig in Cecil einarbeiten.
Unnötige Beiträge habe ich gelöscht. Bitte beim Thema bleiben.