Szyfrowanie stringów w C++ | StringCrypt

W dzisiejszym wpisie prezentuje Tobie autorską klasę StringCrypter służącą do szyfrowania łańcuchów tekstowych w języku programowania C++. Klasa jest bardzo prosta w użyciu. Wystarczy utworzyć jej instancje przekazując do konstruktora klucz szyfrujący i skorzystać z dwóch dostępnych metod takich jak encryptString i decryptString.

Olbrzymią zaletą tej zaimplementowanej klasy jest możliwość wykorzystania zwróconych wyników w innych kodach źródłowych lub tekstowych plikach konfiguracyjnych. Zaszyfrowany string jest przekształcany do specjalnie zaimplementowanego formatu, który wykorzystuje szesnastkowy system liczbowy. Dzięki temu zabiegowi dane wyjściowe nie posiadają w sobie dziwnych szlaczków znanych z tablicy ASCII i mogą zostać wykorzystywane bez żadnej zmiany kodowania w edytorach programistycznych. Oczywiście jeśli chcesz i szukasz tylko sposobu na konwersje typu string do hex lub hex do string w języku C++ to możesz delikatnie zmodyfikować kasę StringCrypt. Przykład praktycznego wykorzystania naszego skryptu szyfrującego stringi, znajduje się na końcu tego wpisu.

Szyfrowanie string w C++ – przykład użycia

Jeśli chcesz użyć naszej klasy wystarczy, że umieścisz pliki stringCrypter.h i stringCrypter.cpp w folderze ze swoim projektem i dołączysz ją za pomocą dyrektywy preprocesora #include tak jak ma to miejsce na poniższym przykładzie.

Wynik działania powyższego programu

x
Kompilacja i wynik działania powyższego kodu źródłowego programu korzystającego z zaimplementowanej klasy StringCrypter.

Plik nagłówkowy StringCrypter.h

Implementacja klasy StringCrypter.cpp

Praktyczny przykład z szyfrowaniem zmiennych

Na samym wstępie warto zapoznać się z jednym z poprzednich wpisów na naszym blogu. Dotyczył on dynamicznego ładowania i wykorzystywania funkcji WinAPI wprost z bibliotek DLL systemu operacyjnego Microsoft Windows. Ma to na celu zmniejszanie wykrywalności aplikacji przez mechanizmy analizy statycznej i heurystycznej programów antywirusowych.

Zmniejszanie wykrywalności wskaźnikami w C++

Być może może już się domyśliłeś, że poprzednią technikę można zastosować właśnie z naszą klasą szyfrującą ciągi tekstowe. Wystarczy, że nazwy funkcji i bibliotek DLL umieścimy zaszyfrowane w zmiennych lub stałych w programie i będziemy mogli je potem odszyfrowywać i ładować tylko wtedy, kiedy są potrzebne. Skrócona lista kroków które musisz wykonać:

Lista kroków zmniejszających wykrywalność

  1. Zaszyfruj nazwy funkcji dowolnym kluczem szyfrującym
  2. Zaszyfruj nazwy bibliotek dowolnym kluczem szyfrującym
  3. Umieść ich zaszyfrowane wersje w zmiennych, stałych lub pliku
  4. Umieść klucz szyfrujący w zmiennej, stałej,pliku lub pobieraj go z internetu w sposób dynamiczny
  5. Przed uruchomieniem wskaźników funkcyjnych ładujących funkcje WinAPI, odszyfruj funkcje i bibliotekę którą chcesz użyć


Kod źródłowy z przykładem

Zaszyfrowaliśmy sobie napis z przykładową nazwą funkcji CopyFileA i nazwą biblioteki Kernel32.dll za pomocą klucza szyfrującego a9d1r6cx4x9v0d5p7w4m5k29v9xc02457sc64u1h. Następnie wszystkie trzy wartości umieściliśmy w kodzie źródłowym.

encrypt String function in C++
Zaszyfrowane do dalszego użytkowania nazwy funkcji i bibliotek DLL

Teraz wystarczy, że użyjemy uzyskane zaszyfrowane wartości tekstowe w kodzie źródłowym tak jak ma to miejsce na poniższym listingu kodu.

W linijce 14-18 widzimy w jak prosty sposób używamy zaszyfrowanych funkcji w naszej aplikacji. Nazwy funkcji i bibliotek odszyfrowane są ze stringów dopiero wtedy, gdy są nam potrzebne. Oczywiście klasę możesz użyć do zupełnie innych powiązanych celów takich jak:

  • Ukrywanie przed analizą w ciągach tekstowych adresów e-mail/haseł,
  • Szyfrowania zbieranych logów,
  • Zaciemnianiem komunikacji sieciowej w architekturze klient-serwer.

Jeśli klasa w przyszłości ulegnie jakiejś zmianie to warto zaglądać i obserwować nasze nowe konto GitHub HakerEduPL.

Jeśli interesuje Cię język C++ to zapraszam Cię również do obejrzenia zapisu transmisji na żywo na YouTube o C++. Zapraszamy Ciebie również na naszego fanpage #HakerEduPL. To by było na tyle i zachęcamy Ciebie do rozszerzania swojej wiedzy na temat programowania.




3 thoughts to “Szyfrowanie stringów w C++ | StringCrypt”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *