C++ string in Ftp-Funktion "verschleiern"
-
Ja, ich weiss ist es denn möglich das ganze so zu verschlüsseln das es "fast" unknackbar ist?
-
Mal ein bischen stümperhaft umgesetzt:
#include <iostream> #include <array> #define GCC_NOINLINE __attribute__((noinline)) char KEY = 107; template<char...> struct CountChars; template<char Cur> struct CountChars<Cur> { static std::size_t const count = 1; }; template<char Cur, char... Rest> struct CountChars<Cur, Rest...> { static std::size_t const count = 1 + CountChars<Rest...>::count; }; template<char... Chars> constexpr std::array<char, CountChars<Chars...>::count> encrypt() { return { { static_cast<char>((Chars ^ KEY))... } }; } template<bool withNull, std::size_t N> GCC_NOINLINE std::array<char, N + withNull> decrypt( std::array<char, N> const& encrypted) { std::array<char, N + withNull> decrypted; for(std::size_t i = 0; i < N; ++i) decrypted[i] = encrypted[i] ^ KEY; if(withNull) decrypted[N] = 0; return decrypted; } int main() { auto str = encrypt<'H','e','l','l','o',',',' ','W','o','r','l','d','!'>(); std::cout << decrypt<true>(str).data() << '\n'; }Strings im Compilat:
/lib64/ld-linux-x86-64.so.2
libstdc++.so.6
__gmon_start__
_Jv_RegisterClasses
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
_ZNSt8ios_base4InitD1Ev
_ZSt4cout
_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c
_ZNSt8ios_base4InitC1Ev
libm.so.6
libgcc_s.so.1
libc.so.6
__cxa_atexit
__libc_start_main
GLIBC_2.2.5
GLIBCXX_3.4
H#L$
D$ H
L(H H#T
l$ L
t$(L
|"Noinline ist bei Optimierungen Pflicht, sonst inlined der Compiler den decrypt Aufruf und berechnet das Literal ganz/teilweise zur Compilezeit.
Die Sache ist nicht perfekt, aber gegen stümperhafte Reverse Engineering "Attacken" durchaus brauchbar.
-
...
-
Ok vielleicht sollte ich das Thema erst noch lassen denn das Beispiel ist für mich noch zu kompliziert aber trotzdem ein dickes danke an alle die helfen wollten. Aber da wir gerade eh beim Thema Server sind kennt jemand ein gutes Deutsches WinSock Buch?
-
moin354 schrieb:
Ja, ich weiss ist es denn möglich das ganze so zu verschlüsseln das es "fast" unknackbar ist?
Nein, denn es ist klar, dass dein Passwort entschlüsselt sein muss, sobald der Aufruf von InternetConnect erfolgt und genau da kann man ansetzen - und das schafft auch jedes Skriptkiddy.
Der Ansatz ist völliger Unfug und durch nichts zu retten. Auch wenn es schon erwähnt wurde, merke dir: alles was dein Programm kann, kann auch der User. Wenn er das nicht können soll, darf es auch dein Programm nicht können. So einfach ist das.
-
moin354 schrieb:
Ok vielleicht sollte ich das Thema erst noch lassen denn das Beispiel ist für mich noch zu kompliziert aber trotzdem ein dickes danke an alle die helfen wollten. Aber da wir gerade eh beim Thema Server sind kennt jemand ein gutes Deutsches WinSock Buch?
Ist Dir mein Code auch zu kompliziert?
-
ehm so halb blick ich durch aber eine Erklärung wäre nett :D. Ahh Jetzt hab ichs verstanden
tut mir leid hab gerade sehr langsam geschaltet ^^. Eine Frage noch ratet ihr mir dazu den Code von Volkard zu benutzen?
-
Einen Riesenaufwand für die Obfuscation im Programm zu betreiben ist fragwürdig; für Sicherheit musst du dir ohnehin etwas anderes überlegen.
Nexus schrieb:
Wenn du nur das Basis-FTP-Protokoll benutzt, wird das Passwort im Klartext übermittelt, das ist also sowieso nicht sicher.
volkard schrieb:
Außerdem kann man leicht mit einem Netzwerksniffer wie wireshark die FTP-Pakete rausfiltern und anschauen.
-
Gibt es denn eine sichere Möglichkeit mir die Daten zu übermitteln? muss auch nicht über einen Server sein. Achja wie ist das gemeint mit "Nimmt er einen Debugger, kann er den Aufruf von InternetConnect finden und sich die Parameter zur Laufzeit anschauen." ?
-
Sobald die Daten sich auf einer Maschine befinden, über die du keine Kontrolle hast, hast du rein prinzipiell auch keine Kontrolle über die Daten. Der einzige Weg, sicher zu verhindern, dass jemand an deine Daten kommt, ist, die Daten nicht aus der Hand zu geben. Was du hier versuchst, ist bekannt als "security through obscurity" und kann rein prinzipiell niemals echte Sicherheit garantieren.
-
Und wie machen es dann die Online Spiele?
-
...
-
moin354 schrieb:
Und wie machen es dann die Online Spiele?
Bei Online Spielen muss sich jeder Benutzer doch mit einem eigenen Account anmelden!?
-
ehm ich wollte damit jemanden zitieren

-
@ Swordfish ehm ich wollte damit jemanden zitieren :D. Aber die connecten doch auch zu dem Server? Entschuldigung für den doppel Post

-
moin354 schrieb:
@ Swordfish ehm ich wollte damit jemanden zitieren :D. Aber die connecten doch auch zu dem Server? Entschuldigung für den doppel Post

Ja, und auf dem Server läuft ein Serverprogramm, das sich um alles kümmert, was der User nicht wissen darf.
-
könnte ich nicht rein theoretisch auch so ein Programm verwenden? Wenn ja bitte ein Beispiel.
-
...
-
Du erstellst für jeden Benutzer einen Account auf dem Server. So hat jeder sein eigenes Passwort und du musst keins mehr im Programm mitschleppen.
-
Captain Obvious schrieb:
Du erstellst für jeden Benutzer einen Account auf dem Server. So hat jeder sein eigenes Passwort und du musst keins mehr im Programm mitschleppen.
Ein Captain Obvious würdiges Posting
