String in Anwendung vor Dekompilierung schützen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Mokki.

    String in Anwendung vor Dekompilierung schützen

    Guten Tag Community,
    ich wollte fragen, ob es möglich ist, einen String vor einer Dekompilierung zu schützen.
    Ich habe eine Verschlüsselung mit MD5 Hash, aber der Key sollte nun ja nicht einfach per Dekompilieren ausgelesen werden.
    Ich habe mir mein Programm mal selber dekompiliert, dort findet man den Key. Wie kann ich diesen einfach "verschlüsseln", dass man ihn schwieriger bis gar nicht mehr findet?

    LG Michdi

    Gar nicht ist wahrscheinlich gar nicht möglich, oder?
    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.



    Es ist ziemlich unmöglich den vorm Decompiling zu schützen und vor allem ist es einfach unsicher, denn wenn er eincompiled ist, ist er immer auslesbar. Es ist nur eine Frage der Zeit und des Ehrgeiz des Hackers (falls einer da ist). Wenn du deinen Key ins Programm eincompilen musst, hast du aber vor allem einen riesen Designfehler! Lass doch einfach den User den Key eingeben, dann ist es sicher(er). Btw. würde ich auch von der Verwendung von MD5 abraten, da inzwischen nachgewiesen wurde, dass manche MD5-Hashes nicht einmalig sind.

    LG :)
    @Michdi das kommt darauf an wie du den string in dein Programm bekommst.
    Du könntest ihn zum Beispiel in eine verschlüsselte Datei (einfache .txt vielleicht noch mit veränderter Endung ".skey") legen und dann in einen securestring lesen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    Michdi schrieb:

    Ich habe eine Verschlüsselung mit MD5 Hash
    Nein, hast Du garantiert nicht. ;)

    Was hast Du gebaut bzw. wie RodFromGermany schon sagt, was speicherst Du da? Da gibt es sicher auch eine richtige Lösung.

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

    Trade schrieb:

    Nein, hast Du garantiert nicht.

    Verschlüsselung mit bzw. inkl. MD5 Hash (z.B. als Passwort) ist wohl möglich, denn ich denke du wolltest ihn darauf hinweisen, dass MD5 keine Verschlüsselung ist.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Gather schrieb:

    denn ich denke du wolltest ihn darauf hinweisen, dass MD5 keine Verschlüsselung ist.
    Richtig.

    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 :!:
    Hashs könnte man auch als eine Einweg-Verschlüsselung bezeichnen.
    de.wikipedia.org/wiki/Einwegfunktion
    Geht natürlich im englischen vmtl. eher als im Deutschen, da im Deutschen bereits der Begriff Schlüssel enthalten ist.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Laut Wikipedia:

    wikipedia schrieb:

    Verschlüsselung (auch: Chiffrierung) ist die von einem Schlüssel abhängige Umwandlung von „Klartext“ genannten Daten in einen „Geheimtext“ (auch: „Chiffrat“), so dass der Klartext aus dem Geheimtext nur unter Verwendung eines geheimen Schlüssels wiedergewonnen werden kann.


    Ist ne Verschlüsslung immer bidirektional. Ne Hash Funktion, ist wie bereits gesagt, nur in eine Richtung möglich.

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Wie gesagt, man könnte es als Einwegverschlüsselung, oder eher one-way-encryption sehen.
    In jedem Fall ist es eine Einwegfunktion. Genau dasselbe gilt für viele assym Verschlüsselungen, bis auf den Unterschied, dass man in mittels eines Keys in sinnvoller Zeit umkehren kann.

    Und nur weil du eine surjektive Abbildung hast, ist es nicht unmöglich auf das richtige Ergebnis zu kommen, du hast zumindest eine Menge möglicher Ergebnisse.

    Außerdem gibt es einige Hash-Funktionen, die nicht wirklich Einwegsfunktionen sind, sondern nur bisher in nicht Sinnvoller Zeit Umgekehrt werden können(nötiger Algorithmus fehlt, oder evtl. auch nötige Technologie).

    Alles was ich sagen wollte, ist dass man mit den Begriffen immer etwas spielen kann, vorallem nachdem Sprache sich entwickelt, nicht eindeutig ist, übersetzt wird und woanders evtl. etwas anders verwendet wird.

    Mathematisch mag das Klar definiert sein, in der IT jedoch nicht, da rein mathematische Konzepte ggf nicht sinnvoll anwendbar sind.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    VB.NET-Quellcode

    1. Dim DES As New TripleDESCryptoServiceProvider
    2. Dim MD5 As New MD5CryptoServiceProvider
    3. Function MD5Hash(value As String) As Byte()
    4. Return MD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(value))
    5. End Function
    6. Function Encrypt(StringInput As String, Key As String) As String
    7. DES.Key = MD5Hash(Key)
    8. DES.Mode = CipherMode.ECB
    9. Dim buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(StringInput)
    10. Return Convert.ToBase64String(DES.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length))
    11. End Function
    12. Dim cpw As String = Encrypt(pwreg.Text, "DASHIERMEINEICHMITKEY")
    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.