Autor Beitrag
Airtrox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Do 04.03.10 22:40 
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 ( www.downloads.de/det...erspiele&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 user profile iconNarses: Topic aus Dateizugriff verschoben am Fr 05.03.2010 um 11:18
Moderiert von user profile iconNarses: Titel geändert, war: "Variablen nicht veränderbar".
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 117



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: 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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 05.03.10 01:40 
Was ist dein Problem? dass ein anderes Programm deinen Speicher ausliest und verändert?
Airtrox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Fr 05.03.10 08:17 
Ganz genau ist das Problem.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Airtrox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Fr 05.03.10 16:20 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Fr 05.03.10 19:26 
user profile iconAirtrox hat folgendes geschrieben Zum zitierten Posting springen:
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


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
// Funktion, die die Zahl mit einer Zufallszahl multipliziert und diese am ende als vierstellige 
//Zahl anhängt. <== sogar mit Kommentar

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

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Fr 05.03.10 19:55 
@user profile iconder 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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?

_________________
We are, we were and will not be.
der organist
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Fr 05.03.10 21:50 
user profile iconSvenAbeln hat folgendes geschrieben Zum zitierten Posting springen:
@user profile iconder 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:
ausblenden 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


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).....

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Sa 06.03.10 02:42 
user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
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?