Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
.NET Assembly vor Disassemblern schützen

Moderationshinweis von herbivore (12.04.2005 - 17:54)

Dies ist ein Thread, auf den aus der FAQ verwiesen wird. Bitte keine weitere Diskussion, sondern nur wichtige Ergänzungen und diese bitte knapp und präzise. Vielen Dank!

f_scheithauer@yahoo.de
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

.NET Assembly vor Disassemblern schützen

beantworten | zitieren | melden

hallo,
kann mir jemand verraten, wie ich meine DLL und EXE Programme, die ich unter .NET erstellt habe, vor Disassemblern wie zum Beispiel dem Reflector for .NET schützen kann?

gruß falko
Kann mir endlich einer das Wasser reichen :-)
private Nachricht | Beiträge des Benutzers
Tankian
myCSharp.de - Member



Dabei seit:
Beiträge: 81

beantworten | zitieren | melden

Wird zwar nicht die Antwort sein, die du hören willst, aber im Prinzip gar nicht.
Alles was du machen kannst, is den Code unlesbar machen,
dazu gibts sogenannte Obfuscator:

Dotfuscator
private Nachricht | Beiträge des Benutzers
f_scheithauer@yahoo.de
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

Danke

beantworten | zitieren | melden

Danke
Kann mir endlich einer das Wasser reichen :-)
private Nachricht | Beiträge des Benutzers
Rene Paschold
myCSharp.de - Member

Avatar #avatar-1620.jpg


Dabei seit:
Beiträge: 381
Herkunft: BW->Enzkreis->Straubenhardt

beantworten | zitieren | melden

Tja leider hat Tankian Recht. Allerdings sehe ich das nicht als großes Problem. Java macht es schon seit vielen Jahren so, dort gibt es auch einen Zwischencode.

Es gibt allerdings neben den Dotfuscator noch einige weitere Tools um IL Code zu verschleiern, müsstest du mal bei Google schaun.

Wenn du sensiblen Code, sprich Daten die nicht jeder lesen darf im Assembly hast dann solltest du mit unmanaged Code arbeiten, sprich COM. Eine andere Möglichkeit gibt es bis dato noch nicht.
Mit freundlichen Grüßen

René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect

-------------------------------------------------------
.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/
private Nachricht | Beiträge des Benutzers
hauptmann
myCSharp.de - Member



Dabei seit:
Beiträge: 704
Herkunft: Österreich/Kärnten

beantworten | zitieren | melden

Und wenn man gewisse Teile als Webservice implementiert und diese dann von seinem Programm aus aufruft? An den Code vom Webservice kommt man ja nicht so einfach ran.

Vorrausetzung ist halt Internetverbindung und ein eigener Server.
private Nachricht | Beiträge des Benutzers
Rene Paschold
myCSharp.de - Member

Avatar #avatar-1620.jpg


Dabei seit:
Beiträge: 381
Herkunft: BW->Enzkreis->Straubenhardt

beantworten | zitieren | melden

Klar das würde auch gehen. An die Daten kommt man nur dann ran wenn die entsprechenden Zugangsdaten vorhanden sind.

Denn Webservice kann man ja auch schützen sodas man für den Zugriff wiederrum Daten benötigt und dann sollte es klappen.

Aber wie du schon sagst dazu ist eine Inet Verbindung Vorrausetzung.
Mit freundlichen Grüßen

René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect

-------------------------------------------------------
.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/
private Nachricht | Beiträge des Benutzers
Quallo
myCSharp.de - Member



Dabei seit:
Beiträge: 992
Herkunft: Nähe Bremen

beantworten | zitieren | melden

Lohnt sich der Einsatz eines Dotfuscators überhaupt?

Also den Code kann man sicherlich immer noch lesen. Zumindest unterstelle ich jemandem, der den Reflector benutzt auch die Fähigkeit sich nicht durch ein paar Gotos oder Überladungen/Umbennenungen verwirren zu lassen.

Außerdem hatte ich schon des öfteren Probleme, dass der Code nicht mehr ganz sauber lief, wenn man den Dotfuscator drüber hoppeln lies.

Gibt es Methoden den Code gegen Veränderung zu schützen? Automatische Datums- oder Checksummen-Überprüfung?

Grüße Christoph
private Nachricht | Beiträge des Benutzers
yahoo
myCSharp.de - Member



Dabei seit:
Beiträge: 220
Herkunft: 127.0.0.1

beantworten | zitieren | melden

Hallo!

Das ist eine sehr interessante Frage, aber ich denke absulute Sicherheit gibt es nicht. Selbst wenn du theoretisch einen HashWert deiner Datei generierst, und den Wert beim Programmstart abfrägst, bist du nicht sicher. Ein "Cracker" kann auch deinen gespeicherten HashWert verändern.

