Richtig, darum nutzt mal zusätzlich einen Obfuscator . Dennoch verschlüsselt man zusätzlich die strings da etliche Resourcen oder leider auch strings nicht (bzw. nicht bei allen dieser Programme) Obfuscated werden.
Hrm, es gibt glaube ich Obfuscatoren (google: Obfuscator C#) die auch String Verschlüsseln sogar jene in Resourcen. Aber JuyJuka hat recht, das ist die gängigste Methode so etwas zu realisieren.
Hallöchen,
also ich habe mich letzten Monat auch dazu entschieden, den .NET Reactor zu kaufen.
Bisher konnte ich auch nichts daran beklagen - im Gegenteil.
Zu dem Preis findest du solche Software in diesem Segment nicht, und der kann (was ich brauche) alles.
Auch das Visual Studio-Plugin macht es einem einfach, in einem Projekt automatisch mehrere Assemblys zu obfuscaten, zu signieren und und und...
Für die verschiedenen Typen (DLL, Anwendung...) bietet der Reactor auch eigene Konfigurationen an.
Zusätzlich sind noch tools wie
enthalten.
Alles in allem - kann ich von mir behaupten - ein super tool!
Mfg,
Daniel
Hallo liebe Community,
Ich verwende seit ein paar Tagen den Skater .NET Obfuscator.
Ich habe in C# eine DLL geschrieben und möchte das diese auch andere Entwickler in anderen Sprachen benutzen können.
Nun habe ich meine DLL aber obfuscated da ich nicht möchte das jemand meinen code auslesen kann.
Nun möchte ich also das diese DLL per DllImport oder was auch immer in anderen Sprachen benutzt werden kann, was muss ich tuhen um das zu ermöglichen, ist es überhaupt möglich mit Obfuscierten Libarys?
mfg Kalle
Hallo,
darf ich hier nochmal auf die Suchfunktion oder die FAQ verweisen🤔.NET Assembly vor Disassemblern schützen
Dein Aspose-Obfuscator scheint mit .net 2.0 nicht mehr zu funktionieren.
Gibt es mittlerweile eine kostenlose alternative für VS2005 Express C#?
Hallo,
ich würde es an deiner Stelle so machen.
Mit Sharpziplib und einem bewährtem Verfahren die Dateien ganz normal komprimieren, sprich z.B. eine normale .zip Datei herstellen (die **nicht **auf der Festplatte zwischen gespeichert wird).
Dann per Rijndael und festem Passwort verschlüsseln und auf der Festplatte abspeichern, sowie ggf. einen Klartextheader an den Anfang der Datei einfügen.
Damit man solch eine Datei mit einem anderem Prog. öffnen kann, bräuchte man das einprogrammierte Passwort, wenn du dieses evt. noch etwas verschleierst (+obfuscator) wird sich vermutlich keiner die Mühe machen, dass Passwort zu ermitteln um dann selber ein Prog. zu schreiben, um solche Dateien zu öffnen.
Naja, ich denke wenn er seinem Programm schon eine SN spendiert dann wir er auch einen obfuscator einsetzen oder einsetzten wollen.
[EDIT]Abgeteilt von Code Obfuscator[/EDIT]
Dotfuscator, der beim VS 2005 dabei ist. Allerdings funktioniert der nicht
Hat jemand mal den Dotfuscator zum laufen gebracht ?
Ich habs mal probiert und folgende Fehlermeldung bekommen :
... System.Drawing.dll nicht gefunden
Dann hab ich mich beim Hersteller registriert und ein Update des Dotfuscators installiert.
Nun erzeugt er eine neue Exe-Datei, nur beim Ausführen kommt folgender Fehler :
Eine nicht behandelte Ausnahme des Typs "System.Resources.MissingManifestResourceException" ist in mscorlib.dll aufgetreten.
Zusätzliche Informationen: Für die angegebene Kultur oder die neutrale Kultur konnten keine Ressourcen gefunden werden. Stellen Sie sicher, dass WindowsApplikation1.Properties.Resources.resources beim Kompilieren richtig in die Assembly WindowsApplikation1 eingebettet wurde, oder dass die erforderlichen Satellitenassemblys geladen werden können und vollständig signiert sind.
Was kann ich machen ? Muss ich einige Resourcen ausschliessen ?
Muss ich die benutzten DLL's mit angeben im Dotfuscator ?
Hinweis : Ich benutze keine Strong Names.
Grüße Bernd
Naja, 33% "A" und 10% "B" ist nicht ganz das, was ich meinte.
Ich hab jetzt nochmal mit dem .NET Reflector in nLite reingeschaut und die ganzen einzelnen Rechtecke (die 100% der Bezeichner ausmachen) rauskopiert, um sie im Hex-Editor anzuschauen. Das Ergebnis hätte simpler nicht sein können: Die Bezeichner erhalten ASCII-Werte ab 1 beginnent, also heißt der erste Namespace 0x01, der nächste heißt 0x02, usw. Mit den Methodennamen ist es wohl ähnlich. D.h. dass sich diese Umbenennung vieler Methoden auf vermeintlich den gleichen Namen mit Obfuscator-Technik auch wieder in sichtlich unterscheidbare Namen ändern ließe, was den zunächst enorm scheinenden Vorteil wieder relativiert. Aber der Effekt ist dennoch gut, und auf die Schnelle haben es auch Gedächtniskünstler schwer, den Code nachzuverfolgen.
Hallo,
also wie es aussieht, gibt es keinen kostenlosen Code Obfuscator für .NET 2.0, außer dem Dotfuscator, der beim VS 2005 dabei ist. Allerdings funktioniert der nicht. "Skater .NET Obfuscator Light Edition" (Freeware) sieht genauso "mächtig" aus, funktioniert aber auch nicht. In beiden Fällen lässt sich das Ergebnis nicht mehr starten. Dumm, jeder Compiler wird besser getestet und arbeitet zuverlässiger.
Was mich aber nun interessiert ist, manche Obfuskatoren werben damit, Methoden/...-Namen nicht mit dem üblichen "asdfg1" zu ersetzen, sondern mit "?" oder "$". Außerdem haben in den gezeigten Screenshots alle Bezeichner den gleichen Namen, weshalb sich das Ergebnis auch nicht wieder rekompilieren lassen soll. Dadurch werden Bezeichner nicht mehr identifizierbar und eine Code-Analyse wird (bei gleicher Methodensignatur) vollends unmöglich (im Gegensatz zu "asdfg1", wo eine Analyse nur erschwert wird).
Wie soll das funktionieren? Wenn alle Bezeichner den selben Namen bekommen, kann doch auch IL-Code nicht mehr funktionieren. Oder gibt's da einen Trick? Eigentlich sollte es doch keine große Zauberei sein, mit .NET-Mitteln ein Assembly zu laden, die Bezeichnernamen zu verändern und das ganze wieder zu speichern. Hat sich schonmal jemand an sowas versucht? Ich hab mit dieser Art von Reflection (?) leider noch keine praktische Erfahrung und muss daher etwas in Blaue hineinraten. Aber so ein einfacher "$ifyer" wär schonmal ein interessantes Projekt.
Hallo Riv3r,
dann wird es schwierig. 🙂
Du könntest beim Erzeugen des UserControls ein Passwort mit geben und nur wenn das Passwort korrekt ist, wir das Control erzeugt. Dann müsstest du aber sowohl DLL als auch EXE durch einen Obfuscator schicken (siehe Siehe [FAQ] .net Assembly vor Disassembling schützen).
Denn selbst wenn du das Control in die EXE packen würdest, könnte es m.E. per Reflection genutzt werden.
herbivore
Über folgenden Obfuscator bin ich gerade gestoßen:
Salamander .NET Obfuscator
http://www.remotesoft.com/salamander/obfuscator.html
This trial version contains full functionalities, but it is only meant for your internal evaluation purpose, and thus you must not distribute the obfuscated code.
grüße
webstarg
hy,
wäre es nicht eine andere möglichkeit einfach div. funktionen zu sperren ? ich hab sowas schon öfters gesehen. und finde ich als demo gar nicht so falsch. jenachdem was dein programm macht noch paar demo files, wo die benützer rumspielen können aber zum beispiel nichtt speichern, oder nur deine dateien öffen.
Wäre im Quellcode einfach auskommentiert bzw rausgeschnitten. würde ich gar nicht mal als so schlecht ansehen.
lg
[EDIT] wollte nur sagen, dassi ch denke das is der einfachste und beste weg, eine Demo Version zu machen wenn man keinen Obfuscator einsetzen kann. weil es gibt keine tricks, fehlende funktionen zu aktivieren 🙂
Hallo Christi4n,
verhindern, dass jemand den Schutz knackt, kannst du sowieso nicht. Du kannst nur versuchen, den Beginn der Testzeit möglichst versteckt zu speichern. Für den Ort gibt es keine feste Regel, denn wenn es die gäbe, wüsste ja jeder, wo er gucken müsste. Du solltest dir also selber was schlaues/unauffälliges ausdenken, ggf. auch eine Kombination aus mehreren Speicherorten.
Beachte auch, dass es nur dann Sinn macht, den Speicherort aufwändig zu verstecken, wenn du auch einen Obfuscator o.ä. ([FAQ] .net Assembly vor Disassembling schützen) einsetzt.
herbivore
hier noch eine kleine erweiterung der übersicht der für die entwicklung mit c# nützlichen tools.
ReSharper von jetbrains :
Error Highlighting and Quick-Fixes
(der resharper zeigt rechts neben den codezeilen einen status mit gelben [warnungen] und roten [errors] an der den kompletten code analysiert. somit muss man nicht mehr kompalieren um zu sehen wo was nicht klappt. zudem bietet dieser bei einem klick gleich einen manchmal brauchbaren lösungsvorschlag an.
Advanced Coding Assistance
erweitert die intellisece um zusätzliche informationen und verfeinert diese noch ein wenig.
Numerous Refactorings
das ist eines der besten features. das refactoring ist extrem einfach gemacht. so ungefähr wie man es aus eclipse kennt.
Navigation and Search
ich sag nur: goto Declaration
oder: find usages
und das macht der echt effizient
Unit Testing
der resharper bindet nunit in die ide mit ein und erlaubt zudem das debugen während des testens.
ASP.NET Editing
also unterstützt auch ASP.NET
**etc. siehe: hier
Testdriven.net
integriert viele unittesting tools in die IDE
Regionen Makro von Codeproject
sehr praktisch.
man kann dann per tastenkombination regionen erzeugen.
einfach markieren und tastenkombination drücken und anschließend nur noch den namen der region eingeben -> fertig
freier Obfuscator
ein frei ferfügbarer obfuscator.
was das ist? siehe wikipage zum obfuscator
On-the-fly Regex-Tester: Regex-Lab
wer nicht so oft mit regex arbeitet wird ihn zu schätzen wissen. dann muss man nicht immer alles auswendig wissen.
Hey, das mit dem Obfuscator war ein Witz, natürlich dürft ihr den benutzen,
nur nicht über meinen Programmierstil schimpfen X(
Ich bin euch echt dankbar, dass ihr mir helft!!!
Das Docking hab ich mit SplitContainern und Dock = DockStyle.... gemacht, also nix besonderes
Naja, das wird noch, jetzt kommt halt ein bisschen Refactoring...
Vielleicht hätten ich ab jetzt nen Obfuscator benutzen 🤔
Original von dr4g0n76
DynamicMethod m = new DynamicMethod("ConvertToInt", typeof(int), new Type[] { }, typeof(string), false); MethodInfo methodInfo = m.GetBaseDefinition(); ILGenerator ilGenerator = m.GetILGenerator(); ilGenerator.Emit(OpCodes.Ldstr, "596"); //hier die Zahl ersetzen ilGenerator.Emit(OpCodes.Stloc_0); ilGenerator.Emit(OpCodes.Ldloc_0); ilGenerator.EmitCall(OpCodes.Call, methodInfo, null); ilGenerator.Emit(OpCodes.Stloc_1); ilGenerator.Emit(OpCodes.Ret);
Wer brauch schon nen Obfuscator 😄?
knub
Schon oft besprochen...
z.B.: .NET Assembly vor Disassemblern schützen
Oder einfach nach Obfuscator suchen.
Hallo an alle,
ich bin gerade dabei mich mal mit dem Obfuscator auseinander zu setzen, der beim Visual Studio 2005 mit kommt. Mit der Suche habe ich dann schon mal das hier gefunden, leider nichts zum Obfuscator von VS2005:
[FAQ] .net Assembly vor Disassembling schützen
Erste Frage hierzu: Was haltet ihr davon bzw. warum gibt es trotzdem so viele Dritt-Produkte?
Leider taucht der Obfuscator vom Visual Studio 2005 auch hier nicht auf:
PDF über Obfuscator-Techniken
Kennt jemand eine Anleitung wie ich mein Projekt mal so damit bearbeiten kann, dass es auch danach noch läuft. Aktuell produziere ich nur EXE, die danach nicht mehr laufen?
Danke und Gruß
Bonvie
Hallo Daniel
Original von Hua_ba
habe es mit dem Lutz Roeder´s Reflector probiert.
habe jedoch keine Ahnung wo ich unter den 1000 dateien den Quellcode finde.
Was hast du wie probiert?
Wie bist du vorgegangen?
Was für 1000 Dateien?
Anmerkung: Man kann nicht (oder nur mit extrem viel Aufwand) jeden Quellcode sichtbar machen, wenn die DLL bzw. die EXE mit einem Obfuscator verschlüsselt worden ist.
Gruss Peter
Herbivore : Ich bin auch dafür eine Software so komfortabel wie möglich für den ehrlichen Anwender zu machen und möglichst wenig Hindernisse in den Weg zu legen.
Leider gibt es nicht nur ehrliche Anwender.
Es geht nicht um mal Probieren einer Software auf dem Laptop oder Weitergabe einer Software an einen "Freund" zum testen.
Leider gibt es bei vielen Anwendern kriminelle Energie, um z.B. eine gekaufte Software in mehrere verschiedenen Firmen einzusetzen.
Mir ist es selbst passiert dass eine von mir geschriebene Software geknackt wurde und an 30 Firmen verkauft wurde, es ging um 4-5 stellige Beträge pro Lizenz.
Da die Firma Pleite ging und der Geschäftsführer und das Geld verschwunden waren hab ich kein Geld gesehen. Da die Kunden keinen Support mehr bekommen haben waren sie auch betrogen worden.
Eine Kauf-Software, die einmal einen Preis bekommen als "Meist-eingesetzte Software einer bestimmten Sparte", wurde genau 3 Mal verkauft ! Alle anderen waren Raubkopien.
Ich habe auch ein Schloss an meiner Wohnungstür, Überwachungskameras vor der Tür und einen Panicroom. Ob es hilft weiss ich nicht. Wäre schöner wenn es ohne ginge.
UnrealNemesiS : Ja, Du musst in Deiner Applikation natürlich einen Algorithmus haben der den Lizenzschlüssel zurückrechnet. Durch Re-Engeneering könnte man diesen Algorithmus ermitteln, da ist besonders Dot.NET mit der CLR anfällig.
Es gibt einige Möglichkeiten das zu verhindern, such mal hier im Forum dazu (Obfuscator) oder auf http://zfs.fzi.de/LinkClick.aspx?fileticket=WfGgXttW9NE%3D&tabid=56&mid=545
Man könnte auch Verschlüsselungsalgorithmen von dot.net dazu benutzen (Krypto...).
Von einer Online Abfrage bei jedem Programmstart würde ich abraten.
Grüße Bernd
Diese Herangehensweise ist auch nicht unbedingt die Beste. Mir geht es nur darum das Verhältnis Aufwand (auch Kosten) / Nutzen nicht aus den Augen zu verlieren. Optimal wäre es natürlich wenn du einen leistungsfähigen Obfuscator schreiben und zur Verfügung stellen würdest 😉 Aber auch in diesem Fall würde der Aufwand den Nutzen wohl mehr als aufwiegen...
Hallo nic4x4,
Naja, wenn ich zum Beispiel in einem About-Dialog etwas Text reingeschrieben habe und irgendeiner auf die Idee kommt diesen zu verändern,
Paranoia?
Ich kann mir zwar schon einige wenige Fälle vorstellen, in denen ein Obfuscator angebracht ist, aber für meine Begriffe geht deine Sorge deutlich zu weit.
herbivore
Original von nic4x4
Naja, mir ist schon klar, dass es nicht viel bringt, aber wenigstens sieht man die Variablennamen nicht mehr usw. Das ist doch schonmal ein Schutz. Ist es nicht. Denn lokale Variablen haben in IL gar keine Namen. Oder meinst du Felder? Ab irgendeinem Punkt wirst du BCL Klassen nehmen und genau ab dem Punkt würde ich anfangen Code zu lesen, der durch einen Obfuscator gescheucht wurde. Einen Algo kannst du nicht schützen, höchstens vllt gröbere Zusammenhänge oder wenn du in Kauf nimmst dass die Performance unter aller Sau ist.
Reverse Engineering war schon immer möglich, im Zeitalter von Reflector können es halt selbst auch die, die absolut keinen Plan haben. 😉
[EDIT]Abgeteilt von Obfuscator gesucht , weil es sich um einen Beitrag aus der Faq handelt[/EDIT]
hm ... ich hab fast alle ausprobiert und die bauen eigentlich nur Mist, wenn man ein Programm mit verschiedenen Sprachressourcen hat.
Außerdem schlägt dieser "smart ..." vor, dass ich eine Klasse entfernen soll, die auf jeden Fall benutzt wird.
Gibt es denn wirklich keinen freien Obfuscator?
Oder gibt es einfach so ein Dingens, dass durch alle Projekte läuft und mir Sachen umbenennt (die Verweise dann natürlich auch).
Dann kann man wenigstens das Projekt immer ganz rauskopieren und es "schützen" lassen.
Sowas muss es doch irgendwo geben -.-
Und wo steht die Nummer?
(auch wirklich einmalig?)
Wie stehts um meinem Wunsch einen Obfuscator laden zu können (diesen Dotfuscator, den es bei VS2005 als CE Version gibt).
Ich hab mich da regestriert und schon eine Bestätigungsmail erhalten, dass ich als Schüler bestätigt wurdne, allerdings komm ich jetzt nicht weiter 8o
Da steht ich muss auf Member gehen, aber auf der Seite find ich keinen dergleichen Eintrag (außer unter Community > Member, wo immer ein Fehler kommt).
Dann gehe ich also auf Software und auf "Register" oder "Access your account here".
Ich komm immer auf die gleiche Seite, die dann so aussieht:
Übersehe ich da was?
Naja, lohnt sich da überhaupt 25€ zu bezahlen?
Ich bin hauptsächlich am integrierten Obfuscator interessiert, möchte aber VS2005 haben, weil ich einige Klassen vom 2.0 verwende.
Hallo Community,
oft taucht die Frage auf, wie man ein Passwort oder einen Connection-String in einem Programm sicher ablegen kann. Grundsätzlich kann man nicht verhindern, dass eine Information, die im Programm (verschlüsselt) abgelegt ist (und die vom Programm selbst entschlüsselt werden kann), von Dritten ermittelt werden kann. Man kann es ihnen nur möglichst schwer machen und das ist wiederum gar nicht so leicht. 🙂
DB-Passwort sicher speichern
Passwort sicher speichern
Im Zweifel ist Verschleierung wichtiger als ein besonders sicheres Verschlüsselungsverfahren.
[FAQ] NET Assembly vor Disassembling schützen (Obfuscator)
Ob das Zwischenschalten eines Webservices einen Vorteil bringt, wird in Authentifizierung bei Programmstart mit Kennwort besprochen.
Wenn es nicht zwingend erforderlich ist, sollte man Passworte gar nicht speichern, sondern nur einen Hash, aus dem sich das Passwort nicht rekonsturieren lässt. Siehe dazu Kennwortsicherheit - Hashing von Kennwörtern behandelt.
herbivore
Hi,
ich muss diesen Link wieder aus der Versenkung holen.
Der Aspose-Obfuscator funktioniert mit .net 2.0 nicht mehr und Aspose arbeitet nicht mehr an diesem Projekt.
Hat jemand kostenlose alternativen für .net 2.0 C#-Obfuscatoren?
Ich benutze die Visual Studio 2005 C# Express.
partyboy
Mathias & LastGentleman, die ersten Clips aus der AdventureWorksCinema Reihe funktionieren. Viel schlimmer ist da, dass der lange und dröge Einführungsclip (nicht nett, aber ehrlich formuliert) keinen Code als Entschädigung rausrückt. Da war ich kurz davor, zum 2. Mal das Handtuch zu werfen.
An der Standard-Edition interessieren mich eigentlich nur 3 Sachen:
Die Icon-Libray hatte ich vor einiger Zeit schmerzlich vermisst. Aber da ich inzwischen endlich eine brauchbare gefunden habe (http://icon-king.com/?p=15), interessiert mich das nicht mehr.
SourceSafe wäre nett gewesen, aber Speichern und Brennen des kompletten Projekts mit Datum tut es auch und spart etwas Arbeit (erspart Kommentare wie "Bug 434 hoffentlich gefixt, so ein hundsverdammter Satanskäfer, also wirklich!", "Diese Klasse ist jetzt etwas weniger peinlich und unfähig, weil ich dies & das gemacht habe" usw. 😉 )
Wirklich verlockend ist nur der eingebaute Obfuscator (in der Billig-Version), da ich den einzigen Freeware-Obfuscator (Name entfallen) auch nicht zum Laufen gekriegt habe und alle Anderen ein Heidengeld kosten.
Bei meinem Vs.net 2003 ist ein Obfuscator dabei, der kann Klassennamen und Befehle umbennenen. Es ist zwar nicht viel aber ein kleines bischen.
Lg
LastGentleman
Wie gesagt: Hacker, die nicht in der Lage sind mit einem Disassembler umzugehen sind keine....
ngen wäre ein Weg, aber du kannst die Assemblies erst während der Installation mit ngen assemblieren. Nimmt jemand die Installation auseinander findet er die Assemblies wieder in MSIL-Form vor.
Ich denke, ein normaler Obfuscator reicht völlig aus. Aber die guten kosten auch Geld.
Ganz sensible Assemblies kann du auch verschlüsseln und zur Laufzeit in die AppDomain laden.
Hallo allerseits!
Ich möchte mein Projekt nicht als MSIL compiliert, sondern in binary-code ausliefern. Bekanntlich wird der Source Code erst in MSIL, dann @runtime durch den JIT in binary umgewandelt. Unter MSIL ausgelieferte Projekte sind jedoch lesbar und genau das möchte ich vermeiden. Ich habe dazu mich mit Obfuscators, tools und Methoden, wie man den Code verschleiert beschäftigt. Da es auch nichts kosten darf, bin ich auf 2 tools gestoßen: den Dotfuscator Community Edition und ein adose.obfuscator (oder so ähnlich). Nach längerem testen musste ich jedoch feststellen dass keine der Programme gescheit funktioniert oder ich kenne mich nicht gut genug damit aus, jedenfalls hatte ich keine Ergebnise erzielen können. Die behandelten .exen waren immer noch im Klartext. Nach zwei Tagen rumprobieren und suchen bin ich schließlich an die Grenzen gestoßen und wende mich deshalb an euch. Ich habe mir auch das, was hier im Forum ist paar mal durchgelesen, allerdings hat es mich nur weitergebracht jedoch das Problem nicht wirklich gelöst.
Meine Frage währe also: Wie kann ich meinen Code nicht in Bytecode (also MSIL) sondern direkt in Binary ausliefern?
s.cript[0]r
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
Neuinstalliert hab ich grad.
Die map.xml sollte der doch selber erstellen:
Hier nochmal der Fehlerreport (wenn man auf Details klickt):
Informationen über das Aufrufen von JIT-Debuggen
anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.************** Ausnahmetext **************
System.IO.FileNotFoundException: Die Datei C:\Programme\Aspose\Aspose.Obfuscator\Bin\Output\map.xml konnte nicht gefunden werden.
Dateiname: C:\Programme\Aspose\Aspose.Obfuscator\Bin\Output\map.xml
bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
bei System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
bei System.IO.FileStream..ctor(String path, FileMode mode)
bei A8.g8.X32(Object sender, EventArgs e)
bei A8.g8.d32(Object sender, ToolBarButtonClickEventArgs e)
bei System.Windows.Forms.ToolBar.OnButtonClick(ToolBarButtonClickEventArgs e)
bei System.Windows.Forms.ToolBar.WmReflectCommand(Message& m)
bei System.Windows.Forms.ToolBar.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)************** Geladene Assemblys ************** mscorlib Assembly-Version: 2.0.0.0. Win32-Version: 2.0.50727.42 (RTM.050727-4200). CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll.
Aspose.Obfuscator Assembly-Version: 1.6.0.0. Win32-Version: 1.6.0.0. CodeBase: file:///C:/Programme/Aspose/Aspose.Obfuscator/Bin/Aspose.Obfuscator.exe.
System.Windows.Forms Assembly-Version: 2.0.0.0. Win32-Version: 2.0.50727.42 (RTM.050727-4200). CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
System Assembly-Version: 2.0.0.0. Win32-Version: 2.0.50727.42 (RTM.050727-4200). CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll.
System.Drawing Assembly-Version: 2.0.0.0. Win32-Version: 2.0.50727.42 (RTM.050727-4200). CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
System.Data Assembly-Version: 2.0.0.0. Win32-Version: 2.0.50727.42 (RTM.050727-4200). CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll.
System.Xml Assembly-Version: 2.0.0.0. Win32-Version: 2.0.50727.42 (RTM.050727-4200). CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll.
mscorlib.resources Assembly-Version: 2.0.0.0. Win32-Version: 2.0.50727.42 (RTM.050727-4200). CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll.
System.Windows.Forms.resources Assembly-Version: 2.0.0.0. Win32-Version: 2.0.50727.42 (RTM.050727-4200). CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
************** JIT-Debuggen **************
Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
Konfigurationsdatei der Anwendung oder des Computers
(machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.Zum Beispiel:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
Ausnahmen an den JIT-Debugger gesendet, der auf dem
Computer registriert ist, und nicht in diesem Dialogfeld behandelt.
Bei mir funzt, wie gesagt, dieser Obfuscator nicht, den ich mir hier runtergeladen habe: > Link <
Ich hab auch schon eine ganz einfache Anwendung mit nur einem Button versucht, aber er stürzt immer mit der Fehlermeldung ab:
Woran könnte es liegen?
Gibt es andere Obfuscatoren, die Freeware sind?
(ich hab schon den dotobfuscator angeguckt, nur kriege ich von denen keine trial version ...)
Würd mich aber auch mal interessieren, der Code und wo man den Code herbekommt. Etwa nur mit Hilfe von Mono?
mono war doch open source, oder?
ansonten hilft auch hier reflector... man kann sich auch wunderbar die assemblies von microsoft anschaun... da is nämlich nichts mit dem obfuscator oder ähnlichem "versteckt" worden 🙂
origial code aus der mscorlib mittels reflector... würd sagen 100% dem was mono auch implementiert hat^^
public static string Combine(string path1, string path2)
{
if ((path1 == null) || (path2 == null))
{
throw new ArgumentNullException((path1 == null) ? "path1" : "path2");
}
Path.CheckInvalidPathChars(path1);
Path.CheckInvalidPathChars(path2);
if (path2.Length == 0)
{
return path1;
}
if (path1.Length == 0)
{
return path2;
}
if (Path.IsPathRooted(path2))
{
return path2;
}
char ch1 = path1[path1.Length - 1];
if (((ch1 != Path.DirectorySeparatorChar) && (ch1 != Path.AltDirectorySeparatorChar)) && (ch1 != Path.VolumeSeparatorChar))
{
return (path1 + Path.DirectorySeparatorChar + path2);
}
return (path1 + path2);
}
Es ist schon traurig, dass meine Programme die ganze Zeit über als Open Source im Netz standen obwohl ich es nicht wollte...
Welche kostenlosen Obfuscator gibt es? Kann man sie kommerziell nutzen?
Reflection und so:
Man kann festlegen welche Elemente vom Obfuscator umbenannt werden sollen.
Klassen auf die man per Reflection zugreift sollten also nicht obfusciert werden.
Mit einem NGen-Image kann man das Ergebnis nicht vergleichen. Der eigene Code bekommt eine hübsche Verpackung, mehr nicht(Das ist die Kurzfassung).
Es gibt eine 14-Tage Testversion, da kann man sich das Ding genauer anschauen.
Original von Golo Haas
Sorry, wenn ich das jetzt so sage, aber das war gerade ziemlich oberflächlich.In .NET wird nichts nativ kompiliert, sondern in MSIL übersetzt, was quasi dem Bytecode von Java entspricht. Klar, Du kannst ngen anführen, verlierst damit aber die Plattformunabhängigkeit, zudem ließe sich ein solches Tool mit Leichtigkeit ebenfalls für Java schreiben (ob es ein solches gibt, weiß ich nicht).
In Bezug auf Webtechnologien ... dann nenn doch mal ein paar konkrete Vorteile von ASP.NET gegenüber J2EE. Was heißt für Dich "die Nase vorn haben"? Beleg das doch bitte mal an Fakten, wo ASP.NET "mächtiger" ist ...
Inwiefern ist Mono unzuverlässig?
Und .NET mit C++ zu vergleichen, geht sowieso am Thema vorbei, denn entweder musst Du C# mit C++ vergleichen oder .NET mit C++ inklusive MFC, ATL, STL, ...
Generell wird nicht native kompiliert, das ist klar. Aber es ist möglich, da viele verunsicherte User gerne ihren Code nicht disassemblierbar machen möchten. Ich meine hier die De-Obfuscator-Disassembler und nicht die ASM Teile. Letztere können ja alles disassemblieren nur halt ASM Code. Ein Tool für .NEt wäre der .NET Protector von RemoteSoft, der native kompiliert. Natürlich braucht man weiterhin das .NET Framework auf dem lokalen Rechner. Für Java habe ich bis dato kein Tool gesehen, und mit der Low Level Programmierung von Java kenne ich mich auch nicht so aus. Es gibt ja keine .exe Files, in diesem Sinne. Somit die Frage, wie Java den Code compiliert.
Mono macht anscheinend Probleme auf Mac OS Plattformen, weil es ständig Probleme während der Ausführung gibt. Auf Linux/Unix Rechnern läuft es einwandfrei. Und für mich ist das schon unzuverlässig. Java ist super, was Plattformunabhängigkeit betrifft und es läuft diesbezüglich reibungslos.
Ich denke, daß ASP.NET für größere Projekte die bessere Wahl ist. Es ist einfacher zu codieren, da ASP.NET in .NET selbst integriert ist und eine bessere IDE vorliegen hat. In Java habe ich nur Eclipse und Netbeans verwendet und ärgern mich verschiedene Plug-Ins bzw. die Einbindung von externen Bibliotheken. Alles das kostet Zeit. Aber @Herbivore, du wirst mir sicher zustimmen, daß es auf die Anforderungen und die Kosten ankommt, wenn man sich für eine der beiden Technologien entscheidet und nicht an welche Sprache sich ein Programmierer gewöhnt hat 😉 Ich entwickle halt schneller mit .NET als mit Java.
Vorteile .NET:
In Bezug auf Codesicherheit und native Kompilierung ist .NET dem JAVA Environment überlegen. Kein Obfuscator, sondern tatsächliche native Kompilierung. Entweder mit standardmässigem .NET Framework Support oder fix eingebunden. Ich spreche hier auch von den Möglichkeiten.
Web Applikationen: Java Webtechnologien und PHP haben technisch nicht mehr die Nase vorn. ASP.NET ist mittlerweile mächtiger.
Nachteile:
Plattformunabhängigkeit. Mono ist auch nicht sehr zuverlässig.
Gegenüber C++ braucht man sowieso keine Vergleiche anstellen. Hier kommt es nur auf den Nutzen bzw. Anforderungen der gewünschten Applikation an.
Original von cadi
P.s
Wegen dem Code den gebe ich nicht raus der ist mir wahnsinnig Peinlich den Core des Programmes habe ich damals in einer Nacht gecodet und so sieht er auch ausDann solltest du schnell mal einen Obfuscator über die binaries laufen lassen... Der source ist (nur ohne deiene Kommentare und Fomratierungen) per Reflector zu lesen 😉
Ähm .. da müßtet Ihr meinen peinlichen Code mal sehen ;o) Und wie kann ich nen Code mittels dem Reflector lesen .... ? Ich kann nur die Eigenschaften anzeigen (bin wohl zu doof das Teil anzuwenden) ;o)
@S.H.-Teichhof
war garnichtmal alles so als Kritik gedacht... mehr aus Interesse...
Bekommt man heutzutage an einer Uni/TH beigebracht deutsche Variablen und Funktionsnamen zu benutzem? Nur aus interesse....
P.s
Wegen dem Code den gebe ich nicht raus der ist mir wahnsinnig Peinlich den Core des Programmes habe ich damals in einer Nacht gecodet und so sieht er auch aus
Dann solltest du schnell mal einen Obfuscator über die binaries laufen lassen... Der source ist (nur ohne deiene Kommentare und Fomratierungen) per Reflector zu lesen 😉
PS: Rettet dem Dativ 😉
Hallo,
ich selbst habe mir eine eigene C# Klasse geschrieben und in eine Assembly kompiliert, die ich immer wieder in meinen Projekten verwenden. Mit dem Net. Reflector Tool kann ich ja meine eigene und auch andere Assembly betrachten, was ja sehr nützlich und hilfreich sein kann.
Dennoch stelle sich bei mir dir Frage ob ich diese nicht verhindern kann? Bei meinen eigenen Assembly mag dies egal sein, aber bei sicherheitskritischen Assemblys nicht mehr.
Dazu habe ich mich auf die Suche gemacht und konnte folgendes Seite dazu finden:
<die Seite existiert leider nicht mehr>
Dies habe ich mal angewendet, konnte aber beim dem .NET Reflector kein Unterschied feststellen. Dazu folgendes aus dem Artikel (siehe Link unten):
Das Werkzeug setzt anstatt des .NET Reflection API ein eigenes Modell zum Auslesen der Metadaten, IL-Instruktionen, Resourcen und XML-Dokumentationen einer Assembly ein.
Dennoch als ich versuchte per Reflechtion auf auf meine privaten Methoden zuzugreifen, konnte ich ein Erfolg erreichen.
<%@Import Namespace="System" %>
<%@Import Namespace="System.Drawing" %>
<%@Import Namespace="System.Collections" %>
<%@Import Namespace="System.ComponentModel" %>
<%@Import Namespace="System.Windows.Forms" %>
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Reflection" %>
<script language="c#" runat="server">
public void Page_Load(object sender, EventArgs e) {
try {
//Assembly laden
Assembly oAssembly = Assembly.LoadFrom(@"C:\Inetpub\wwwroot\Test\bin\System.Access.Database.dll");
//Die Klasse, auf die zugegriffen werden soll, ermitteln
Type oType = oAssembly.GetType("System.Access.Database");
//Instanz der Klasse erstellen
object oInstance = Activator.CreateInstance(oType);
//MethodInfo-Objekt für die gewünschte Funktion erstellen
//und Funktion in der KlassenInstanz über Invoke aufrufen
MethodInfo oMethodInfo = oType.GetMethod("test", BindingFlags.Instance | BindingFlags.NonPublic);
oMethodInfo.Invoke(oInstance, new object[]{"Mal schauen ob es geht!!!!!"});
} catch (System.Exception err) {
Response.Write(err.ToString());
}
}
</script>
Bei bestimmten Übergab der SecurityAction-Enumeration, bekam ich eine InnerException geworfen. SecurityAction gibt die Sicherheitsaktionen an, die über die Deklarationssicherheit ausgeführt werden können.
Es gibt folgende Member:
Assert
Demand
Deny
InheritanceDemand
LinkDemand
PermitOnly
RequestMinimum
RequestOptinal
RequestRefuse
Leider ist mir jetzt noch nicht ganz klar, wo ich welchen Member einsetze. Z.b. habe ich beim Deny-Member erwartet das ich eine Exception geworfen bekommen. Dies war aber nicht der Fall und das hat mich verwundert! Aber es ist ja nur eine Frage der Zeit bis mir dies einleuchtend ist!
Bzw. noch eine weiteren informative Seite:
Decompiler und Obfuscator: Wie sicher ist Ihr Code?
Eine Möglichkeit seine Assembly zu sichern, aus dem Artikel
Können Obfuskatoren Software schützen?
String Encryption wird allgemein überschätzt. Es wird nur ein geringer Schutz erreicht und dies zu Lasten einer schlechteren Performance. Daher sollten Obfuskatoren höchstens nach dem Motto "besser ein geringer Schutz als gar keiner" eingesetzt werden.
Eine weitere Möglichkeit:
Ein kurzer Ausflug in die PKI
Die beschriebene Verschüsselungsproblematik wird mit der Public/Private-Key-Infrastruktur (PKI) gelöst. Der Absender einer Nachricht verschlüsselt den Inhalt der Nachricht mit dem öffentlichen Schlüssel des Empfängers. Dieser Public Key ist, wie der Name beschreibt, der Öffentlichkeit frei zugänglich. Der Empfänger wiederum besitzt einen geheimen Schlüssel, den Private Key, den nur er kennt. Beide Schlüssel, Public Key und Private Key, bilden ein Schlüsselpaar und sind so konstruiert, dass mit dem öffentlichen Schlüssel verschlüsselte Nachrichten ausschließlich von dem zugehörigen geheimen Schlüssel entschlüsselt werden können.
Zum Verständnis. Theoretisch kann ich mir jede Assembly (C, C++, Java, etc.) mit dem passenden Disassembler betrachten und den Code analysieren. Früher dachte ich diese wäre ohne weiteres nicht möglich. Da liege ich wohl falsch?
Meine Frage ist, wie behandelt hier das Thema?
Sichert hier eure Assembly, wenn ja wie?
Man muss bedenken das aus dieser Möglichkeit dies Assembly zu betrachten, Mono entstanden ist (so steht es zumindest im Artikel).
Hi!
Soweit ich weiß, ist die einfache Version von Obfuscator in der VS 2005 Professional-Version enthalten. Im Standard glaube nicht.
der Marcel
Hi,
ich bin auf der Suche nach einem Freeware Obfuscator für .net-Anwendungen in C#. Ich habe leider keine Lizenz von Visual Studio 2003/2005 und kann somit auch nicht dessen Obfuscator benutzen.
Die Forensuche hat leider nur kostenpflichtige Programme hervorgebracht.
Gibt es (noch) keine kostenlosen Obfuscatoren?
partyboy
Hallo!
Ich habe bei meinen Recherechen zumindest eine Liste von weiteren Obfuscator gefunden: http://msdn.microsoft.com/vcsharp/programming/tools/
Ob diese frei verfügbar sind oder wie es mit der Funktionalität aussieht kann ich leider nicht sagen, da ich mich schlussendlich mit dem Dotfuscator zufrieden gegeben habe.
mfg
thomas b