Sind Variablen sicher? EDIT

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von FAtheone.

    Sind Variablen sicher? EDIT

    Hi,

    ich bin Gerade dabei mir ein Konzept zu überlegen und jetzt wirft sich Gerade die Frage auf ob meine
    Variablen im Programm sicher sind. Ich danke da jetzt einfach mal an

    Dim TEST As Integer = 1463

    Und an einer permanenten aktuellen Ausgabe in Form eines Labels oder so:

    Label1.text = TEST

    So ist jetzt wohl das Simpelste Beispiel.. aber es sollte reichen.
    Jetzt frage ich mich wie sicher ist die Variabel? Ist es einfach diese mit
    ein paar mal Googeln und ein paar Tools zu manipulieren?
    Wenn ja was kann ich machen um eine Manipulation entgegenzuwinken?

    Gruß Eistee

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

    ja, das geht bereits mit der CheatEngine....
    entgegenwirken, kann man indem man einen Hash der Variable zwischenspeichert und beim jeden abruf überprüft, ob der Hash der neuen Variable mit der alten übereinstimmt, sollte dies nicht der Fall sein wurde diese geändert...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Gibts da schon etwas fertiges?
    Eine Funktion die ich nur noch laufen lassen muss.

    Denn wenn ich das auch noch lernen muss dann Platzt mir der Schädel :D
    Ich komme mit dem was ich machen muss garnicht mehr hinterher..
    Kennt ihr das? :P


    Edit:

    Habe bis jetzt noch nichts gefunden aber könnte mann das nicht auch einfacher machen
    und die Variabel z.B. + 23446256 nehmen (das in Variabel speichern) und zum prüfen
    Variabel + 23446256 und mit der "Sicherung" vergleichen?

    Oder wäre das mit dem + 23446256 zu einfach zu endschlüsseln?

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

    VB.NET-Quellcode

    1. Private m_DieVariable As Integer
    2. Private m_Hash As String
    3. Property DieVariable As Integer
    4. Get
    5. If m_Hash = MD5(m_DieVariable.ToString()) Then
    6. Return m_DieVariable
    7. Else
    8. MsgBox("du cheater")
    9. End If
    10. End Get
    11. Set(value As Integer)
    12. m_DieVariable = value
    13. m_Hash = MD5(value.ToString())
    14. End Set
    15. End Property

    so oder so ähnlich ;)
    Kennt ihr das? :P

    :P
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ok danke für den Code muss mir den jetzt nur noch so umbauen das ich damit ca. 50 Variabeln überprüfen kann.
    Und wenn das solide leuft wird MsgBox("du cheater") nicht reichen.

    Da wird direkt das Savegame sowie der Account aus der Dantenbank gelöscht :thumbsup:
    Mal eine Frage.
    - Wir reden doch von VB.Net oder? Wird VB.Net nicht in die CIL übersetzt und anschließend von der CLR interpretiert.
    Die VM allokiert und verwaltet den Speicher doch selbst. Er soll doch von der VM auch vor Zugriffen von außen geschützt werden. - Reicht das nicht als Schutz. Ich habe gedacht, dass CheatEngine nur bei nativen Programmen funktioniert.
    Ich habe auch auf vielen Seiten schon gelesen, dass man unter Vista z.B. keinen Solitair-Hack erstellen kann, was folglich daran liegen muss, dass viele Komponenten von Windows Vista und Windows 7 mit C#, also auf .Net-Basis, geschrieben sind.
    also ich habe an meinem PC das schonmal ausprobiert und ich konnte zumindest den Text von Controls über die CheatEngine ändern, wie es bei Variablen ist kann ich nicht sagen, aber es ist ebenfalls im Speicher ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Das lässt sich ja schlecht vermeiden ^^ :D

    Also das mit den Controlls wusste ich nicht. Ich kann nur aus eigner Erfahrung sagen, dass die VM der JRE die Variablen schützt. Aber Java ist ja wieder etwas anderes. Trotzdem könnte ich mir gut Vorstellen, dass das .Net-Framework es dem Konkurenten Java gleich tut. Das ist ja gerade der Punkt, der eine VM besonders im Business-Bereich interessant macht.

    Müsste man einfach mal ausprobieren.
    Wenn ich morgen Zeit habe, dann mache ich das mal ;)
    Selbst wenn man Variablen ändern kann (habs mal bei einen selbstgeschriebenen Testprogramm geschafft), so ist es zumindest so, dass beim nächsten Programmstart die gleiche Variable irgendwo anders im Speicher zu finden ist. Das heißt, die zuvor herausgefundene Adresse ist dann nutzlos. Wie es mit Änderungen am Assemblercode im Speicher aussieht, weiß ich nicht.
    EDIT: Das sind keine Fakten, sondern lediglich Folgerungen aus meinen (kleinen und einfachen) Test.

    Viele Grüße, Phil.
    Selbst wenn man Variablen ändern kann (habs mal bei einen selbstgeschriebenen Testprogramm geschafft), so ist es zumindest so, dass beim nächsten Programmstart die gleiche Variable irgendwo anders im Speicher zu finden ist.
    das ist wohl meistens der Fall ;) aber es ist ja kein Problem die Variable zu finden, wenn man den Wert weiß...
    Und den Code im Speicher kann man ändern, das wird jedoch nie vollständig zu verhindern sein ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Du solltest aber bedenken nur Hashen nützt nichts, du brauchst noch einen geheimen Schlüssel der mit gehashed wird. Wenn ansonsten der einfache Hash von einer Variable genommen wird hält das niemanden ab sich die eigentliche Variable zu suchen, zu ändern, sich den Hash zu suchen, seine änderung ebenfalls zu Hashen und den austauschen.

    z.B. sowas würde schon ausreichen

    VB.NET-Quellcode

    1. Dim i As Integer = 100
    2. Dim iHash as String = MD5(i.ToString() & "Geheimer Schlüssel")


    natürlich muss hierbei auch sichergestellt werden das man nicht durch dekompilieren an den Schlüssel kommt um sich den eigenen Hash zu erstellen.
    ich schätze mal, dass man alleine durch den MD5 Hash 80% aller cheater lost ist :P
    natürlich ist es mit einem Schlüssel sicherer und auch mehrmals zu Hashen, also wie wäre es mit MD5 und SHA1, sowie noch einer Rijindael Verschlüsselung, welche durch das am Ende angehängte Passwort entschlüsselt werden kann...(durch decompilen kommt man jedoch auch da sehr schnell und leicht dahinter...dann noch einen Obfuscator drüberlaufen lassen und die wenigsten werden etwas finden ;))
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    evtl. meinen ich und Dodo das verschieden, aber ich hätte diesen genommen um den Hash zum Schluss noch zu verschlüsseln, bzw. beim Überprüfen wieder zu entschlüsseln, dieser Schlüsse/Passwort wird also erst nach dem Verschlüsseln angehängt(sollte aber am besten per Zufall erzeugt werden...)

    Dodo meinte das evtl. nur, dass ein MD5 Hash nicht ausreicht(was aber bei einem solch einfachen Schlüssel wie in seinem Beispiel wohl leicht zu erkennen wäre...)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Einen Hash erzeugen den möglichst niemand anders erzeugen kann.

    Nur eine Zahl zu hashen bringt nichts, da jeder mit leichtigkeit ebenso diese Zahl Hashen kann, bsp.:

    Zahl = 100
    Hash = MD5("100") = f899139df5e1059396431415e770c6dd

    das bekommt jeder hin, hängst du nun einen schlüssel an die Variable und Hashed dann dies zusammen

    Zahl = 100
    Hash = MD5("100Eistee") = 45f6d3ddf585475f6c7278a9412d17c8

    solange also niemand den Schlüssel "Eistee" kennt kann niemand den Hash erzeugen mit dem die Zahl verglichen wird und demnach kann dann auch niemand den Hash einfach mit ändern.