Man kann aber solchen Leuten das Leben schwer machen, da gab es einen Artikel auf safe.de (Die ShareWare-Vereinigung). Leider hab ich den Link verschmissen...

Aber wie gesagt, sicher kann man nie sein...

Just my 2 Cent,

Yahoo
private Nachricht | Beiträge des Benutzers
S.H.-Teichhof
myCSharp.de - Member

Avatar #avatar-2460.jpg


Dabei seit:
Beiträge: 1.549
Herkunft: Sindringen

beantworten | zitieren | melden

Genau sicher kann man nie sein. aber mit jeder hürde die man einbaut wird das Nivo das der "Hacker" haben muss um an deine Orginal daten zu kommen höher und irgendwann lohnt es für gewönlich nichtmehr also wen du z.B Prüfsdummen über das Erstellungsdatum der Datei erstelst dazu noch ein Dotfuscator und eine Prüfsumme auf die Datei selbst.

Fals das nicht reicht Teile in einen Webservice auslagern da ist der Code dann so sicher wie es nur geht
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
private Nachricht | Beiträge des Benutzers
Quallo
myCSharp.de - Member



Dabei seit:
Beiträge: 992
Herkunft: Nähe Bremen

beantworten | zitieren | melden

Erklär das mit dem Webservice mal ein paar zig-tausend Anwendern des Produktes...
sie müssen leider immer mit dem Internet verbunden sein, weil wir ab sofort eine neue Technologie einsetzen...
Das wäre jawohl der Super-Gau!

Gibt es in .Net nichts eingebautes um sicherzustellen, dass einmal verteilte Anwendungen/Assemblies/DLLs nicht mehr verändert werden?
private Nachricht | Beiträge des Benutzers
S.H.-Teichhof
myCSharp.de - Member

Avatar #avatar-2460.jpg


Dabei seit:
Beiträge: 1.549
Herkunft: Sindringen

beantworten | zitieren | melden

Zitat
Erklär das mit dem Webservice mal ein paar zig-tausend Anwendern des Produktes...
sie müssen leider immer mit dem Internet verbunden sein, weil wir ab sofort eine neue Technologie einsetzen...
Das wäre jawohl der Super-Gau!

Bei Steam und HL2 Gehts doch auch

Nein im ernst verstehe ich schon was du meinst aber es kommt immer auf die anwendumg an.
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
private Nachricht | Beiträge des Benutzers
Quallo
myCSharp.de - Member



Dabei seit:
Beiträge: 992
Herkunft: Nähe Bremen

beantworten | zitieren | melden

Hat schon jemand Erfahrungen mit anderen Obfuscatorn gemacht.

Ich denke, dass dies eine ganze wichtige strategische Frage bei der Entwicklung und Verteilung von .Net-Programmen ist.

Grüße Christoph
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4.506
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

Hallo alle C#-ler!

Nach etwas längerer Abstinenz melde ich mich zurück, aber das tut hier erstmal nix zur Sache!

Ich habe eine Frage genau zu diesem Thema, vielleicht führt das etwas weiter...

Von .NET wird zunächst einmal IL erzeugt, das ist ja klar. Aber wenn ich die Exe, die IL enthält ausführe, dann wird sie doch zur Laufzeit in echte Maschinensprache übersetzt, oder nicht?

Der Prozessor versteht doch nur 0 und 1! Gibt es keine Möglichkeit, das übersetzte Programm nicht auf den Prozessor zu geben, sondern umzuleiten und dann in ein eigenes File zu schreiben?

Dann hätte man doch wieder eine echte EXE, oder?

Klar gehen dann auch alle Vorteile die IL bietet verloren, aber für sensible Daten wäre das doch ein Lösungsanstz!

Vielleicht kennt sich jemand in diesem Bereich aus, der dazu etwas sagen könnte...

Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
private Nachricht | Beiträge des Benutzers
Quallo
myCSharp.de - Member



Dabei seit:
Beiträge: 992
Herkunft: Nähe Bremen

beantworten | zitieren | melden

Eigentlich ja. Aber du vergisst, dass der IL-Compiler(von IL zu Maschinensprache) auch Typ-Sicherheit, Sicherheitsbestimmungen usw. prüft. Außerdem sind einige dynamische Dinge nur in so einer Form zu lösen und ganz schwer in Maschinensprache.

Ich denke auch, dass man es vielleicht irgendwie einbauen könnte, aber das Framework wird man aufgrund der Klassen trotzdem brauchen, oder soll man die statisch linken?

