Hallo Lucian,
herzlich willkommen hier im Forum!!!
Hmm - eine ideale Lösung wird es wohl nie geben.
Das Verschlüsseln wird die einzige Möglichkeit sein, die dir bleibt. Und die lässt sich mit .net internen Mitteln sehr gut umsetzen.
Weiter Anregungen findest du auch in [FAQ] DB-Password/Kennwort/Connection-String sicher speichern, [FAQ] .net Assembly vor Disassembling schützen (Obfuscator), Code der Schlüsselberechnung in c# Programm verschleiern sowie in Wie verhindere ich, dass aus einer obfuscierten Anwendung Werte ausgelesen werden können? - letzendlich ist es ja egal, wo du zusätzliche Resource gespeichert ist.
Hi,
also wie gesagt mit dem Obfuscator habe ich mich schon beschäftigt.
Mein Horrorszenario wäre halt das jemand meine Exe Refactored, dann die Verschlüsselung rausnimmt, und die Daten an einen anderen Rechner sendet.
Ist sowas konkret möglich?
Falls ja, kann ich mich dafür irgendwie schützen?
Wenn das nicht möglich ist, dann denke ich reicht meine AES verschlüsselung aus...
Viele Grüße
Tobias
Hallo B A L U,
das Thema hatten wir öfters im Form. Möchtest du deine Anwendung schützen hilft in erster Linie ein Obfuscator, jedoch sind gute Obfuscatoren recht teuer und kostenlose haben nicht sehr großen Schutz.
Aber denk daran, dass wenn du einen Schüssel bzw. einen String hast diesen zu verschlüsseln, da man diese auch im Arbeitsspeicher auslesen kann.
Ansonsten findest du hier: [FAQ] .net Assembly vor Disassembling schützen (Obfuscator) weitere Informationen. Die Forensuche sollte dir auch weiterhelfen. 😉
zero_x
such mal nach obfuscator, das wird dir weiterhelfen 😉
Hallo und einen Guten Abend.
Kurz zu meinem Problem: Ich schreibe gerade an einem Programm, mit dem Kunden Dateien zu uns schicken können. Die Dateien werden vor dem Versenden verschlüsselt. Der Schlüssel wird aus gewissen persönlichen Daten gebildet.
Jetzt könnte man doch aber theoretisch mit einem Reflector rangehen, und schauen wie ich den Schlüssel bilde. Habe jetzt schon ziemlich viel gelesen über Obfuscator und der gleichen gelesen, aber immernoch ein paar Fragen.
Was könnte ich den noch tun, um zu verhinden, das jemand die Schlüsselbildung herausbekommt?
Eine Extra-DLL in C++ kann ich leider nicht machen, da die Vorgabe ist, das nur eine EXE rauskommen darf.
Oder bin ich einfach zu Paranoid???
Bin gespannt auf eure Antworten 🙂
Wünsch euch einen schönen Abend,
Tobias
Hallo John Sanson,
schau mal hier: [FAQ] .net Assembly vor Disassembling schützen (Obfuscator) .
zero_x
Hi Leute,
ich bin mittlerweile an einem Punkt wo ich gedenke meine Anwendungen per Obfuscator zu schützen.
Nun habe ich einige Tools dazu ausprobiert. Xenocode Postbuild 2008 war dabei unschlagbar, leider auch unschlagbar teuer.
Mit dem .Net Reactor kann ich zumindest Teile meiner Anwendung (verschiedene Assemblies) so schützen wie ich es möchte: ILDASM suspress, Renammig, String-encryption usw.
Wenn ich versuche die ganze Anwendung zu schützen, lässt sie sich nicht mehr ausführen.
Nun zu meinem Problem. Was würde mir diese ganze Sache bringen, wenn man die, zwar verschlüsselten, Assemblies einfach in einem anderen Projekt einbinden kann, dann auf die Funktionen zugreifen kann und man dann die Werte hat, die ich extra im Code verschlüsselt habe?
Nichts, oder?
Dann habe ich überlegt einen code den Assemblies zuzuweisen und wenn das nicht geschieht geben die Funktionen kein Rückgabewert.
Tolle Überlegung aber meine Hauptanwendung ist ja ungeschützt also kann man sich den benötigten Code ja einfach mit ILDASM oder sogar im Notepad heraussuchen.
Also ihr seht schon das Problem. Ich stehe irgendwie auf dem Schlauch. Könntet ihr mir raten was ihr nun tun würdet.
Grüße
Chris
Hallo ihr Beiden,
da es sich um das Thema Sicherheit handelt möchte ich noch gerne auf folgende Links verweisen:* http://www.hackerboard.de/thread.php?threadid=37963
zero_x
du könntest alles internal innerhalb der assemblie machen und dann nur deinen assemblies den zugriff explizit erlauben.
natürlich ist das nur ein rudimentärer schutz aber da das internal ist, macht ein obfuscator daraus hackfleisch^^
Die bisschen fetzen Code, die einigermaßen sichtbar sind, bringen ein da nicht weiter 😉. Ich habe das Teil mir mal mehrere Stunden angeschaut, und bin in keinster weise schlau draus geworden. Und bei den extrem vielen goto Anweisungen, dreht man eh schnell durch. Wobei die 100%ig durch den Obfuscator kommen...
Hallo burnig snow!
Weil meine aktuelle Lösung perfekt funktioniert und ich kein Problem darin sehe.
Es handelt sich nur um den Code des Klassenbaums und ein paar kleiner Funktionen. Außerdem wird der Code wird verschlüsselt ausgeliefert.
Da ich ansonsten das Original-Assembly im Nachhinein erweitern müsste kann ich es so oder so nicht den durch den Obfuscator jagen....
Und ob nun Decompilen oder Source entschlüsseln - Wer Freude dran hat, hat dann meinen Klassenbaum - Wünsche viel Freude dran... 🙂
Außerdem spare ich mir eine mögliche Probleme...
lg
Nö, der dekompiliert alle .NET Assemblies, die du hin zum Fressen hinwirfst 🙂
Allerdings sind zu 90% alle Komponenten von Drittanbietern über einen Obfuscator gejagt, das man meist mit den Code nichts anfangen kann, oder man sehr viel Zeit investieren muss.
Danke dir, hab eben selbst nach Obfuscator gesucht. Wird mir einiges aufgezeigt, da hab ich erstma was zu tun. Denke aber, dass es in die richtung geht, in die ich wollte.
Danke dir 🙂
Grüße
obfuscator sollten dir denke ich helfen oder direkt nacht dotfuscator suchen
Dotfuscator schützt und verbessert .NET Code
Dotfuscator verhindert das Decompilieren von .NET Code und schützt so Ihr geistiges Eigentum.
Dotfuscator reduziert außerdem die Größe Ihrer .NET Programme und optimiert die Performance.
Hallo ingemar,
im Grunde kann man sich nicht nie ganz davor schützen. Es gibt immer einen Weg den Quellcode wiederherzustellen. Ob du nun den Code komplizierter mittels Settern und Gettern machst bleibt dir überlassen, jedoch ist es kein guter Programmierstil, wenn du alles kompliziert programmierst.
Es gibt eine Reihe von Möglichkeiten um sich davor zu schützen, dazu gehört auch das Packing der Anwendungen und weiteres. Auf dieses Thema möchte ich hier nicht eingehen. Falls es sich interessiert gibt es hier ein paar weitere Threads, wo du ein wenig nachlesen kanns: [Artikel] .NET Reflector [FAQ] .net Assembly vor Disassembling schützen (Obfuscator) http://www.hackerboard.de/thread.php?threadid=37963 .
Falls du ein sehr großes Projekt programmierst eignet sich davor C# bzw. .NET wunderbar, leider hat es den Nachteil, dass es unsicher ist(siehe .NET Reflector). Ansonsten kannst du in C++ programmieren, da es sicherer ist als C#/.NET.
Wenn du nun eine Anwendung programmiert hast kann man auch einfach unsinnigen Code hinzufügen. Es hört sich im ersten Moment dumm an, aber es hat den Vorteil den Cracker die Laune zu verderben. Auch direkt Abfragen mit if
würde ich meiden, wie beispielsweise bei Verschlüsselungen, da man diese recht einfach auslesen kann.
Es ist nun eine heikle Sache was man nun machen soll. Ich habe mich auch eine Weile mit diesen Problem beschäftigt. Einen wirklich 100% Schutz ist nicht möglich. Ich möchte dich nicht davon abhalten und meinen, dass alles unsicher ist! Soweit meine Worte.
zero_x
danke für eure antworten.
meiner getter u. setter führen großteils keinen zusätzlichen code aus. mir geht es eigentlich um die verschleierung bezgl. obfuscator. die properties bleiben lesbar. die privaten membervar. sind aber verschleiert.
hab schon viel über obfuscatoren gelesen. ob sie wirklich was bringen, sei dahin gestellt...
lg ingemar
Hallo 1nf1n1ty,
siehe [FAQ] .net Assembly vor Disassembling schützen (Obfuscator). Da ist alles ausführlich besprochen.
herbivore
Hi
Das hatten wir zwar schon mal aber:
Zurückübersetzen oder Decompilen ist nur schwer oder garnicht möglich. Bei .NET Bibliotheken ist es aber schon leichter möglich (Stichwort Reflector) Du kannst aber auch mit Einem Assembler DLLs oder EXEs Disassemblen und so einsehen (So werden z.B. Cracks gemacht). Wenn du deinen Code schützen willst such mal im Forum oder auf google nach "Obfuscator". Da solltest du genug finden
mfg
Sweet
Hallo egrath,
einige weitere Informationen gibt es in der FAQ: [FAQ] .net Assembly vor Disassembling schützen (Obfuscator) . Ansonsten gibt es hier noch einige Informationen hier: http://www.hackerboard.de/thread.php?threadid=37963
zero_x
Salute Scarecraft
Schaust du per Suche, bspw.:
Gruss Peter
Welchen obfuscator würdet ihr mir empfehlen?
Und ich kann es bei Vista nichmal starten??
.exe entpackt, gestartet, und schon kommt J10 DVD-Man funktioniert nicht mehr, weder eine Fehlermeldung noch irgendwas anderes.
Ich sag bescheid wenn ich den Fehler gefunden hab. Zum Glück hast du momentan den Obfuscator noch nicht benutzt 😛
ich glaube du solltest bei deinen release-versionen deinen code mal durch einen obfuscator laufen lassen.
übrigens ist deine "Spielen(...)" methode extrem lang und hat einige redundante abschnitte. und Application.DoEvents() als nachrichtenpumpe zu verwendenist auch keine gute kösung. besser ist da Application.Run(). das nimmt viel rechenlast weg...
Ich könnte auch einfach eine bool Varriable einbauen aber ich möcht halt 100% tig sicher gehen dass das Prog sauber beenet wird und es keine möglichkeit gibt das beenden aufzuhalten
um es sauber zu beenden ist die bool-variante die beste. wenn du nicht willst das deine anwendung auch mit großen mühen gehackt wird dann verwende einen obfuscator oder andere entsprechende tools. wenn selbst das zu wenig ist musst du es unmanaged machen.
aber im ernst... ein environment.exit oder ähnliches finde ich schneller und beseitige es wenn ich es möchte, als eine der möglichen unzähligen variablen zu verfolgen....
das hängt von der programmierung ab. wenn du einen splashscreen in der main hast, und direkt dannach ein if hast wo die gültigkeit (lizenskey) geprüft wird (und nur dort) und dann der normale applikationsstart, dann wird dir der beste obfuscator nichts bringen denn das teil knackt man in 10 minuten....
ein gutes beispiel wie normale leute versuchen anwendungen zu knacken: HackMe
das sind allerdings eher unerfahrene cracker. wenn jemand schon etliche software gecknackt hat, dann wird er das bedeutend schneller machen.
[EDIT]Abgeteilt von Suche Freeware Obfuscator[EDIT]
ich hab diesen phoenix protector mal getestet, und der is wirklich nett.
könnte mir mal jemand sagen wie lange ein Profi für ein 10.000 zeilen project braucht, wenn es damit gesichert wurde?
nun mich persönlich schreckt das bit-rumschieben ab. ich habe keine zeit und keine gedult mich mit bitpositionen und bitwerten rumzuschlagen. für so einen quelltext braucht man keinen obfuscator mehr. wenn es nicht in ein bis zwei stunden lösbar ist, dann ist es für die meisten zu schwer und für die anderen zu aufwendig. (meiner meinung nach)
Hallo Bork,
du hast im Prinzip ein analoges Problem zu [FAQ] DB-Password/Kennwort/Connection-String sicher speichern . Das geht auch nicht.
Warum verwendet dein Freund nicht einfach einen der vorhandenen Obfuscatoren? Siehe auch [FAQ] .net Assembly vor Disassembling schützen (Obfuscator)
herbivore
Hi,
ich habe an dieser Stelle einen Freeware Obfuscator gepostet. Was haltet ihr von dem Tool?
Ich habe folgendes getestet.
Mehrere dll´s mit den standard Einstellungen durch das Tool geschleust und auf Funktionalität getestet. --> Lief 😉
Mit dem Reflektor die Dll´s angeschaut. --> Bin auf mehrere Fehlermeldungen gelaufen und konnte keinen richtigen Nährwet aus den Informationen ziehen.
Mit einer Trial Version von Spice auf die Bibliotheken geschaut. --> Jetzt kann ich nicht sagen, ob es daran lag, dass ich nur eine Trial Version hatte aber ich konnte auch nicht wirklich viel aus den Dll´s erkennen.
Ich finde den Schutz nach den Tests ausreichend aber mich würde interessieren, wo ihr eventuelle Schwachstellen seht.
Grüße, maYer
Hi,
ich habe seit kurzem einen Freeware Obfuscator gefunden.
Ich habe ihn getestet und bin sehr zufrieden mit ihm.
Grüße,
maYer
wie ich schrieb: obfuscator
unter anderem gibt es noch eine reihe anderer tools die .net anwendungen schützen... siehe:
[FAQ] .net Assembly vor Disassembling schützen
wenn du nur einen rudimentären schutz suchst dann kann dir ein obfuscator helfen, ansonsten solltest du es vermeiden passwörter in .net assemblies zu hinterlegen.
Salute Golo
ich hab mal versucht, mit Reflector reinzugucken, aber das sieht mir stark nach Obfuscator aus 😦
Jup, zumindest die Strings und auch Variablennamen sind nicht mehr 100% erkennbar.
Wenn du eh nur ein Support für diese Library machen möchtest, kannst du sie ja mal anschreiben, ob du den Quellcode bekommst?
Gruss Peter
Hi,
ich hab mal versucht, mit Reflector reinzugucken, aber das sieht mir stark nach Obfuscator aus 😦
Viele Grüße,
Golo
Keine Sorge, ich habe dich nicht falsch verstanden
und ich habe es mir grad im reflector angeschaut.... omg... unlesbar
Ja, ist schon ziemlich verwirrend. Jetzt nochmal mit ein Obfuscator rüber und kein Mensch blickt da mehr durch 🙂
Sieht aber nicht so "krank" aus 😉.
Und schau dir das Ergebnis mal im Reflector an, da braucht man kein Obfuscator mehr 😁
ich persönlich finde 99 bottles of beer umsetzungen besser, als das hello world, da man auch schleifenkonstrukte der einzelnen sprachen begutachten kann. aber irgendwo ist das schon sehr sehr interessant, wieviele verschiedene sprachen es gibt. vorallem die esoterischen wie brainfuck sind doch recht imposant. dagegen schaut jeder obfuscator alt aus ^^
Wer Passwörter etc. als Klartext in einer Anwendung deklariert ist selbst Schuld, wenn diese dann zu Mißbrauchszwecken benutzt werden. Also ist die Stringverschlüsselung nicht sonderlich relevant.
Ein Obfuscator hat, wenn ich das Prinzip richtig verstanden habe, die primäre Aufgabe den Programmablauf für den Menschen schwer nachvollziehbar zu machen, dadurch werden Funktions- und Variablennamen durch einen Buchstaben- Zahlensalat ersetzt, was die Funktionalität des Programmes aber nicht einschränkt.
Der Dotfuscator kann in der Com.-Edition nur das Verschleiern der Funtionnamen und der Variablen, für alles andere wie Stringverschlüsselung etc. muss man Bezahlen 🙂
Welcher Obfuscator? Habe kein solches Programm benutzt. 😁
für mich zu viel kopfrechnen bedeuten
Zu den Zahlen im Programm: bei den meisten bringt es wohl eher was, die in binär umzurechnen.
Ansonsten: alle Hilfsmittel, die den Code nicht ausführen sind natürlich erlaubt.
Da hat der Obfuscator ja fast ganze arbeit geleistet 😁
nein, wenn du die zugangsdaten harcodiert hast, da diese im klartext stehen. obfuscator verändert methodennamen und variablennamen usw. nicht jedoch konstanten.
ja wenn du sie verschlüsselt hinterlegt hast.
Hallo,
also:
ich werde in meiner C# applikation sftp fuer den zugang verwenden damit mit dem sniffer nichts gelesen werden kann und lokal den obfuscator,
damit die ftp zugansdaten nicht ausgelesen werden koennen
damit sind die ftp daten meiner kleinen
applikation relativ sicher, oder?
gruss,
mirza
Hallo,
meiner Meinung nach ist es keine gute Idee Connectionstrings per Obfuscator zu schützen. Mit einem Netzwerksniffer könnte man die Daten immer noch aufzeichnen.
Gruss
tscherno
Ein obfuscator verschleiert keine Daten, sondern Code.
Kostenlos gibt es da auch nichts gutes, evtl. NetZ, das aber eher als Exe-Packer
gedacht ist.
Die sachen, die wirklich funktionieren kosten alle richtig Geld.
Hallo,
ich habe gerade mit der Trial version des Skater Obfuscators meinen Code verschleiert.
Ok, das ist nur die Trial version aber trotzdem sagen die, dass man damit den Code verschleiern kann. Das habe ich gemacht, und danach wurde mir gesagt das im Code also die Werbung zu Skater eingefuegt wurde, Ok, damit kann ich leben dachte ich mir, doch dannach habe ich Reflector ausprobiert und in der EXE konnte ich alle meinen sensitiven Daten lesen...
Ich habe bisher keinen guten .NET Obfuscator gefunden der kostenlos ist.
Was ist da zu empfehlen?
Gruss,
Mirza
und die ist in c++. aber das spiel an sich .. das ist angeblich in c#.
Hmm, muss ich wohl mal wieder NWN2 installieren und mal nachschauen. Wobei die garantiert nen ziemlich fiesen Obfuscator verwenden...
das ist auch mit c++ nicht möglich
Das sehe ich etwas anders.
Die Basis ist immer C++. Sicherlich müssen bei einer PS3 andere Bibliotheken angesprochen werden als bei z.B. DirectX unter MS. Aber der eigentliche Kern ist immer der gleiche. Die großen Engines bauen ja mittlerweile Wrapper um die eigene Engine. Die Leute, die z.B. die Physik oder KI implementieren, den ist das vollkommen wumpe, ob da nun eine PS3 oder ein PC hintersteckt. Das müssen die Leute klären, die dann den Wrapper um die Engine bauen.
Es gibt doch die UT3 Engine. Die ist für PC, XBOX, PS3. Das sind garantiert nicht drei vollkommen unterschiedliche Sourcen. Das ist ein Kern plus drei Wrapper um den Kern. Sonst würden die sich ja totprogrammieren.
Hallo,
ich hab es noch nicht probiert, aber normalerweise sollte es reichen wenn Du die mit Mono erstellte Assembly unter Windows durch einen Obfuscator jagst. Wenn der keine wirklichen Krummen Sachen mit dem IL macht, dann kommt auch die Mono VM mit dem Code zurecht.
Grüsse,
Egon
/edit: Grad mit dem Dotfuscator bei einem grösseren Projekt versucht. Mit Mono kompilierte Assembly läuft auch nach dem Obfuskieren noch immer tadellos (Hab aber nicht die gesamte Funktionalität der Applikation getestet, sondern nur ob die noch läuft und ein paar kleine Sachen - auf jeden Fall solltest Du die Applikation nach dem Obfuskieren sehr gut testen)
Hallo,
ich hätte eine Frage bezüglich C# Entwicklung mit Mono unter Linux. Rein prinzipiell finde ich das ja ganz gut, leider bin ich nicht in der Lage einen Obfuscator zu finden wie es ihn unter Windows gibt.
Kann mir vielleicht jemand einen Hinweis geben?