Entwickler-Ecke

Sonstiges (Delphi) - Sicherheit von Variablen im Speicher


ebs - Do 13.10.05 15:12
Titel: Sicherheit von Variablen im Speicher
Hallöchen,
ich habe mir mal Gedanken über die Sicherheit von Variablen im Speicher gemacht. Und zwar habe ich eine ziemlich sensible Datei, die ich verschlüsselt habe. Nun lese ich das ganze in meinem Programm ein, und entschlüssele es und speicher es in die verschiedensten Variablen. Nun wollte ich mal wissen, ob man die unverschlüsselten Variablen aus dem Speicher auslesen könnte. Ist das möglich, und wenn, wieviel Arbeit macht das.

Danke für eure Hilfe


Narses - Do 13.10.05 15:21

Moin!

Es stellt praktisch kein Problem dar, auf Variablen direkt im Speicher zuzugreifen (gibt doch hier ein "Spiele-Trainer"-Tutorial von en!gma, da wird praktisch genau das gemacht).

Das kannst du auch nicht wirklich verhindern, denn dein Programm soll ja schließlich auch an die Daten rankommen... da hilft nur "Verschleierungstaktik", möglicht viel, weit und umständlich verteilen... :wink:

cu
Narses


BenBE - Do 13.10.05 16:30

Es gibt eine Möglichkeit, anderen Prozessen die Zugriffsrechte wegzunehmen; uall erwähnte aber in fast dem selben Atemzug auch gleich die Technik, mit der man diesen Schutz wieder aufheben kann. Und so schwierig war dessen Umsetzung nicht.

Das einzige, was hier wirklich hilft, sind zwei Dinge:

1. Daten verschleiern (so wie Narses das bereits sagte)

und zweitens (fast noch wichtiger)

2. Daten explizit löschen und versuchen so kurzfristig im RAM zu halten, wie nur irgend möglich ...

Sofern es möglich ist, sogar nur gehashte Daten entschlüsseln und mit den Hashs gegenprüfen, so dass die eigentlichen Daten also nur für Bruchteile im Speicher liegen.

Ansonsten kannst Du nicht wirklich viel machen...

P.S.: Debugger-Detections und Anti-Debugging-Hacks helfen zwar kurzfristig, halten aber keinen ab, der wirklich an deine Infos ran will.


Blackheart666 - Do 13.10.05 16:45

Ich Denke das, das ziehmlicher Quatch ist - sicher kannst fast jeder ziehmlich einfach an deine Variablen rankommen, daraus besteht doch dein Programm.
Aber um deine Datei wenn sie denn verschlüsselt ist zu knacken bedarv es etwas mehr als 1..2 Variablen aus deinem Programm zu lesen.
Falls nicht - mach die Probe aufs Ex.. (Wer knackt meinen Code)


Gausi - Do 13.10.05 16:51

Mich würde auch mal der Zweck der Übung interessieren. Du hast also eine verschlüsselte Datei, die mit deinem Programm entschlüsselt wird. Was macht das Programm mit den unverschlüsselten Daten? Einfach nur aus Spass im Speicher halten, oder passiert damit was? Werden die evtl. sogar angezeigt?

Mir ist nicht klar, warum der User mit deinem Programm die Datei entschlüsseln darf (bzw. es automatisch passiert), er die unverschlüsselten Daten aber nicht sehen darf...


ebs - Do 13.10.05 18:33

Hallo nochmal,
also in der Datei stehen ungefähr 100000 Zahlen, die in verschieden Arrays stehen. Das Programm errechnet darus extrem komplexe Formeln, die dann zur Darstellung in einem Graphhen dienen. So dauert die Berechnung ca. 1 1/2 Stunden. Ich habe das ganze mal umgeschrieben, sodass das Programm dann immer nur die gewünschte Zahl rausnimmt, allerdings dauert es dann ca. 2 Stunden!!


uall@ogc - Fr 14.10.05 14:31

und warum muss das nun verschlüsselt sein?

kannst ja mal nen kleiens prog mit deinem algo basteln, wo in der textdatei irgendwas verschlüsseltet steht und das entschlüsselte zeigst du dann in nem label an. ich sach dir dann wie du das berechnest ;)


ebs - Fr 14.10.05 20:07

Da das ganze verkauft werden soll, und nicht jeder die Zahlen nach seinem Geschmack verändert werden sollen. Außerdem wird nicht der ganze Inhalt angezeigt, sondern nur das, was verändert werden soll. Aber geht mal zurück zu meiner eigentlichen Frage :(


r4id3n - Fr 14.10.05 21:02

Es gibt möglichkeiten ... Such einfach mal nach DebugProtection oder MemDump bei Google ... Soweit ich weiß besteht der Schutz darin, sich in die ReadMem zu hooken und einfach 0 zurück zu geben, sollte der eigene Speicherbereich gelesen werden (Stichwort DLL-Injection) ...