Grüße Christoph

P.S.: Dotfuscator 3.0 ist draußen!
private Nachricht | Beiträge des Benutzers
Timur Zanagar
myCSharp.de - Member

Avatar #avatar-3412.jpg


Dabei seit:
Beiträge: 1.457

beantworten | zitieren | melden

Ich verfolge diesen Thread schon seit Anfang an und habe bis heute nicht verstanden, warum der Protector von Remotesoft nicht erwähnt wird. Dieser soll laut Remotesoft eine bessere Sicherheit bieten als Obfuscator.
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8.746
Herkunft: Berlin

beantworten | zitieren | melden

Zu RemoteSoft:

A disadvantage of their solution is also that the solution is: *BeginQuote* This method is not compatible
across .NET Framework Service packs. For example EXE files created using .NET
Framework Service Initial Release do not work with installations of Service
Pack 2. Because many users may
have different installations of the framework installed, this solution
becomes useful only in very controlled environments - but usually in these
environments protection is not strongly needed. *EndQuote*
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8.746
Herkunft: Berlin

beantworten | zitieren | melden

Eine wirklich GUTE Lösung kann eigentlich nur von MS kommen. Es muss möglich sein, einen Custom-Loader im System zu installieren, der das Programm lädt und entschlüsselt. Momentan bauen die Lösungen (RemoteSoft) ja ein normales Win32-EXE, worin der IL-Code verschlüsselt abgelegt ist. Schöner wäre, den Code bereits verschlüsselt auszuliefern ohne auf Win32-EXE zurückgreifen zu müssen.
private Nachricht | Beiträge des Benutzers
Efftee
myCSharp.de - Member



Dabei seit:
Beiträge: 100
Herkunft: Oldenburg

beantworten | zitieren | melden

Wie weiter oben schon gesagt, gibt es (lokal) keine andere (sinnvolle) Möglichkeit als mittels der genannten Programme das direkte lesen zu erschweren. Selbst wenn du kritisches als COM oder über ne normale DLL machst, hast du keine absolute Sicherheit. Das geht nicht.

Das einzige was du erreichst, ist die Entwickungskosten hochzutreiben, und (was noch schlimmer ist) Frust oder Ablehnung beim Anwender zu erzeugen, indem du z.B. permanente Internetverbindungen verlangst, oder das deinstallieren von anderen Tools. (Siehe Starforce-Kopierschutz, oder Halflife 2)

Das es definitiv nicht geht, siehst du daran, das seit dem C64er solche Methoden immer neu erfunden, und Spiele trotzdem gecrackt werden. Das Ergebnis ist bei mir z.B. das ich HL2 nicht kaufen werde, genausowenig wie Programme die verlangen das ich z.B. DeamonTools deinstalliere.
--
Man kann Scheisse nicht polieren!
private Nachricht | Beiträge des Benutzers
Timur Zanagar
myCSharp.de - Member

Avatar #avatar-3412.jpg


Dabei seit:
Beiträge: 1.457

beantworten | zitieren | melden

Hallo an alle,

ich wollte schauen wie die .NET Anwendungen da draußen geschützt sind und hab mit dem Reflector einige Anwendungen geöffnet.

Eine Anwendung konnte der Reflector nicht disassemblieren und auch keine brauchbaren Informationen rauslesen.

Nun würde ich gerne wissen welche Schutzmechanismen dahinterstecken, um auch meine Anwendungen damit zu schützen. Es handelt sich um die Freeware Anwendung nLite.
private Nachricht | Beiträge des Benutzers
Timur Zanagar
myCSharp.de - Member

Avatar #avatar-3412.jpg


Dabei seit:
Beiträge: 1.457

beantworten | zitieren | melden

Hallo an alle,

Da dieses Thema im Moment sehr spannend für mich geworden ist, würde ich gerne wissen ob sich in diesem Umfeld etwas getan hat.

Gibt es gute Software, mit der ich Anwendungen schützen kann?
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8.746
Herkunft: Berlin

beantworten | zitieren | melden

Eine Möglichkeit ist immer, die DLL zu verschlüsseln, zur Laufzeit zu entschlüsseln und in die AppDomain zu laden.
private Nachricht | Beiträge des Benutzers
egrath
myCSharp.de - Member

Avatar #avatar-2119.jpg


Dabei seit:
Beiträge: 871
Herkunft: Österreich / Steyr

beantworten | zitieren | melden

Hallo,

was ich vor ein paar Tagen gefunden habe: http://madebits.com/netz/index.php

Es handelt sich dabei um ein Tool welches .NET Assemblys komprimiert und einen eigenen (nicht nativen, sondern in .NET geschriebenen) Loader vor den komprimierten IL Code stellt. Da das Tool als Open Source vorhanden ist, wäre es mit ein wenig aufwand sicherlich auch möglich den komprimierten IL Code auch noch zu verschlüsseln (wobei dann die Frage bleibt wohin mit dem Schlüssel; Eventuell Asymetrische Verschlüsslung und die Lizenznummer als Key benutzen?)

Aber gegen Otto-Normal Reflection Benutzer ist es in der derzeitigen Version schon ziemlich effektiv da man ja nur den Code vom Loader zu sehen bekommen und sich etwas basteln müsste um den komprimierten MSIL Code aus der Assembly rauszubekommen.

Grüsse, Egon
private Nachricht | Beiträge des Benutzers
tomaten
myCSharp.de - Member

Avatar #avatar-1835.jpg


Dabei seit:
Beiträge: 402
Herkunft: Stolberg (Rhld.)

beantworten | zitieren | melden

Hallo, ich habe auch mal Xenocode getestet, ebenso wie Dotfuscator. Die Community-Editionen beider sind ja eine echt spassige Sache, aber leider bietet keine von beiden String-Verschlüsselung. Dazu braucht man immer die Pro Version. Die kostet aber teilweise mehr als die IDE! 8o Ich muss sowieso feststellen, dass bei .NET irgendwie alles teuerer geworden ist, als zu Win32 Zeiten, seien es Klassenbibliotheken oder Tools.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
private Nachricht | Beiträge des Benutzers
tomaten
myCSharp.de - Member

Avatar #avatar-1835.jpg


Dabei seit:
Beiträge: 402
Herkunft: Stolberg (Rhld.)

beantworten | zitieren | melden

So habe mal Xenocode Pro getestet. Das Teil taugt schon gut was. Es verändert auch die gesamte Ablaufsteuerung und verschlüsselt strings & Co. Ausserdem kann es im "Agressivmode" alles unleserlich machen, incl. Functionsnamen & Co. Im "Conservativemode" für Shared Assemblys kann man zwar noch die Funktionsnamen erkennen, aber ich habe selbst in den allereinfachsten meiner Funktionen nichts mehr erkannt. Dafür wird die Assembly ein wenig grösser. Zweiter Vorteil ist, dass Xenocode eine Single-Assembly/Exe Funktion mitbringt. Die kann sogar das .NET Framework mit einbinden. Naja, schaut mal selber, ich hab es bestellt, denn auch der Preis ist, gegenüber DotFuscator, sehr gut (399$)!
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1.047

beantworten | zitieren | melden

dieser xenocode fox hat ja verblüffende ähnlichkeit mit reflector o.O
arbeitet lutz roeder mit denen zusammen?

die preise sind wirklich recht happig...
bei .net kann man eben ne menge geld machen durch schutz vor disassembler und custom controls
private Nachricht | Beiträge des Benutzers
tomaten
myCSharp.de - Member

Avatar #avatar-1835.jpg


Dabei seit:
Beiträge: 402
Herkunft: Stolberg (Rhld.)

beantworten | zitieren | melden

Naja, der Reflector in VS 2005 und Delphi 2005+ sieht auch nicht anders aus. Bei Xenocode meinte ich natürlich den "PostBuild".
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
private Nachricht | Beiträge des Benutzers
nic4x4
myCSharp.de - Member

Avatar #avatar-1983.jpg


Dabei seit:
Beiträge: 191
Herkunft: NRW

beantworten | zitieren | melden

Hallo,
ich wollte mal fragen, ob es irgendwelche Freeware Obfuscatoren gibt, die wenigstens die Funktionsname (Variablen usw) umbenennen.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo nic4x4,

siehe FAQ: .net Assembly vor Disassembling schützen (die letzten beiden Links).

herbivore
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1.047

beantworten | zitieren | melden

sollten wir den thread dann nicht mal schließen? der link zur faq ist doch ein guter abschluß
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo sheitman,

naja, wenn es nichts mehr zu dem Thema zu sagen gibt, wird es keine weiteren Beiträge geben. Quasi eine Selbstregulierung, ohne das man das Thema zu schließen braucht. Schließen braucht man ja nur dann, wenn (weitere) störende Beiträge zu erwarten sind. Die Befürchtung habe ich nicht. Außerdem können sich zu dem Thema ja neue Aspekte ergeben, z.B. weil neue Obfuscatoren oder Obfuscator-Techniken entwickelt wurden/werden. Dann wäre es sogar störend, wenn der Thread geschlossen wäre.

herbivore
private Nachricht | Beiträge des Benutzers