Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

13.10.2012, 20:58

Strings in der Executable verschlüsseln?

Hallo,

hab mal wieder ein Problem, und zwar wie man dem Titel unschwer entnehmen kann, möchte ich
das wichtige Strings in der Exectuable verschlüsselt werden. Es soll also nicht so einfach möglich
sein diese Strings auszulesen und zu verändern.

Dass es keinen 100% Schutz gibt, ist mir klar. Ich hab auch schon Google angeschmissen,
aber die vorgestellten Lösungen haben mich nicht wirklich zufriedengestellt, dass liegt
vor allem da dran, dass ich die Strings im Quelltext weiterhin auf Klartext haben möchte.

Deswegen hier nochmal die Frage:

Ist es möglich Strings, welche im Klartext im Quelltext stehen so zu verschlüsseln, dass
diese nicht mehr problemlos ausgelesen werden können?

Vielen Dank schon mal im Voraus!

2

13.10.2012, 21:09

Mir fallen spontan 2 Möglichkeiten ein:

1) Du setzt den String in deinem Programm zusammen, also evtl. durch bestimmte Rechnungen.
2) Du verschlüsselst deinen String z.B. mit AES und den Schlüssel, denn du für das Endkodieren brauchst, lässt du dir errechnen.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

13.10.2012, 21:15

Das Problem beim Errechnen und Zusammensetzen ist wahrscheinlich, dass, je nachdem wie schlau dein Compiler ist, die Rechnungen einfach rausoptimiert werden.

4

13.10.2012, 21:22

Das Problem ist dass es nichts bringt den String zu verschlüsseln, denn sobald dieser im Quelltext auf Klartext steht,
steht er auch in der Executable auf Klartext drin. Vielleicht wäre auch die bessere Frage gewesen, wie es überhaupt
dazu kommt das nur die Strings in der Exectuable auf Klartext drin stehen.

5

13.10.2012, 21:27

Das Problem ist dass es nichts bringt den String zu verschlüsseln, denn sobald dieser im Quelltext auf Klartext steht,
steht er auch in der Executable auf Klartext drin. Vielleicht wäre auch die bessere Frage gewesen, wie es überhaupt
dazu kommt das nur die Strings in der Exectuable auf Klartext drin stehen.
Der verschlüsselte String in deinem Quelltext ist nicht in Klartext, deshalb entschlüsselt es man ja. Aber Spiele Programmierer hat Recht, die Rechnung würde schon fertig da stehen.

Btw: Wieso willst du nicht, dass ein String in Klartext steht?

6

13.10.2012, 21:32

Aber ich möchte den String ja weiterhin auf Klartext im Quelltext. :P

@BTW.: Weil man ansonsten mein Programm zu leicht manipulieren kann. ^^

7

13.10.2012, 21:35

Aber ich möchte den String ja weiterhin auf Klartext im Quelltext. :P

Ich möchte dass nicht, weil man ansonsten mein Programm zu leicht manipulieren kann. ^^
Das widerspricht sich eigentlich. Was für ein Programm ist es, wenn ich fragen darf.
Wahrscheinlich gibt es auch eine andere Möglichkeit, ohne den String zu benutzten.
(PS: Man kann den String immer manipulieren, da er letztendlich im RAM liegt.)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

8

13.10.2012, 21:35

Jeder String der im Quelltext im Klartext steht wird auch in der Exe im Klartext sichtbar sein. Wenn du nicht auf das String Feature in C++11 warten willst könntest du an den Anfang des Strings eine Signatur stellen und dann nach dem compilen in der Exe in einem separaten Schritt nach dieser Signatur suchen und den String entsprechend verschlüsseln.
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

9

13.10.2012, 21:37

Als kleines Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>

std::string encodedStr = "Ibmmp";

void decode(std::string & input) {

for(int i = 0; i < input.lenght(); ++i) {
--input[i];
}

}

int main() {
std::cout << decode(encodedStr);
}


Das ganze sollte "Hallo" ausgeben im Kompilat sollte Hallo aber nicht auftauchen(habs nicht getestet).
greate minds discuss ideas;
average minds discuss events;
small minds discuss people.

10

13.10.2012, 21:40

@Sortoc: Man könnte es disassemblieren und ändern, je aufwändiger das Dekodieren ist, desto mehr Zeit braucht wahrscheinlich die Person, um den Algorithmus zu verstehen und zu ändern...

Werbeanzeige