Wie kann ich meine .NET-Assemblys vor Dekompilierung schützen?

72

Eines der ersten Dinge, die ich gelernt habe, als ich mit C # angefangen habe, war das Wichtigste. Sie können jede .NET-Assembly mit Reflector oder anderen Tools dekompilieren. Viele Entwickler sind sich dieser Tatsache nicht bewusst und die meisten von ihnen sind schockiert, wenn ich ihnen ihren Quellcode zeige.

Der Schutz vor Dekompilierung ist nach wie vor eine schwierige Aufgabe. Ich bin immer noch auf der Suche nach einem schnellen, einfachen und sicheren Weg, dies zu tun. Ich möchte meinen Code nicht verschleiern, daher lauten meine Methodennamen a, b, c oder so. Reflektor oder andere Tools sollten meine Anwendung überhaupt nicht als .NET-Assembly erkennen können. Ich kenne einige Tools bereits, aber sie sind sehr teuer. Gibt es eine andere Möglichkeit, meine Anwendungen zu schützen?

BEARBEITEN:

Der Grund für meine Frage ist nicht, Piraterie zu verhindern. Ich möchte nur Konkurrenten davon abhalten, meinen Code zu lesen. Ich weiß, dass sie es tun werden und sie haben es bereits getan. Sie haben es mir sogar gesagt. Vielleicht bin ich ein bisschen paranoid, aber Geschäftskonkurrenten, die meinen Code lesen, geben mir kein gutes Gefühl.

Holli
quelle
9
Wenn der Reflektor nicht erkennen kann, ob es sich bei Ihrer Anwendung um eine .NET-Assembly handelt, wie soll die Anwendung dann versuchen, sie zu laden?
Brian
1
Betreff "Ich möchte meinen Code nicht verschleiern, daher lauten meine Methodennamen a, b, c oder so." Warum nicht? Dies liegt auf der Hand, um es den Wettbewerbern zu erschweren, aus Ihrer Logik einen Sinn zu machen.
ToolmakerSteve
Ja, Verschleierung 100% "funktioniert einfach". Zuerst sollten Sie keine "Geheimnisse" in Ihren Code einfügen, da Dinge, die "einmal im Code gefunden wurden, die Sicherheit gefährden können". Zweitens, haben Sie jemals Code auf GitHub genommen und versucht, ihn wiederzuverwenden? Ich meine, selbst nicht verschleierter Code kann aufgrund verwendeter Paradigmen, Klassenkopplung, verschwommener Klassenverantwortung, Abhängigkeitsfest, Rückruffest und mehr verrückt sein, ihn für andere Zwecke zu verwenden. Das heißt, Ihr verschleierter Code ist absolut sicher, bis wir Roboterprogrammierer in die Lage versetzen, die Programmierlogik zu verstehen und den Code schnell umzuschreiben / umzugestalten, was nicht in Kürze geschieht.
Felype

Antworten:

108

Eine Sache, die Sie beachten sollten, ist, dass Sie dies auf eine Weise tun möchten, die geschäftlich sinnvoll ist. Dazu müssen Sie Ihre Ziele definieren. Also, was genau sind deine Ziele?

Piraterie verhindern? Dieses Ziel ist nicht erreichbar. Sogar nativer Code kann dekompiliert oder geknackt werden. Die Vielzahl der online verfügbaren Waren (auch für Produkte wie Windows und Photoshop) ist ein Beweis dafür, dass ein entschlossener Hacker immer Zugriff haben kann.

Wenn Sie Piraterie nicht verhindern können, wie wäre es dann damit, sie nur zu reduzieren? Auch dies ist falsch. Es ist nur eine Person erforderlich, die Ihren Code knackt, damit er für alle verfügbar ist. Man muss jedes Mal Glück haben. Die Piraten müssen nur einmal Glück haben.

