Rot13 Template?
-
Ich habs - er will eine TMP-Version des Algorithmus basteln!

Die Sache ist einfach die, dass ich nicht will, dass Texte, etc. direkt im Quellcode zu finden sind.
Und hier faengt das Problem an - wieso? Scriptkiddies?

Edit: Vielleicht willst du nicht, dass man die Texte nach dem disassemblieren in der PE finden kann...
-
Leute, es muss ihm nicht jeder Forenteilnehmer erklären, dass eine Templatelösung höchstwahrscheinlich an seiner eigentlichen Anforderung vorbeigeht. Das war schon mit der ersten Antwort gesagt.
-
Nehmen wir folgendes an:
const std::string MY_NAME = "Name";So, jetzt kompiliere ich und man findet "Name" in der .exe und das ohne großen Aufwand.
Jetzt kann ich natürlich auf www.rot13.de gehen und mach daraus:
const std::string MY_NAME = "Anzr";Gut, das erfüllt meine Anforderungen. Leider muss ich jedes Mal, wenn ich die Daten ändern will erst auf www.rot13.de gehen.
Idee: Ein Template, dass aus einem Klartext zur Compiletime (
) daraus Rot13 macht.const std::string MY_NAME = ROT13("Name");Dadurch findet man in der Executable (mit einem Hexeditor und Search String) "Name" nicht sofort und der Quelltext lässt sich trotzdem gut anpassen.
Muss auch nicht unbedingt Rot13 sein, kann auch was anderes sein. Mich interessiert das einfach auch, weil ich mich Frage, ob das mit einem Template oder meinetwegen auch anders möglich ist.
-
SeppJ schrieb:
Leute, es muss ihm nicht jeder Forenteilnehmer erklären, dass eine Templatelösung höchstwahrscheinlich an seiner eigentlichen Anforderung vorbeigeht. Das war schon mit der ersten Antwort gesagt.
Na ja, verstanden hat er's ja offenbar immernoch nicht.

-
Dafür braucht man kein Template, Makros reichen aus.
-
Als erstes sollte du mal den Unterschied von Compilen und Programm starten erkennen!? Das kommt mir alles etwas komisch vor...
Du willst also nicht das jemand deine Executable scannt und den String findet?
Du machst dir ein einfach Routine inder du deine String zuerst entschlüsselst, dann benutzt und dann wieder verschlüsselst...Dazu musst du erst dein String natürlich irgentwie verschlüsselt in deinem Programm ablegen.Ich entschludige mich wenn etwas falsch verstanden habe!
MfG
-
Warum sollte eine Templatelösung nicht der richtige Ansatz sein?
Es ist doch genau der Zweck, dass zur Compiletime aus dem Klartext der "verschleierte" Text gemacht wurde, und somit auch verschleiert in der .exe zu finden ist.
Alles was erst zur Laufzeit geschieht setzt voraus, dass der Klartext irgendwo im Quelltext rumliegt. Und genau darum geht es doch. Das soll so nicht sein.
Es wird also zwei mal Rot13 geben. 1x als Templatelösung (für die Verschlüsselung zur Compiletime) und 1x als Funktion (zur letztendlichen Entschlüsselung).
std::string x = ROT13_T("Mein Klartext"); // Compiletime (Template)
Daraus wird dann zur Laufzeit:
std::string x = "Zrva Xynegrkg"; // Run timeUnd gearbeitet wird damit dann so:
MeineWicthtigeFunktion(Rot13(x)); // Run time (Funktion)Ich nehme natürlich auch gerne eine alternative Lösung an. Ein Makro wird aber auch erst zur Laufzeit aufgelöst, so das wieder der Klartext in die .exe mit einfließt...

-
yihaaa schrieb:
Dazu musst du erst dein String natürlich irgentwie verschlüsselt in deinem Programm ablegen.
Und genau das soll das Template erledigen. Damit ich durch den Quellcode noch gut durchsteige und einfach mal etwas ändern kann, soll das ein Template erledigen.
-
Maaaaaarvin schrieb:
Ein Makro wird aber auch erst zur Laufzeit aufgelöst
Nein!
-
cooky451 schrieb:
SeppJ schrieb:
Leute, es muss ihm nicht jeder Forenteilnehmer erklären, dass eine Templatelösung höchstwahrscheinlich an seiner eigentlichen Anforderung vorbeigeht. Das war schon mit der ersten Antwort gesagt.
Na ja, verstanden hat er's ja offenbar immernoch nicht.

