Laden...

Variable vor Manipulation durch Angreifer schützen?

Erstellt von *neo* vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.168 Views
*
*neo* Themenstarter:in
299 Beiträge seit 2006
vor 11 Jahren
Variable vor Manipulation durch Angreifer schützen?

Hallo zusammen und ein frohes neues Jahr!

ich habe nun meine Lizenzabfrage in mein Programm eingebaut. Das Problem ist natürlich, ich bin über einen anderen Thread darauf gestoßen, dass man nach der Lizenzprüfung einen gewissen Status einer Variablen hat. D.h. entweder ist die Lizenz gültig oder eben nicht, true oder false! Solange keiner ein Speicheranalyse-Programm vor meines schaltet, ist das grundsätzlich aus meiner Sicht kein Problem. Wenn aber so ein Programm läuft, dann kann die Variable, die entscheidet ob Vollversion oder Demo, geändert werden und die Lizenzprüfung war für die Katz.

Gibt es da andere Ansatzpunkte oder neue Erkenntnisse? Hier im Forum habe ich leider keine gefunden.

Kann man ihrgend wie prüfen ob ein anderes Programm den Speicher meines Porgrammes nutzt?

Grüße

B
357 Beiträge seit 2010
vor 11 Jahren

Ich glaube kaum, dass so etwas möglich ist. Um den Speicher auszulesen, muss man nicht über dein Programm gehen. Woher soll es dann also wissen, dass ein anderes Programm gerade darauf zugreift? Insofern lässt sich auch eine Manipulation nicht verhindern. Zum Thema, wie man Assemblys vor Manipulation schützt bzw. vor dem Einsehen des Codes gibt es aber ein paar Themen hier.

I
57 Beiträge seit 2011
vor 11 Jahren

Was nicht schlecht ist, die Lizenz beinhaltet einen KEY um das Hauptprogramm zu entschlüsseln und dann lädst das einfach, wenns nicht klappt ist die Lizenz/der Key ungültig.
Dann bist du nicht nur auf Flags angewiesen.

/edit: ist natürlich auch kein vollständiger Schutz, kombiniert mit diversen Anti Debugger Methodiken aber schon recht effektiv gegen Einsteiger.
Aber beim JIT Compiler gilt ja leider wer zuerst hookt gewinnt.
Es gibt aber auch schon fertige Lizensierungssysteme.(online wie offline).

16.827 Beiträge seit 2008
vor 11 Jahren

Sowas hatten wir schon zig Male hier im Forum und das Fazit ist: nein es geht nicht.
Spätestens im Speicher kann man alles manipulieren und man kann auch nicht prüfen, ob der Speicher von einer anderen Anwendung manipuliert wird.

Daher ist es vor allem bei Spielen so, dass bestimmte / wichtige Spielwerte an verschiedenen Stellen gespeichert werden. Das Programm überwacht Veränderungen und wenn der Wert zweier Soll-Gleicher Zellen sich dann doch unterscheiden; dann wurde gemogelt.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo neo,

Sowas hatten wir schon zig Male hier im Forum und das Fazit ist: nein es geht nicht.

dem schließe ich mich an. Es gibt keinen Schutz gegen Cracker.

Außerdem wollte ich noch darauf hinweisen, dass die Manipulation des Speichers nur eine Möglichkeit ist. Noch leichter (und wohl auch üblicher) ist es, den Code des Programms so zu ändern, dass die Abfrage der Variable negiert wird. Auf IL-Code-Ebene muss man z.B. nur die Anweisung OpCodes.Brtrue durch OpCodes.Brfalse ersetzen.

herbivore

1.044 Beiträge seit 2008
vor 11 Jahren

Hallo neo,

neu in .NET 4.5 ist die SecureString -Klasse. Zwar bietet die Klasse nur bedingt Schutz und eignet sich nur für Texte, dennoch besser als nichts.

Wie schon meine Vorposten sagen, gibt es wenig effektive Möglichkeiten sich vor Manipulationen zu schützen, weil generell alles manipulierbar ist. Den Angreifenden Hürden zu stellen ist wohl das beste Mittel. Weiteres findest du in [FAQ] NET Assembly vor Disassembling schützen (Obfuscator).

Neben Obfuscatoren gibt es noch Packing. Stichwort: .NETZ.

zero_x

2.891 Beiträge seit 2004
vor 11 Jahren

neu in .NET 4.5 ist die
>
-Klasse.

Nö, die gibt's schon seit 2.0.