frage zu obfuscator + vm

  • C#

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    frage zu obfuscator + vm

    Hi

    Ich weiß das wenn man ein Programm nur obfusktiert das man dann zwar nicht einfach an den Code kommt man aber trotzdem den Arbeitsspeicher auslesen kann, womit man dann auch an Daten wie Passwörter kommt oder Lizenzsysteme hacken kann.
    Jetzt habe ich aber einen Obfuscator gefunden (Agile.NET) dern icht nur das Programm obfuskiert sondern auch eine "Code Virtualization"-Option mitbringt. Diese verspricht den Arbeitsspeicher schlechter bis gar nicht auslesen zu können da, der Obfuscator für jedes einzelne Programm eine VM (Virtual Machine) erstellt die immer einzigartig ist und nur von dem einen Programm verstanden werden kann. So will man verhindern das der obfuskierte Code zurück in IL-Code verwandelt wird, da IL-Code leicht auszulesen ist. Ein Vorteil dieser VMs ist zum beispeil das man nie weiß was ein Befehl bedeutet. Bei IL hat "ldstr" eine feste Bedeutung der Befehl "D3 F2 A8" hat aber nie eine eindeutige Bedeutung.

    So möchte ich also fragen ob diese Programm jetzt überhaupt noch dekompilierbar/auslesbar sind. Hat man da eine effektive Waffe gegen Hacker gefunden?

    mfg
    phoenix blaster :)
    Wenn Du Passwörter im Code speicherst o. ä., dann hast Du schon falsch programmiert und da bringt Dir ein Obfuscator auch nichts, Security through Obscurity funktioniert nicht. Stattdessen solltest Du schauen, dass Du alles richtig implementierst, dann braucht man sowas nicht mehr. Es sind nicht ohne Grund trotzdem viele Programme OpenSource, denn wenn man es richtig macht, dann kann man das auch einsehen. Ist bei Verschlüsselungsalgorithmen genau das Selbe.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Warum gibts z.b. illegale Kopien von den teuersten Programmen wie AutoCad, Photoshop, etc.? Weil man einem den Weg zur Raubkopie nur erschweren kann und nie ganz weg bekommt.
    Es stellt sich die Frage ob dein Programm so Weltbewegend ist das du dir die Arbeit antun willst es etwas besser zu schützen.

    Sowas hier ist mMn. schon ziemlich gut gemacht --> PasswordList v2.0
    Da würde man wahrscheinlich schon ne Weile sitzen um was rauszubekommen.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.
    Ja, Lizenzsysteme kann man umgehen, in .NET sogar ganz leicht, da ich Dir u. a. sogar die Routinen rauswerfen kann. -> Bringt nix.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Es gibt drei große Dinge, die man schützen wollen kann.
    Code (somit auch Lizenzen): Wenn man einen ausgefuchsten Algorithmus entwickelt hat, will man verhindern, dass andere den einfach aus dem Programm kopieren können. Lizenzen sind nichts anderes, auch wenn es primär nicht darum geht, den Code vor dem User zu verstecken, aber würde man das nicht machen, könnte er den Code einfach in sein eigenes Programm kopieren.
    Daten: Am Beispiel von PasswordList: Wenn Passwörter des Benutzers gespeichert werden sollen, geht es nur darum, dass andere mit den Daten nichts anfangen können. Der Quellcode kann trotzdem öffentlich sein und das Programm kann auch gratis sein.

    Daten zu schützen ist prinzipiell einfach, denn das Problem wird einfach woanders hin verlagert. Man nehme eine zeitgemäße Verschlüsselung und behandle damit die zu schützenden Daten. Das Problem ist dann nicht mehr "Wie schütze ich die Daten?", sondern "Woher kommt der Schlüssel?". Beim Beispiel von PasswordList (von Snaptu in Post #5 verlinkt) habe ich das Problem auf den User abgewälzt. Der muss ein Master-Passwort eingeben, mit dem die Passwörter ver- und entschlüsselt werden. Wie er sich das merkt ist dem Programm egal.

    Code zu schützen ist aber wesentlich schwieriger. Grundsätzlich gilt: Alles, was der Prozessor ausführen kann, ist ungeschützt. Also wenn der Code auf dem Computer des Users ausgeführt werden kann, hat man schon verloren. Dinge wie Obfuscation oder das Dazwischenlegen einer VM helfen da nicht wirklich. Das erschwert es nur, löst aber das Problem nicht. Das heißt, man muss den Code, den man schützen will, woanders hin tun. Im Grunde genommen wäre das das Internet, aber das bedeutet auch, dass man für die Verwendung des Programmes dauerhaft eine Internetverbindung benötigt, und das kann man dem User nicht antun (oder sollte es zumindest nicht). Erst recht, wenn das Programm eigentlich garnichts mit dem Internet macht (z.B. Photoshop).

    Warum solche Passwortabfragen in .Net umgangen werden können, hab ich mal in vereinfachter Form hier erklärt. Jemand hat auch mal ein obfuskiertes Programm auf diese Weise auseinander genommen (hat auch nicht lange gedauert), aber ich weiß nicht mehr, wie ich den Thread finden kann.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils