Sourcecode sicher und verschlüsselt vom Server holen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Bonez.

    Sourcecode sicher und verschlüsselt vom Server holen

    Guten Abend,

    ich arbeite derzeit an einem Programm, welches ich in anderen Foren anbiete und nur bestimmte Benutzer sollen es nutzen können.
    Das heißt es läuft zurzeit über eine einfache HWID Abfrage -> HWID wird beim Programmstart generiert, danach wird eine simple POST-Anfrage an meinen Server geschickt, welcher dann entweder true oder false (HWID vorhanden oder nicht vorhanden) ausgibt. Ich weiß, dass das nicht wirklich sicher ist und bereits durch eine kleine Manipulation in der hosts Datei umgangen werden kann. Aber darum geht es mir gerade nicht.

    Ich möchte nämlich meinen Sourcode, oder besser gesagt wichtige Teile davon, ohne die das Tool nicht mehr seine Tätigkeiten erledigen kann, auf meinen Server verlagern und erst beim Programmstart in das Tool laden.
    Grund dafür ist, sollte mein Tool irgendwann "gecrackt" werden, so kann ich einfach den Server abschalten und das Tool wird automatisch nutzlos, da die eigentlichen Funktionen nicht in der .exe selbst enthalten sind.

    Problem ist nun aber, ich möchte die Codes, die vom Server geladen werden, verschlüsselt übertragen, jedoch weiß ich nicht wie ich das machen soll. Geht sowas überhaupt, ohne einen Key/Passwort welches zum Entschlüsseln benutzt wird in die eigentliche Source als Klartext einzuspeichern (was ja dann wiederum die Ver- bzw Entschlüsselung komplett nutzlos macht)?

    Am liebsten wäre es mir, wenn man die generierte HWID (durch Auslesen verschiedener Computerinfos) benutzen könnte, um die verschlüsselten Daten die beim Programmstart vom Server kommen zu entschlüsseln. Die HWIDs kann ich ja sicher auf meinem Server abspeichern, aber wie könnte ich diese dann benutzen um Strings zu verschlüsseln sodass ich diese wieder in meinem Tool entschlüsseln kann?
    Entweder du verjagst Skribtkiddies oder du lagerst die wichtigen Funktionen auf deinen Server aus(Nachteil: die Exe muss immer mit dem Server verbunden sein), weil was der Pc versteht versteht auch der Mensch...

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Ich hätte da eine Idee (keine Ahnung ob das gut ist bzw geht....)
    Du verlagerst das gesamte Programm auf den Server. Die .exe die der Endbenutzer kriegt, lädt das Programm vom Server herunter, speichert es irgendwo auf der Festplatte temporär ab und führt es anschliessend als "Plugin" im Programm aus. Wenn das Programm wieder beendet wird muss die temporäre Datei einfach wieder gelöscht werden.. (Oder wenn jemand den Ordner öffnet in dem sich die Datei befindet...)
    Ist auch nicht zu 1000% sicher aber wäre ne Lösung? :D

    Mokki schrieb:

    Entweder du verjagst Skribtkiddies oder du lagerst die wichtigen Funktionen auf deinen Server aus(Nachteil: die Exe muss immer mit dem Server verbunden sein), weil was der Pc versteht versteht auch der Mensch...

    Lg Mokki


    Mein Programm muss sowieso immer mit dem Internet verbunden sein und wenn es dauerhaft mit meinem Server verbunden sein muss ist es auch kein Problem. Somit kein Nachteil in diesem Fall. Aber wie genau mache ich das nun mit dem verlagern? Bzw damit es halt auch sicher ist, darum geht es mir ja im Endeffekt.
    @Rootkit Das ist sogar ziemlich unsicher, wenn die entsprechende Datei nicht signiert wird und somit keine Validierung durchgeführt wird. Ansonsten kann Dir das nämlich manipuliert werden und Du führst es direkt aus.

    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 :!:
    @Rootkit
    Ja es wär eine Lösung um Skribtkiddies abzuhalten, aber ich brauch > 10 min und dann hab ich den Quellcode. Hab gad noch den alten Post hervorgekramt: Visualbasic script schützen!?
    Das ist das einzige (fast) sichere, alles andere ist mit mehr oder weniger Aufwand knackbar..

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Ich würde es wie gesagt gerne mit der Methode mit dem Server machen. Und am liebsten natürlich so, dass man die jeweilige Benutzer HWID(s) benutzen kann um die Source Ausschnitte zu ver-/entschlüsseln. Würde das gehen? Und wenn ja wie? Weil normalerweise kenne ich das nur so, dass man ein bestimmtes statisches Passwort benutzt zum ver-/entschlüsseln. Mit den HWIDs wäre das ja aber so, dass pro dazu gefügten Benutzer, eine weitere HWID benutzt werden kann zum entschlüsseln.
    Ein Auszug aus ericlippert.com/2013/02/18/static-constructors-part-four/

    [...] this appears to be a case of the developer not trusting the user. But the .NET security system was designed with the principle that the user is the source of trust decisions. It is the user who must trust the developer, not the other way around! If the user is hostile towards the developer then nothing is stopping them from decompiling the code to IL, [changing it], recompiling, and running the [changed program]. [1. The resulting program will of course not be strong-named or code-signed by the developer anymore, but who cares?]


    Egal was du machst, man kommt drum herum. Besonders in .NET, weil es eben so einfach ist, Programme zu dekompilieren.

    Siehe auch frage zu obfuscator + vm
    Da Du sowieso den Schritt gehen willst, dass der User eine Internetverbindung benötigt, könntest Du den schützenswerten Code einfach auf dem Server ausführen lassen (soweit das halt möglich ist). Denn dann kann der Server dem User bei nicht erfolgter authentifizierung verweigern, den Code auszuführen.
    Wenn Du dem User bei einmaliger Authentifizierung den Code schickst, dann hat er ihn. Und dann kann er den auch behalten und unabhängig vom Server ausführen. Dein Programm macht das zwar nicht, aber wie oben erklärt kann der User dein Programm verändern.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Host Datei?
    Wenn ich mich nicht täusche, divergiert durch die Manipulation auch die IP des Servers... als google.de unter 172.217.22.3 wird dann exemplarisch zu 192.168.0.215.

    Du kannst doch die Server-IP in die Applikation "hardcoden" und so den Server theoretisch verifizieren...

    Wenn das nicht hilft, dann bietet sich *hust* DotNETWork: Generische TCP/IP und UDP Klasse an... du kannst quasi das zu installierende Paket verschlüsselt über das Internet empfangen.
    Der Hash des Public-Keys des Servers ist hardcodet und hardware-spezifisch.

    MITM sind imho nicht möglich. (Siehe DotNETWork: Generische TCP/IP und UDP Klasse)
    Und Gott alleine weiß alles am allerbesten und besser.

    Bonez schrieb:

    Ich möchte nämlich meinen Sourcode, oder besser gesagt wichtige Teile davon, ohne die das Tool nicht mehr seine Tätigkeiten erledigen kann, auf meinen Server verlagern und erst beim Programmstart in das Tool laden.
    Schon mal darüber nachgedacht, einen Webservice zu schreiben?
    Dann kannst du die relevanten Funktionen direkt auf dem Serrver ausführen.
    Das Programm läuft dann halt nur noch in einer Online-Umgebung, aber das soll es ja.
    Und die ausgelagerten Funktionen sollten natürlich nicht so rechenintensiv sein, dass sie den Server überlasten.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Dann kannst du die relevanten Funktionen direkt auf dem Serrver ausführen.
    Das Programm läuft dann halt nur noch in einer Online-Umgebung, aber das soll es ja.
    Und die ausgelagerten Funktionen sollten natürlich nicht so rechenintensiv sein, dass sie den Server überlasten.


    Ja daran hatte ich auch schon gedacht, jedoch ist hier das Problem, dass mein Tool mehrere HTTP Requests an verschiedene Webseiten sendet/empfängt, diese verarbeitet und weitere Requests sendet. Und diese unbedingt mit der IP des jeweiligen Users geschehen muss. Das heißt, die Funktion muss auf dem jeweiligen Rechner ausgeführt werden.

    Und mir ist klar, dass man - wenn man will - am Ende sowieso an den Source kommt. Aber ich würde es eben gerne etwas aufwendiger machen, das würde schon mal einen Großteil der Leute (Scriptkiddies) die sich das Tool "cracken" wollen davon abhalten. Ich würde einen Obfuscator benutzen und zusätzlich eben wichtige Codeteile verschlüsseln und wie bereits erwähnt am liebsten mit der jeweilige User HWID entschlüsseln wenn das möglich ist. Und bevor hier eine Antwort kommt, dass mein Programm es zu 99% sowieso nicht wert ist so zu schützen bzw keiner Interesse an dem Source hätte..doch, in diesem Fall ist es leider so. Und selbst wenn mein Tool das nicht wert wäre, es geht mir hier einfach um die Möglichkeit den Source sicher zu verlagern - unabhängig davon ob es mein Tool rechtfertigt oder nicht.

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