Laden...

.Net-Anwendung gegen Disassemblierung schützen

Erstellt von Levitas vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.479 Views
L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 14 Jahren
.Net-Anwendung gegen Disassemblierung schützen

Hallo Leute!

Ich suche derzeit nach einer Möglichkeit, eines meiner .Net-Programme zu schützen.

Eine Möglichkeit, die ich mir vorstelle, ist z.B. das programm als byte[] aus den ressourcen zu laden, in den ram zu schreiben, und anschließend aus dem ram zu starten, aber in einer unmanaged-sprache geschrieben, damit möglichst niemand was davon mitbekommt, was mit dem eigentlichen programm passiert.

Aber leider weiß ich nicht, wie ich sowas machen könnte...

Das Programm ist eine einzelne datei (aber 1,3MB groß), also, sollte es da doch mit meiner methode recht gut laufen?

Oder setze ich da völlig falsch an?

Ich hoffe, ihr könnt mir helfen!

Mfg Marc

479 Beiträge seit 2008
vor 14 Jahren

Stichwort: Dotfucator

mfg.
markus111

[Follow me on Twitter](http://twitter.com/blendingsky)
L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 14 Jahren

Das klingt schonmal gut, aber ich habe ein Problem dabei:

Meine Anwendung kann danach nicht mehr gestartet werden!?

Ich gebe die Anwendung einfach bei "Input Files dazu", drücke Strg+B, lass ihn das Projekt speichern, und sehe dan in den ordner "Dotfuscated" - Nun starte ich meine Anwendung, und es steht dort "... funktioniert nicht mehr"

Warum? Liegt das an WPF, oder wie?

Mfg Marc

1.044 Beiträge seit 2008
vor 14 Jahren
L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 14 Jahren

Ich habe das Programm ja schon mit dem Dotfuscator behandelt, aber es ging nicht. Danach hieß es nur mehr "... funktioniert nicht mehr"

Kann das an WPF liegen? Ich habe die Dotfuscator Community Edition v 4.0.2008.11000

Ich sehe mich mal nach anderen Obfuscatoren um...

Mfg Marc

// Edit: Mit dem Phoenix Protector(http://ntcore.com/phoenix.php) bekomme ich bei der neuen exe wieder die gleiche Meldung =(

6.911 Beiträge seit 2009
vor 14 Jahren

Hallo,

da die Obfuskatoren die Bezeichner von Klassen, Methoden, ... tauschen kann es durchaus passieren dass andere Code-Teile welche auf diese Bezeichner angewiesen sind diese eben nicht mehr kennen/finden und daher das Programm seinen Dienst quittiert.

Vergiss die Obfuskatoren - es bringt ohnehin nichts. Wenn jemand deinen Code will dann bekommt er ihn auch.
Es ist zu berücksichtigen ob sich der Aufwand des Obfuskieren (heißt das so?) lohnt. Denn nach dem Ofuskieren muss die Assembly erneut getestet werden, ... Das ist mit erneutem Aufwand verbunden und kostet auch Geld. Stellt sich beim Test heraus dass etwas nicht geht beginnt der Kreislauf von vorne.
Außerdem ist zu berücksichtigen wer das "Zielpublikum" ist. Sind es "normale" Anwender werden sie nicht auf die Idee kommen eine Assembly (die meisten wissen gar nicht was das ist - sondern glauben das Programm ist das Icon im Startmenü) zu dissamblieren. Wenn das Zielpublikum C#-Programmierer sind und wenn diese am Code interessiert sind bekommen sie ihn ohnehin.

Was ich damit ausdrücken will ist: Der Aufwand der Obfuskation lohnt sich nicht. Ich finde es besser ein funktionierendes Programm zu verteilen als ein "perfekt" obfuskiertes das nicht funktioniert 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 14 Jahren

Ok, dann werde ich das mal lassen. Und wie sieht es mit meiner RAM-Idee aus? Würde sich das etwas bringen? ResourceHacker ist nattürlich eine Möglichkeit an die exe in den resources einer c++-anwendung zu kommen (denke ich zumindest mal...?)

Aber ich wüsste nicht, wie ich sowas umsetzen könnte...

Es ist nur so, dass in meinem Programm sehr viele wichtige Werte gespeichert sind, die niemanden etwas angehen...

Mfg Marc

6.911 Beiträge seit 2009
vor 14 Jahren

Der Umweg mit der RAM-Methode ist viel zu kompliziert.

Es ist nur so, dass in meinem Programm sehr viele wichtige Werte gespeichert sind, die niemanden etwas angehen...

Du könntest die Werte in der Anwendungskonfigurationsdatei verschlüsselt hinterlegen - ähnlich wie es mit Connection-Strings für Datenbanken geschieht.

Angriffsvektor:
Verschlüsselung knacken oder das während der Programmausführung den RAM nach den Werten scannen.
Wie wahrscheinlich dass das eintritt kannst du dir ja denken.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

2.891 Beiträge seit 2004
vor 14 Jahren

Eine Möglichkeit, die ich mir vorstelle, ist z.B. das programm als byte[] aus den ressourcen zu laden, in den ram zu schreiben, und anschließend aus dem ram zu starten, aber in einer unmanaged-sprache geschrieben, damit möglichst niemand was davon mitbekommt, was mit dem eigentlichen programm passiert.
Aber leider weiß ich nicht, wie ich sowas machen könnte...

Tja, da gibt es Firmen für, die sich auf sowas spezialisiert haben und sich damit auskennen. Soweit ich weiß, hat z.B. Aladdin auch extra Lösungen für .NET.

Gruß,
dN!3L

L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 14 Jahren

Verschlüsselung knacken oder das während der Programmausführung den RAM nach den Werten scannen.

Diese Werte wird man nicht so leicht finden, da sie nur bei einer methode übergeben werden, und nicht extra abgespeichert sind. Deshalb geht es mir auch nur um den Code.

Tja, da gibt es Firmen für, die sich auf sowas spezialisiert haben und sich damit auskennen. Soweit ich weiß, hat z.B. Aladdin auch extra Lösungen für .NET.

Ich finde zu "Aladdin" nicht viel in Google, genau so wenig bei "Alladin .Net", "alldin c#", etc.

Ein Link wäre hilfreich,

Mfg Marc

M
1.439 Beiträge seit 2005
vor 14 Jahren

Ok, dann werde ich das mal lassen. Und wie sieht es mit meiner RAM-Idee aus? Würde sich das etwas bringen?

So eine "Herausforderung" hat mal egrath geposted. War aber innerhalb eines Tages geknackt...

L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 14 Jahren

Schade...

Ich sehe mal, was sich da noch machen lässt...

Danke erstmal an alle,

Mfg Marc

2.891 Beiträge seit 2004
vor 14 Jahren

Hallo Levitas,

Ich finde zu "Aladdin" nicht viel in Google, genau so wenig bei "Alladin .Net", "alldin c#", etc.

Die Aladding HASP SRM-Lösung (beinhaltet Reverse-Engineering-Schutz, Dateiverschlüsselung, Codeverschleierung, Anti-Debugging auf Systemebene, automatische Lizenzierung, etc.) hat auch extra Unterstützung für .NET-Anwendungen.
Hier eine (etwas ältere) Pressemitteilung dazu: Aladdin stellt HASP SRM 2.50 vor — automatischer Schutz geistigen Eigentums für Microsoft .NET Framework 3.0-Anwendungen

Gruß,
dN!3L

L
Levitas Themenstarter:in
95 Beiträge seit 2009
vor 14 Jahren

Ok, danke

Ich finde mich bei den Downlads nur irgendwie nicht so ganz zurecht =/

Kann mir vllt. jemand sagen, was genau ich von hier brauche: Link?

Mfg Marc

194 Beiträge seit 2006
vor 14 Jahren

Hi Levitas
hier kannst du auch DK nach hause bestellen mit umfassender Dokumentation.

@All

Wenn wir grad schon beim Thema sind was haltet Ihr von EZIRIZ' Lösung?

Bei mir funktioniert's prima mit Typed Datasets und allem und der Preis kann sich IMHO auch sehen lassen. Ich würde gerne wissen, was Ihr davon haltet bzw ob jemand Schwachstellen des Produktes kennt.
MFG

Balaban_S

R
317 Beiträge seit 2006
vor 14 Jahren

Hi,

.NET Reactor wurde auch schon mal geknackt, bzw. ein Testprogramm, welches ich mal "abgesichert" habe:

Erfahrung mit .NET Reactor?

Ich weiß nicht, ob es sich seit der 4er Beta Version geändert hat, bzw. sicherer ist.
Da ich Ihn schon gekauft habe, verwende ich Ihn auch weiter (ohne Probleme), denn eine kleine Hürde ist er ja immer 😉

mfg,
daniel