na da bin ich ja mal gespannt, wie es weitergeht.
anscheinend hat er es von anfang an richtig verstanden, nur den quellcode falsch erwähnt.welches makro oder template könnte man denn für ROT13 zur Compilezeit nehmen?
jenz
-
Ne, er muss es ja auch wieder entschlüsseln.
-
hat er ja auch geschrieben, dass er es wieder entschlüsseln will, eben mit seiner rot13 funktion zur laufzeit
-
Geht nicht. Du kannst String-Literale nicht zur Compilezeit ändern. Was gehen würde, ist, dass Du das Literal aus einzelnen chars zusammensetzt.
So in der Art:rot13<'d', 'e', 'r', ' ', 'T', 'e', 'x', 't'>::literal. Das ist aber natürlich nicht schön.
Wie wäre es, wenn Du ein kleines Programm schreibst, dass alle Deine Quellen durchgeht, und Klartext-Strings mit verschwurbelten Strings ersetzt? So schwer ist das nicht.
-
Ah hm ja, bleibt das Problem, dass es nicht geht.
-
cooky451 schrieb:
Ah hm ja, bleibt das Problem, dass es nicht geht.
Wieso sollte das nicht gehen? Vermutlich würde man das zum Beispiel mit einem etwas angepassten
boost.assignhinbekommen. Insbesondere aber mit c++11 sollte das nicht so schwer sein.
-
Tachyon schrieb:
cooky451 schrieb:
Ah hm ja, bleibt das Problem, dass es nicht geht.
Wieso sollte das nicht gehen? Vermutlich würde man das zum Beispiel mit einem etwas angepassten
boost.assignhinbekommen. Insbesondere aber mit c++11 sollte das nicht so schwer sein.assign wird zur Laufzeit ausgeführt. Du kannst Zeichenkettenliterale tatsächlich nicht zur compilezeit verändern, weder mit Templates, noch mit Makros (versuch es mal, damit du verstehst, warum es nicht geht!). Das was dem am nächsten kommt, wäre wohl eine Krücke nach der Art
rot13<'H', 'a', 'l', 'l', 'o'>()::value;Das ginge, ist aber sicher nicht nach der Vorstellung des Threaderstellers. Hier bietet sich irgendeine Art externes Programm an, welches man noch vor dem Präprozessor auf den Quellcode loslässt.
-
SeppJ schrieb:
Hier bietet sich irgendeine Art externes Programm an, welches man noch vor dem Präprozessor auf den Quellcode loslässt.
Was ich ja auch geschrieben habe.

-
Sepp schrieb:
wäre wohl eine Krücke nach der Art
rot13<'H', 'a', 'l', 'l', 'o'>()::value;Das ginge, ist aber sicher nicht nach der Vorstellung des Threaderstellers.
#include <iostream> template<char c> char constexpr rot13C() { return (c + 13 > (c >= 'A' && c <= 'Z' ? 'Z' : 'z'))? c - 13 : c + 13; //Edit²: Lol! Jetzt gehen aber auch Kleinbuchstaben. } template<char...c> struct rot13 { static char constexpr value[] = { rot13C<c>()..., '\0' }; }; template<char...c> char constexpr rot13<c...>::value[]; int main() { std::cout << rot13<'B', 'l', 'a'>::value << '\n'; }Das wäre mein Vorschlag, aber der ist IMO nicht besonders hübsch...

-
WAs auch noch lustig wäre: User-Defined Literals mit Variadic Templates. Aber da hab ich schon keine Lust mehr drauf.
Edit: Nein, gehen kann das gar nicht.
-
Eine Möglichkeit, das ganze etwas schöner zu machen, sind zusammengesetzt int-Literale aus chars.
template <int...> struct string { ... }; typedef string<'Hell', 'o Wo', 'rld!'> s; ...Ist ein bisschen besser lesbarer.
@Sone: Du bist ein Idiot. GTFO.