Entwickler-Ecke
Sonstiges (Delphi) - Eigene Variablen vor Änderung durch fremdes Prog schützen
Airtrox - Do 04.03.10 22:40
Titel: Eigene Variablen vor Änderung durch fremdes Prog schützen
Hey,
ich habe ein ziemliches Problem:
Ich speichere einige globale Variablen mit Werten in einem Programm, welche auch sichtbar sind. Nun gibt es Programme wie TSearch (
http://www.downloads.de/details.php?tabelle=Computerspiele&id=3510 ) womit man die Werte ändern kann, was natürlich nicht sein darf.
Gibt es eine Möglichkeit, das zu unterdrücken? Die Variablen (Integer) müssen auf jeden Fall ausgegeben werden, dürfen aber keinesfalls veränderbar durch irgendwelche Programme sein. Hat jemand einen Vorschlag?
Moderiert von
Narses: Topic aus Dateizugriff verschoben am Fr 05.03.2010 um 11:18
Moderiert von
Narses: Titel geändert, war: "Variablen nicht veränderbar".
FinnO - Do 04.03.10 22:46
na ja, wenn man etwas im SPeicher verändert, kann man da nix machen. Es sei denn, du speicherst die Variable redundant an mindestens einem anderen Ort... Was einem natürlich auch nichts hilft, wenn mit TSearch explizit diese Zahl verändert werden soll. Du kannst natürlich um Trainern entgegenzuwirken, was ich mal vermute, was du möchtest, die Zahl z.B. mit ienem Faktor multipliziert im Speicher aufbewahren.
Airtrox - Do 04.03.10 23:25
Nunja, das Problem ist, das ich das nicht bedacht habe und viele Variablen habe, die auch schon oft ausgegeben werden. Alle zu multiplizieren sowie dividieren wäre nicht sehr arbeitserleichternd.
P@u1 - Do 04.03.10 23:35
wenn es sich nur um integers handelt, könntest du die evtl. intern als strings speichern und dann wenn sie benutzt werden konvertieren oder beide sowohl als integer als auch als string und dann immer abgleichen und wenn nen unteschied festgestellt wird weißt du das "gecheatet wurde".
Oder kriegt TSearch das trotzdem hin?
Airtrox - Fr 05.03.10 01:05
Ja ich denke es ändert auch strings und bei vielen var bringt eigentlich auch ein faktor nichts. Eine onchange procedure für variablen bräuchte man :D
Delete - Fr 05.03.10 01:40
Was ist dein Problem? dass ein anderes Programm deinen Speicher ausliest und verändert?
Airtrox - Fr 05.03.10 08:17
Ganz genau ist das Problem.
BenBE - Fr 05.03.10 14:57
Nimm allen andern Prozessen die Zugrifsberechtigungen auf deinen Prozess weg und debugge dann deinen Prozess mit dir selbst.
Teil 1: Dadurch erschwerst Du den Zugriff auf deinen Speicher auf normalem Wege
Teil 2: Damit verhinderst Du, dass fremde Programme sich über den Umweg der Debug Privilegien Zugriff auf deinen Speicher holen.
Kann man mit einem Teil 3 (Kernel-Hook auf die Prozess- und Speicher-Funktionen) zwar noch komplettieren, aber i.d.R. braucht man das nicht. uall hat für die ersten beiden Teile mal ein Beispiel gemacht, wie man das mit wenig Source umsetzt. Ging dort speziell zwar drum, das Beenden des Prozesses zu verhindern, aber es geht halt auch für andere Zwecke zu verwenden.
Airtrox - Fr 05.03.10 16:20
BenBE hat folgendes geschrieben : |
| Nimm allen andern Prozessen die Zugrifsberechtigungen auf deinen Prozess weg und debugge dann deinen Prozess mit dir selbst. |
Diesen Teil verstehe ich nicht? :shock:
der organist - Fr 05.03.10 19:26
Airtrox hat folgendes geschrieben : |
| Ja ich denke es ändert auch strings und bei vielen var bringt eigentlich auch ein faktor nichts. Eine onchange procedure für variablen bräuchte man :D |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function OnCrypt(Number:Integer):Integer; var factor:Integer; FirstResult:String; begin factor:=Random(9999); if factor=0 then factor:=1; FirstResult:=IntToStr(factor); for k from 0 to 3 do if Length(IntToStr(FirstResult))<4 then FirstResult:='0'+FirstResult; Result:=StrToInt(IntToStr(Number*factor)+FirstResult); end; |
entschlüsselung selber machen :D
SvenAbeln - Fr 05.03.10 19:55
@
der organist Tolle Verschlüsselung, alle Zahlen >= 22 sprengen den Integer ;-) und warum der Umweg über die Strings?
Ohne die ganzen Stringoperationen sieht das dann so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| function OnCrypt(Number:Integer):Integer; var factor:Integer; begin factor:=Random(9998)+1; Result:=(Number*factor*10000) + factor; end; |
Damit du mit deinem
Result bei einem Integer bleibst, darf
Number maximal 21 sein.
maxint = 2147483647
( 2147483647 - 9999) / 9999 / 10000 = 21,476884168
Airtrox - Fr 05.03.10 19:59
Na gut, damit hätte ich eine Verschlüsselung, aber selbst wenn ich den Faktor für die Entschlüsselung speichere, kann dieser wieder ausgelesen werden.
Gausi - Fr 05.03.10 20:55
Mach das, was BenBE dir empfohlen hat. Ich hab auch mal probiert, einen bestimmten String schwerer auslesbar zu machen. Habe dann mit Verschlüsselungen rumgehampelt und den entschlüsselten String nur lokal in der Methode gehabt, die diesen String benötigt.
Und dann hab ich mal probiert, den mit OllyDbg auszulesen. Selbst für mich als Laien war das dann eine Sache von ein paar Sekunden.
Also: Zugriff von außen erst gar nicht zulassen. Ob das nun besonders sinnvoll ist, weiß ich nicht. Wozu braucht du das denn so unbedingt? Sind das sicherheitskritische Daten?
der organist - Fr 05.03.10 21:50
is ja eigentlich total schnuppe, was fürn Random du benutzt....und der "Umweg" über die Strings, naja, es gibt Leute, die nich auf so was ausgefuchstes wie das *10000 kommen. :x Reicht ja auch ein Random (20).....
Delete - Fr 05.03.10 23:27
Um was für ein super wichtiges Programm handelt es sich denn das du so viel Aufwand treibst, um deine Variablen vor Veränderungen von außen zu schützen?
Airtrox - Sa 06.03.10 02:42
Gausi hat folgendes geschrieben : |
| Also: Zugriff von außen erst gar nicht zulassen. Ob das nun besonders sinnvoll ist, weiß ich nicht. Wozu braucht du das denn so unbedingt? Sind das sicherheitskritische Daten? |
Habe ich gelesen, allerdings weiß ich nicht so recht wie ich das umsetzen kann?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!