Lizensierung wie Sicher läuft das

  • VB.NET
  • .NET (FX) 4.0

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von WeLoveBurgers.

    Lizensierung wie Sicher läuft das

    Hallo,

    ich hab eine Frage, wie sicher haltet Ihr diese möglichkeit den Code zu Checken?

    Ablauf:
    1. Es wird ein WebRequest an eine ASP geschickt welche in der Datenbank prüft ob die Einträge Valide sind.
    2. Ist der Eintrag / Die SN Valide so bekomme ich als Request / Seite einfach "True" oder "False"
    3. Ich lese den Request zurück und Schaue ob True
    4. Wenn True dann ist alles OK und die Software Startet

    Server Online: XXXXXX.de/asp/licCheck.asp?SER=44444444444

    VB.NET-Quellcode

    1. Dim httpWebRequest As HttpWebRequest = CType(WebRequest.Create("http://www.XXXXXX.de/asp/licCheck.asp?SER=" + StrSerNum), httpWebRequest)
    2. Dim LicResponse As HttpWebResponse = CType(httpWebRequest.GetResponse(), HttpWebResponse)
    3. Dim LicResponseStream As System.IO.Stream = LicResponse .GetResponseStream()
    4. sleep(1000)
    5. Dim streamReader As System.IO.StreamReader = New System.IO.StreamReader(LicResponseStream )
    6. Dim str As String = streamReader.ReadToEnd()
    7. streamReader.Close()
    8. responseStream.Close()
    9. If String.Compare((str, "True", False) = 0 Then
    10. LicState = True
    11. End if


    Nun meine Fragen hierzu:
    -> Wie leicht könnte jemand den Stream Umleiten auf einen anderen Server der immer True zurück gibt falls er mitbekommt was da passiert (dauert es 10 minuten oder ist es schon ne harte nuss)
    -> Ist es möglich dies trotz Obfocus wieder rückbauen über Streams die Überwacht werden oder so?
    -> Wie könnte ich es sicherer gestalten?
    Wenn ich da mit Wireshark rangehe, ist es schon ausgehebelt. ;)

    Rasieel schrieb:

    -> Ist es möglich dies trotz Obfocus wieder rückbauen über Streams die Überwacht werden oder so?

    Security through Obscurity geht nicht. Das kann man immer wieder lesen und im Endeffekt baust Du Dir das Programm nur unnötig zu. Sobald man das übrigens wieder als Klartext hat, kann man den Teil einfach raushauen und schon prüft er das gar nicht mehr. Wenn ich also Dein Programm da habe, kann ich es modifizieren.

    Rasieel schrieb:

    Wie könnte ich es sicherer gestalten?

    Gar nicht.

    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 :!:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    Schau dir mal das hier an: Lizenzsystem mit RSA-Signaturen

    Wie @Trade bereits erwähnte geht 100% sicher natürlich nicht. Aber das muss es ja auch nicht, es geht darum, das es auf die breite Masse wirkt, und die kann nun mal nicht programmieren.

    Mit deiner aktuellen Logik müsste übrigens nur jemand seinen Schlüssel veröffentlichen und jeder könnte ihn nutzen, da du den Key weder an Account noch an Hardware Ids bindest.

    ThuCommix schrieb:

    und die kann nun mal nicht programmieren.
    ... noch nicht ;)

    Spaß beiseite. Absicherung von Programmen ist immer eine Abschätzung von Nutzen gegen Aufwand. Anders gesagt, wie viel % der Bevölkerung werden ausgesperrt, bei einem gegebenem Aufwand X oder anders herum. Mit einfachsten Mitteln lassen sich sicherlich schnell 50-60% alle möglichen User aussperren. Der nächste schritt ist die 85% Marke. Ab hier - das ist nur meine inkompetente Schätzung - beginnen die Leute, die Programmieren, bzw. Tools wie ILSpy, ILDasm, usw. anwenden können.
    Dein Aufwand, das Programm abzusichern, steigt enorm, doch der Nutzen daraus ist wesentlich geringer. Und nach den 85% siehste in der .NET Umgebung regelrecht schwarz. Doch selbst in nativen sprachen wirst du niemals 100% erreichen. Der Computer wurde von Menschen gebaut. Er kann nur mit der Logik eines Menschen Arbeiten, und kann somit, egal mit welchem Aufwand, von einem Menschen ausgelesen werden.
    Wenn jmd die Informationen haben will dann bekommt er die auch.
    Mit WireShark kommst du an alle Verbindungen ran und kannst genau sehen wohin die führen.

    Du könntest da mit MD5 Verschlüsselung arbeiten.
    Den Code lädst du verschlüsselt auf den Server/Webspace und das Eingegebene wird dann Encrypted und verglichen.

    Ist auch nicht 100% sicher aber das funktioniert ja sowieso nicht.

    mel99

    mel99 schrieb:

    MD5 Verschlüsselung

    MD5 ist keine Verschlüsselung. Und die Hashfunktionen müssen dann entsprechend auf dem Server verwendet werden. Kommt aber auf's selbe raus. ildasm und ilasm und weg ist's. ;)
    Davon abgesehen ist MD5 nicht mehr wirklich kollisionssicher und sollte mit gesalzenem SHA256 ersetzt werden.

    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 :!:
    Ich würds
    1. über https laufen lassen
    2. Den lizenzkey ungültig machen bei erstmaligen benutzen, dann mit token oä. fortfahren
    3. Den content des responses encrypten(oder zumindest encoden)
    4. Ausführbaren code vom server zurückgeben lassen, der mittels AES mit dem hash des lizenzkeys verschlüsselt ist und diesen dann mittels CodeDome in der runtime Compilen, du musst den clienten vom Server abhängig machen, sonst kann man das ganze viel zu einfach reverse engenieren(don't trust the client!!)
    Dies hier ist nur ein kleiner Denkanstoß, mach was draus!
    Mfg

    Die Farbe "Rot" ist der Moderation vorbehalten. Farbe geändert. ~Thunderbolt
    Wer Rechtschreibfehler findet darf sie behalten :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()