Ich sage Ihnen, das Ziel sollte sein, den Gewinn zu maximieren. Sie scheinen zu glauben, dass es für dieses Unterfangen notwendig ist, die Piraterie zu stoppen. Es ist nicht. Gewinn ist einfach Umsatz minus Kosten. Das Stoppen der Piraterie erhöht die Kosten . Es erfordert Aufwand, was bedeutet, dass irgendwo im Prozess Kosten hinzugefügt werden, und reduziert so diese Seite der Gleichung. Durch den Schutz Ihres Produkts können Sie auch Ihren Umsatz nicht steigern. Ich weiß, dass Sie sich all diese Piraten ansehen und all das Geld sehen, das Sie verdienen könnten, wenn sie stattdessen nur Ihre Lizenzgebühren bezahlen würden, aber die Realität ist, dass dies niemals der Fall sein wirdgeschehen. Es gibt hier eine Übertreibung, aber es gilt im Allgemeinen, dass Piraten, die Ihre Sicherheit nicht knacken können, entweder ein ähnliches Produkt finden, das sie knacken können oder auf das sie verzichten können. Sie werden nie es stattdessen kaufen und damit sie nicht vertreten verlorene Verkäufe.

Darüber hinaus reduziert die Sicherung Ihres Produkts den Umsatz . Dafür gibt es zwei Gründe. Einer ist der kleine Prozentsatz der Kunden, die Probleme mit Ihrer Aktivierung oder Sicherheit haben und sich daher entscheiden, nicht erneut zu kaufen oder ihr Geld zurückzufordern. Der andere ist der kleine Prozentsatz der Leute, die tatsächlich eine Raubkopienversion von Software ausprobieren, um sicherzustellen, dass sie vor dem Kauf funktioniert. Die Einschränkung der Raubkopienverteilung Ihres Produkts ( wenn Sie dies irgendwie schaffen) verhindert, dass diese Personen Ihr Produkt jemals ausprobieren, und wird es daher niemals kaufen. Darüber hinaus kann Piraterie dazu beitragen, dass sich Ihr Produkt einem breiteren Publikum verbreitet und somit mehr Menschen erreicht, die bereit sind, dafür zu zahlen.

Eine bessere Strategie besteht darin, davon auszugehen, dass Ihr Produkt raubkopiert wird, und über Möglichkeiten nachzudenken, wie Sie die Situation nutzen können. Noch ein paar Links zum Thema:
Wie verhindere ich, dass mein Code gestohlen wird?
Sichern einer .NET-Anwendung

Joel Coehoorn
quelle
31
Das Hauptziel ist nicht, Piraterie zu verhindern. Ziel ist es, zu verhindern, dass Konkurrenten meinen Code lesen. Ich weiß, dass sie es tun werden, sie haben es bereits getan.
TalkingCode
15
Wenn das Ihr Ziel ist, reicht ein Verschleierer aus.
Joel Coehoorn
2
Ich würde nicht sagen, dass Piraten nevereine Lizenz kaufen, wenn eine Software nicht knackbar ist. Das stimmt nicht zu 100%. Ich habe Leute gesehen, die es gesagt I'm not gonna buy it that soft/game, can't afford, blah blahund dann gekauft haben, nachdem sie bemerkt haben, dass die geknackte Version veraltet, virenartig ist oder ihnen nicht erlaubt, auf einige Online-Funktionen zuzugreifen.
Tarec
3
Der Schutz Ihres Produkts trägt nicht zur Umsatzsteigerung bei? Wo sind Ihre harten Daten, um diese Behauptung zu stützen? Das war nicht die Erfahrung eines der mir bekannten Softwareverkäufer. Tatsächlich war das Gegenteil bei weitem der Fall. Die Sicherung Ihres Produkts reduziert den Umsatz? Nein, das stimmt einfach nicht mit der Erfahrung der Verkäufer überein, die ich kenne. Ich habe gehört, dass solche Behauptungen viel gemacht wurden, aber ich denke, sie müssen von Leuten gemacht werden, die es nicht in beide Richtungen versucht haben. Entweder das, oder sie befinden sich in ganz anderen Ecken der Branche als die, in denen die Leute, die ich kenne, ihre Waren verkaufen.
Shavais
2
-1 IMHO Keine Antwort auf die Frage. Auch falsch, es sei denn, die Software ist sehr billig - viele Benutzer, wenige Käufer. Der Grund, warum eine teilweise Barriere gegen Piraterie ein Nettogewinn für den Gewinn ist, ist, dass es viele potenzielle Kunden gibt, die sich nicht die Mühe machen, etwas zu kaufen, wenn sie es kostenlos erhalten können, ABER auch zögern, Raubkopien zu installieren (Virenrisiko, Unannehmlichkeiten) von Updates). Nach meiner Erfahrung sind die Leute, die geknackte Software herunterladen, im Allgemeinen keine potenziellen Kunden, da sie bereit sind, dieses Risiko einzugehen, anstatt Geld zu zahlen. Potenzielle Kunden laden die Testversion herunter
ToolmakerSteve
15

