Laden...

Manuelle Code Obfuscation vor dem Compilen

Erstellt von Andybritten vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.372 Views
A
Andybritten Themenstarter:in
92 Beiträge seit 2009
vor 13 Jahren
Manuelle Code Obfuscation vor dem Compilen

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 😃

49.485 Beiträge seit 2005
vor 13 Jahren

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

A
Andybritten Themenstarter:in
92 Beiträge seit 2009
vor 13 Jahren

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?

5.742 Beiträge seit 2007
vor 13 Jahren

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.

A
Andybritten Themenstarter:in
92 Beiträge seit 2009
vor 13 Jahren

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?

1.130 Beiträge seit 2007
vor 13 Jahren

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.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

1.044 Beiträge seit 2008
vor 13 Jahren

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

A
Andybritten Themenstarter:in
92 Beiträge seit 2009
vor 13 Jahren

Viele Dank!

Ich werde mich dann ein wenig in Cecil einarbeiten.

Hinweis vor 13 Jahren

Unnötige Beiträge habe ich gelöscht. Bitte beim Thema bleiben.