Security System | Offline | Vorschläge & Herangehensweise

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von iEi.

    Security System | Offline | Vorschläge & Herangehensweise

    Jo Leute,

    Also ich interessiere mich schon seit längerem für das Thema Sicherheit mit .Net.
    Zu aller erst: Ich weiß das .Net code immer decompiliert werden kann, und kein System unknackbar ist, aber trotzdem
    kann man es den "Crackern" sehr schwer machen.
    Mir geht es hier nicht drum irgend ein supertolles project zu schützen, sondern ein generelles Schutz System zu entwickeln (Interesse)
    Ich möchte gerne mit euch darüber disskutieren was sinnvoll ist, was nicht, höre mir gerne Vorschläge etc an.
    Also, zu Beginn, ein paar kritieren die dieses Lizenz-System/Schutzsystem erfüllen soll:

    • Komplett offline/kein Mysql
    • Kopplung mit einer einzigartigen ID (Processor ID, HWID...?)
    • Verwendung von Keyfiles, die generiert werden und geladen werden können. Sie sollen der Entschlüsselung dienen.
    • Verwendung von RSA, Public & Private Keys?
    • ...Obfuscation (Ich weiß das erhöht die Sicherheit nicht, macht den Code unleserlich; Ja es gibt Programm zum deobfuskieren...)
    • Mehrere Lizenztypen (Unterschiedliche Nutzungsdauer)


    So, ich mache das lediglich aus interesse an Verschlüsselungen, nicht um
    damit tatsächlich ein Programm zu schützen, welches später verkauft wird.
    Vorschläge, ratschläge, welche vefschlüsselungen etc...?
    Habe mir bereits diesen Thread angeguggt: Erklärung - was ist eine Verschlüsselung und was ist ein Hash
    C# Developer
    Learning C++
    wieso nich ein kleines prog in einer schwierigeren sprache schreiben, das diese aufgabe übernimmt. zb c++ ... kenne ich mich zwar nicht mit aus, aber ich wette da ists effektiver den quelltext zu verstecken. diese c++datei hat dann lediglich einen member und eine methode. einmal einen globalen "xorkey" und eine methode "call".
    die datei ist lediglich dazu da um andere programme (unter anderem .net's) zu starten. nennen wir diese datei mal secret.exe
    wenn wir nun ein vb projekt veröffentlichen wollen, dann erstellen wir 2 vb dateien. einmal das eigentliche programm "myprog12.exe", und eine art container, die "start.exe"... die "start.exe" ist die datei, die der user ausführen kann. dort in den resourcen befinden sich die "secret.exe", die "myprog12.exe" und eine datei "myprog12.key" die den privaten xorKey für die "myprog12.exe" besitzt. bevor das noch verwirrender wird, mach ichs mal bissl anschaulicher...

    User startet "start.exe" -> "start.exe" ruft "secret.exe" mit dem parameter "myprog12" auf -> "secret.exe" entschlüsselt "myprog12.key" mit dem globalen xorKey der in der "secret.exe" gespeichert ist -> "secret.exe" entschlüsselt nun mit dem eben erhaltetnen 2ten xorKey aus der "myprog12.key" die "myprog12.exe", die vorher vom programmersteller xorverschlüsselt wurde -> das alles aber nur intern, also keine datei auf dem pc des benutzers erstellen -> "secret.exe" lädt und startet intern die eben entschlüsselte "myprog12.exe"

    kurz gesagt:
    - aufruf von "start.exe"
    - start("secret.exe", "myprog12");
    - - privatekey = xor("myprog12.key", me.globalkey);
    - - bindata = xor("myprog12.exe", privatekey);
    - - loadstart(bindata, einstiegspunktblahblah...)
    - - - start von Main() sub aus der "myprog12.exe"

    als ich damals noch scripts für einen mmo-bot geschrieben habe, hab ich soetwas ähnliches gemacht, mit erfolg. und ja ich hab gelesen, dass es hier eigentlich um .net geht. aber das sagt auch schon wieder alles... in .net fange ich persönlich nichmal an daran zu denken meine progs zu sichern... wer diese progs wirklich auf die pöse art öffnen will, der schaffts auch... die .net progs sind ja nichts anderes als kleine virtuelle maschinen die ebenfalls in sich die eigentlichen programme besitzen. letzten endes müssen diese, ich nenn sie ma "container", ja noch geöffnet werden können, was das verschlüsseln, was du angesprochen hast, sicherlich nicht leicht macht...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Agita“ ()

    Die Kopplung an einer UNID lässt sich durch überschreiben der Prüfung aushebeln, die Keyfiles ebenfalls ... es würde zwar etwas Mehrarbeit bedeuten aber es kann dennoch umgangen werden. Bedenke eins:
    Viele kommerzielle Firmen arbeiten an solchen Lösungen für Ihre Software und was bringt es Ihnen auser verschwendeter Zeit? Nichts!
    Es wäre ein Katz&Maus Spiel, du müsstest immer wieder Zeit investieren, welche du wohl möglich in deiner Software sinnvoller verwenden kannst.

    @Agita: Da die Anwendung dennoch iwo im "Klartext" geladen werden muss kann man sie dort extrahieren und den Schutz umgehen (unter Vorbehalt, es stellt sich immer die Frage ob sich der Aufwand (Zeit & Hirnschmalz) für Software XY lohnt)
    @slice
    jop. hab auch mal versucht meine custom maps für warcraft3 zu verschlüsseln. und da kam ich aufs selbe ergebnis. was letztenendes iwo gelesen werden muss muss lesbar gemacht werden können und somit können auch aussenstehende es lesbar machen. aber ein prog, das allein zum entschlüsseln und starten von dateien dient ist imo sinnvoller und effektiver als über quelltext-sicherheit von .net programmen nachzudenken

    @Eistee
    *gg* aber auch nur weil ich mich mit beiden seiten befasst habe ;) mit dem botten, extrem wie es nur geht, mit sämmtlichen antiantibot sachen (unter anderem anticaptcha) und auf der anderen seite mit der sicherheit eines privatservers für dieses spiel :P somit hab ich immer vesucht mich selbst zu besiegen ;D

    aber das bitte nun nicht in OT ausarten lassen :)

    LG agi
    Möglich wäre es, aber mit erheblichem aufwand und nur mit sehr guten c/c++ Kenntnissen.

    Wenn du dir ne modifizierte Version vom Mono Compiler und der Mono VM bastelst, könntest du die Software so verschlüsseln, dass es sehr mühsam ist, daraus wieder .NET Code zu machen. Die Mono VM müsste den Code dann Stück für Stück entschlüsseln, übersetzen und ausführen.

    Aber ob sich der Aufwand lohnt, ist eine andere Frage...
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    nafets3646 schrieb:

    Gar nichts, es wird innerhalb von Minuten knackbar sein, so oder so.

    Das glaub ich nicht, da ja auch große Unternehmen welche Software entwickeln die In VB.Net/C# geschrieben wurde relativ sicher schützen können.
    Was waren "relativ sichere" .net Schutz Mechanismen?
    C# Developer
    Learning C++
    Programmiere ein System, bei dem der Code Umwandlungsalgo bekannt ist, aber anschließend trotzdem nicht auf ein gut lesbares Ergebnis gekommen werden kann. Sowas wäre sicher ;)
    Selbst eine gute Idee hab ich da im Moment nicht, außer dass du tatsächlich Mono entsprechend anpasst, sodass die ganzen IL Befehle änderst, das würde zumindest mal dazu führen, dass einer der die dem originalen IL nicht zuordnen kann keinen IL Code bekommt. Und ohne IL Code kann er das auch nicht richtig in C# o.ä. zuruckwandeln. Aber die Idee gefällt mir eigt. auch nicht.

    An alle die sagen, dass C++ sicherer ist oder so.
    Bei C++ ist das größte Problem, dass sich ASM Code nur schwer zu C++ zurück verwandeln lässt, vorallem mit den ganzen komplexeren Strukturen.
    Wenn da irgendein Sicherheitssystem drinnen ist, dann wird das i.d.R. einfach entfernt und dies geht sehr einfach, sobald man die Stelle kennt, wo der Code dafür liegt...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Das ist schonmal interessant.
    So, zuerst mal, gibt es auf vb-paradise.de ein Tutorial zu RSA?
    Ich habe zwar Informationen auf anderen Seiten gefunden, allerdings fände ich diese nicht so hilfreich.
    Und zum Thema keyfiles, da ist RSA ja am sinnvollsten, oder nicht?
    C# Developer
    Learning C++