Bei der Arbeit hier verwenden wir Dotfuscator von PreEmptive Solutions.

Obwohl es unmöglich ist, .NET-Assemblys zu schützen, macht es 100% Dotfuscator meiner Meinung nach schwierig genug. Ich komme mit vielen Verschleierungstechniken;

Cross Assembly Umbenennen
Umbenennen von Schemata
Umbenennen von Präfixen
Erweiterte Überlastungsinduktion
Inkrementelle Verschleierung
HTML-Umbenennungsbericht
Kontrollfluss
String-Verschlüsselung

Und es stellte sich heraus, dass sie für kleine Unternehmen nicht sehr teuer sind. Sie haben einen Sonderpreis für kleine Unternehmen.

(Nein, ich arbeite nicht für PreEmptive ;-))

Natürlich gibt es Freeware- Alternativen.

Rhapsodie
quelle
2
Ich benutze das auch. Sehr gute Software, obwohl sie (für mich) einige nutzlose Funktionen hat, wie die, die Ihr Programm ablaufen lässt, oder die, die Ihnen Ausnahmen per E-Mail meldet. Aber die Umbenennung und der Logikfluss sind sehr gut und ich sehe keine Möglichkeit für jemanden, Ihren Code nach einem guten Durchlauf durch dieses Programm tatsächlich zu lesen.
TheGateKeeper
13

Hosten Sie Ihren Dienst in einem beliebigen Cloud-Dienstanbieter.

David
quelle
10

So verhindern Sie die Dekompilierung einer C # -Anwendung

Beschreibt ziemlich genau die gesamte Situation.

Irgendwann muss der Code in VM-Bytecode übersetzt werden, und der Benutzer kann dann darauf zugreifen.

Maschinencode ist auch nicht viel anders. Ein guter interaktiver Disassembler / Debugger wie IDA Pro macht nahezu jede native Anwendung transparent. Der Debugger ist intelligent genug, um mithilfe von KI gängige APIs, Compileroptimierungen usw. zu identifizieren. Er ermöglicht es dem Benutzer, Konstrukte höherer Ebenen aus der aus Maschinencode generierten Assembly akribisch neu zu erstellen.

In gewissem Umfang unterstützt IDA Pro auch .Net.

Ehrlich gesagt, nachdem ich einige Jahre an einem Reverse Engineering-Projekt (aus Kompatibilitätsgründen) gearbeitet habe, ist die Hauptsache, die ich aus meiner Erfahrung gezogen habe, dass ich mir wahrscheinlich keine Sorgen darüber machen sollte, dass Leute meinen Code stehlen. Wenn jemand es will, wird es nie sehr schwer sein, es zu bekommen, egal welches Schema ich implementiere.

Kervin
quelle
7
Es ist nur notwendig, das Lesen des Codes schwieriger zu machen als das Schreiben des Codes.
Brian
6

Kein Obsfuscator kann Ihre Anwendung schützen, nicht einmal einer der hier beschriebenen. Siehe diesen Link, es ist ein Deobsfuscator, der fast jeden Obsfuscator da draußen deobsfuscieren kann.

https://github.com/0xd4d/de4dot

Der beste Weg, der Ihnen helfen kann (aber denken Sie daran, dass sie auch keine Vollprofis sind), besteht darin, gemischte Codes zu verwenden, Ihre wichtigen Codes in nicht verwalteter Sprache zu codieren und eine DLL wie in C oder C ++ zu erstellen und sie dann entweder mit Armageddon oder Themida zu schützen. Themida ist nicht für jeden Cracker geeignet, sondern einer der besten Protektoren auf dem Markt. Es kann auch Ihre .NET-Software schützen.

Tejashwi Kalp Taru
quelle
5

Ich weiß, dass Sie nicht verschleiern möchten, aber vielleicht sollten Sie sich dotfuscator ansehen , es wird Ihre kompilierten Baugruppen nehmen und sie für Sie verschleiern. Ich denke, es kann sie sogar verschlüsseln.

Muad'Dib
quelle
3

Wir verwenden {SmartAssembly} für den .NET-Schutz einer verteilten Anwendung auf Unternehmensebene, und es hat für uns hervorragend funktioniert.

Dana Holt
quelle
2

Wenn Sie Ihre App vollständig vor Dekompilierung schützen möchten, schauen Sie sich Aladdins Hasp an. Sie können Ihre Assemblys in eine verschlüsselte Shell einbinden, auf die nur Ihre Anwendung zugreifen kann. Natürlich fragt man sich, wie sie das können, aber es funktioniert. Ich weiß jedoch nicht, ob sie Ihre App vor Laufzeitanhängen / -reflexionen schützen, was Crack.NET kann.

- Bearbeiten Achten Sie auch darauf, als Lösung zu nativem Code zu kompilieren. Es gibt auch Dekompilierer für nativen Code.

Michael Brown
quelle
1

Haben Sie API?

Anstatt zu versuchen, Ihre eine ddl-Datei in einem Ihrer Produkte auf allen Geräten Ihrer Kunden zu schützen, können Sie einen API-Service für Ihre wertvollen Produktfunktionen erstellen. Lassen Sie das tatsächliche Produkt, das auf einem Gerät gespeichert ist, diese API verwenden, um das Produkt so bereitzustellen, wie Sie es möchten.

Ich denke, auf diese Weise sind Sie zu 100% sicher, dass Ihr Code nicht dekompiliert wird, und Sie legen Ihre eigenen Grenzen in Ihrer API fest, damit Entwickler / Hacker Ihre API nicht so verwenden, wie Sie es nicht möchten.

Sicher ist etwas mehr Arbeit, aber am Ende haben Sie die Kontrolle.

CularBytes
quelle
0

Wenn jemand Ihren Code stehlen muss, bedeutet dies wahrscheinlich, dass Ihr Geschäftsmodell nicht funktioniert. Was meine ich damit? Zum Beispiel kaufe ich Ihr Produkt und bitte dann um Unterstützung. Sie sind zu beschäftigt oder glauben, dass meine Anfrage nicht gültig und Zeitverschwendung ist. Ich entschlüssele Ihr Produkt, um mein relatives Geschäft zu unterstützen. Ihr Produkt wird für mich wertvoller und ich priorisiere meine Zeit, um das Geschäftsmodell für die Nutzung Ihres Produkts aufzulösen. Ich kodiere Ihr Produkt neu und benenne es neu. Dann gehe ich raus und verdiene das Geld, das Sie auf dem Tisch liegen lassen möchten. Es gibt Gründe, Code zu schützen, aber höchstwahrscheinlich betrachten Sie das Problem aus der falschen Perspektive. Natürlich bist du. Du bist der "Kodierer" und ich bin der Geschäftsmann. ;-) Prost!

ps. Ich bin auch ein Entwickler. dh "Codierer"

Adam Cox
quelle
2
Es könnte sich um einen Konkurrenten mit einem vorhandenen Produkt handeln, der versucht, Ihre Funktionen zu seinem Produkt hinzuzufügen.
Hypehuman
0

Ich weiß, dass dies alt ist, aber Themida ist die fortschrittlichste Anti-Cracking-Software, die ich je verwendet habe.
Es ist jedoch nicht kostenlos.

cagri
quelle
0

Neben den hier aufgeführten Produkten von Drittanbietern gibt es noch eines: NetLib Encryptionizer. Es funktioniert jedoch anders als die Verschleierer. Obfuscators modifizieren die Baugruppe selbst mit einer eingebauten Deobfuscation "Engine". Encryptionizer verschlüsselt die DLLs (verwaltet oder nicht verwaltet) auf Dateiebene. Daher wird die DLL nur zum Verschlüsseln geändert. Die "Engine" ist in diesem Fall ein Kernel-Modus-Treiber, der sich zwischen Ihrer Anwendung und dem Betriebssystem befindet. (Haftungsausschluss: Ich bin von NetLib Security )

Neil Weicher
quelle