StringEncrypt – polimorficzne szyfrowanie

Zachęcony pozytywnymi komentarzami dotyczącymi mojego projektu StringEncrypt, postanowiłem zaktualizować wszystko, co się dało i spełnić marzenia fanów tego niezwykłego rozwiązania.

Co to jest StringEncrypt?

To aplikacja do szyfrowania stringów i plików, generująca polimorficzny kod dekryptora. Ze stroną, WebAPI, dedykowanym rozszerzeniem do VSCode (ponad 4k instalacji) i aplikacją okienkową. Coś dla prawdziwych hakerów!

Silnik projektu jest wykorzystany w moich pozostałych narzędziach do masowego, polimorficznego szyfrowania stringów (w AutoIt Obfuscator i JObfuscator).

Szyfrować i generować kod można w następujących językach programowania:

Nowa wersja przynosi ogrom zmian, w tym najważniejsze – wsparcie dla wielu nowych języków programowania, tony bugfixów i najważniejsze – zagnieżdżone pętle polimorficzne.

Zagnieżdżone pętle polimorficzne

Jednym z zarzutów i wektorów ataku na StringEncrypt (w przypadku generatorów np. C/C++) było wykorzystanie narzędzi do ekstrakcji stringów, takich jak flare-floss. Narzędzie to potrafi przeskanować gotowy plik EXE, przeanalizować kod i wyciągnąć nawet zaszyfrowane stringi.

Zgłębiłem temat i cała filozofia tego rozwiązania bazuje na detekcji tzw. tight-loops, czyli ciasnych pętli. flare-floss potrafi rozpoznać krótkie pętle deszyfrujące i poprzez ich emulację wyciągnąć zaszyfrowane stringi, jeśli takie pętle zostały wykorzystane do ich odszyfrowania.

Rozwiązaniem tego problemu było wygenerowanie wielopoziomowo zagnieżdżonych pętli z polimorficznym kodem deszyfrującym co nie wpisuje się już w detekcję prostych pętli.

Przykładowy kod C

// encrypted with https://www.stringencrypt.com (v1.5.0) [C/C++]
// nie_do_wyciagniecia = "Nie tak prosto kolego!"
wchar_t nie_do_wyciagniecia[23] = { 0x0052, 0x71A4, 0x0690, 0x0900, 0x6830, 0x25B1, 0xF185, 0x0009,
                                    0x0074, 0x01D8, 0x82B4, 0x1FC7, 0x5830, 0xFD51, 0x4002, 0xD71F,
                                    0x0073, 0x01C0, 0x0690, 0x18C3, 0xA2D0, 0xD4DE, 0x4000 };

for (volatile unsigned int UCSag = 0, JkERu = 0; UCSag < 23; UCSag++)
{
	JkERu = nie_do_wyciagniecia[UCSag];
	for (unsigned int XptZj = 0; XptZj < 2; XptZj++)
	{
		JkERu = (((JkERu & 0xFFFF) >> (UCSag % 16)) | ((JkERu & 0xFFFF) << (16 - (UCSag % 16)))) & 0xFFFF;
		for (unsigned int HBXqW = 0; HBXqW < 2; HBXqW++)
		{
			JkERu = (((JkERu & 0xFFFF) >> 8) | ((JkERu & 0xFFFF) << 8)) & 0xFFFF;
			JkERu = ((JkERu ^ 0xFFFF) & 0xFFFF);
		}
	}
	for (unsigned int WAUOq = 0; WAUOq < 4; WAUOq++)
	{
		JkERu = ((JkERu & 0xFFFF) - 1) & 0xFFFF;
	}
	for (unsigned int HIbTj = 0; HIbTj < 2; HIbTj++)
	{
		JkERu = (((JkERu & 0xFFFF) << 8) | ((JkERu & 0xFFFF) >> 8)) & 0xFFFF;
		for (unsigned int Dswmt = 0; Dswmt < 2; Dswmt++)
		{
			JkERu = ((JkERu & 0xFFFF) + UCSag) & 0xFFFF;
			JkERu = (JkERu ^ (((JkERu & 0xFFFF) << 9) & 0xFFFF)) & 0xFFFF;
			JkERu = (JkERu ^ UCSag) & 0xFFFF;
		}
	}
	nie_do_wyciagniecia[UCSag] = JkERu;
}

I efekt pracy flare-floss, czyli brak znalezionych stringów metodą skanowania tight-loops:

Poprawki błędów

  • Poprawiłem formatowanie kodu Pythona, żeby było zgodne z regułami PEP.
  • Naprawiłem generator Ruby i sposób zapisywania zaszyfrowanych znaków.
  • Poprawki dotknęły też generatora AutoIt.

6 nowych instrukcji szyfrujących VM:

  • neg — klasyczna negacja (nie not)
  • swap — zamiana bitów w szyfrowanych 8 bitowych bajtach oraz 16 bitowych wartościach dla unicode
  • c_rol / c_ror — rotacje bitowe z użyciem klucza, którym jest licznik pętli
  • xor_shr / xor_shl — szyfrowanie z miksowaniem XOR, tak jak w algorytmach MurmurHash i SplitMix

Kompletna liczba instrukcji VM wykorzystanych do szyfrowania obecnie wynosi 17 (z 11), co jeszcze bardziej urozmaica wygenerowany kod wyjściowy.

Nowe podświetlanie składni

Strona zyskała nowe podświetlanie składni wygenerowanego kodu, porzucony został stary highlighter Syntax Highlighter na rzecz biblioteki Prism.

Pakiety SDK

Przykłady automatyzacji z poziomu Pythona

#!/usr/bin/env python

###############################################################################
#
# String Encrypt WebApi interface usage example.
#
# In this example we will encrypt sample string with default options.
#
# Version        : v1.0.1
# Language       : Python
# Author         : Bartosz Wójcik
# Project page   : https://www.stringencrypt.com
# Web page       : https://www.pelock.com
#
###############################################################################

#
# include StringEncrypt module
#
from stringencrypt import StringEncrypt

#
# if you don't want to use Python module, you can import it directly from the file
#
#from stringencrypt.stringencrypt import StringEncrypt

#
# create StringEncrypt class instance (we are using our activation code)
#
myStringEncrypt = StringEncrypt("YOUR-API-KEY-HERE") # leave empty for demo mode

#
# encrypt a string using all the default options
#
result = myStringEncrypt.encrypt_string("Hello, world!", "label_encrypted")

#
# result[] array holds the encryption results as well as other information
#
# result["error"] (int) - error code
# result["source"] (string) - decryptor source code
# result["expired"] (boolean) - expiration flag
# result["credits_left"] (int) - number of credits left
# result["credits_total"] (int) - initial number of credits

if result and "error" in result:

    # display source code of the decryption code
    if result["error"] == StringEncrypt.ErrorCodes.ERROR_SUCCESS:
        print(result["source"])
    else:
        print(f'An error occurred, error code: {result["error"]} ({result["error_string"]})')

else:
    print("Something unexpected happen while trying to encrypt the string.")

Pełna wersja

Klucz można zakupić za śmieszne pieniądze lub za darmo go zdobyć, pisząc o tym rozwiązaniu na social mediach, artykułach, na forach czy gdziekolwiek się da z linkiem do strony projektu i krótkim opisem oraz screenshotem. Niewiele, prawda?

Na koniec chciałbym jeszcze raz podziękować wszystkim fanom, którzy w dobie AI zmotywowali mnie do tak dużych aktualizacji – bez waszych słów wsparcia by mi się nie chciało aż tak 🙂

Kod do radia Fiat Continental 500 i 250

Masz zablokowane radio w aucie Fiat Continental 500 lub 250? Skorzystaj z dekodera radiowego odblokowującego odtwarzacze w popularnych 500-tkach.

Fiat 250 & 500 VP1/VP2 Kod Do Radia Kalkulator i Generator

Jak odblokować radio w Fiat 500? Wpisz cztery ostatnie numery seryjne z tyłu odtwarzacza i to w zasadzie tyle do wygenerowania kodu odblokowującego.

Generator kodów radiowych dla warsztatów i programistów

Jeśli często generujesz kody lub chcesz dodać generowanie kodów na swoich stronach bądź sprzedawać kody na Allegro czy OLX wypróbuj Generator Kodów Radiowych mojego autorstwa.

Zawiera on algorytmy do odblokowania wielu modeli radioodtwarzaczy, posiada przyjazny interfejs online do generowania kodów radiowych oraz pakiety SDK dla JS, Pythona i PHP do generowania tychże kodów.

Ile można na tym zarobić? Przykładowa tabela z projektowanymi cenami i zarobkami za kody radiowe tutaj.

Samurai Cop

Nie wiem dlaczego nigdy tego nie widziałem, ale to prawdziwa gratka dla fanów samurajów, kina akcji lat 90 i kiczowatego poczucia humoru 🙂

Nic lepszego dzisiaj nie zobaczysz :D, przy okazji świetny plakat promujący

Kalkulator kodu radiowego Jaguar Alpine

Okres wakacyjny wyjątkowo nie sprzyja mojej aktywności zawodowej, ale udało mi się dodać kolejny kalkulator samochodowy do mojej kolekcji.

Tym razem padło na radioodtwarzacze marki Jaguar Alpine.

Jeśli padł Ci akumulator w twoim Jaguarze i posiadasz radio Alpine, skorzystaj z kalkulatora kodu radiowego, aby na podstawie numeru seryjnego radia wygenerować kod odbezpieczający i odblokować radio.

Jak odblokować radio samochodowe Jaguar Alpine

Przy okazji zaktualizowałem SDK pozwalające w prosty i przyjemny sposób generować masowo kody radiowe – Radio Code Calculator. Aktualizacja objęła pakiety dla PHP, JS i Pythona.

Książka o C++ vs Stanisław

Jeśli chcecie się pośmiać w tym smutnym jak p#zda świecie to poczytajcie miażdżące techniczne opinie o książce o C++ polskiego autora Dawida F. na stronie Ceneo, której tytułu nawet nie wymienię w obawie o pozew autora. Raz mi już groził za to, że nie chciałem usunąć wywiadu, którego tu ten geniusz sam udzielił…

https://www.ceneo.pl/126846175#tab=reviews

Polecam komentarze użytkownika Stanisław – nie warto było drażnić lwa hehe, przejechał po niej merytorycznie jak walec po drodze. Rozrywka gwarantowana!

Mój komentarz do tego wszystkiego i do tego, co na Ceneo niektórzy sugerują, że autor wystawia sobie sam pozytywne opinie i oceny, przedstawi pięknie Taylor Swift:

A jak znacie jakieś dobre książki o C++ to zostawcie linka w komentarzu. Może się czegoś ciekawego nauczę 😀

Kalkulator kodu Eclipse ESN

Kalkulator Kodu Odblokowującego Eclipse ESN służy do generowania kodów odblokowujący moduł nawigacji, radia, DVD w autach japońskich marek wykorzystujących jednostkę Eclipse.

Eclipse ESN Kalkulator Kodu Odblokowującego

ESN (skrót od Eclipse Security Network) to system bezpieczeństwa jednostki Eclipse blokujący moduł nawigacji i audio po odpięciu i ponownym włożeniu akumulatora samochodowego.

Jeśli to zrobisz, moduł nawigacyjny poprosi od kod odbezpieczający ESN, aby mógł ponownie działać. To standardowe zabezpieczenie antykradzieżowe.

Jak wygenerować kod odblokowujący ESN?

To proste, wystarczy skorzystać z mojego kalkulatora na stronie:

https://www.pelock.com/pl/produkty/eclipse-esn-kalkulator-kodu-odblokowujacego

https://www.pelock.com/products/eclipse-esn-unlock-code-calculator

Masowe generowanie kodów radiowych

Jeśli chcesz masowo generować kody radiowe i je sprzedawać np. na Allegro, w tym kody Eclipse ESN możesz również skorzystać z kompleksowego pakietu Radio Code Calculator z SDK dla języków programowania Python, PHP, JS.

Oprogramowanie posiada również prosty jak drut interfejs online pozwalający generować kody radiowe, dla osób które nie potrafią programować pod adresem:

https://www.pelock.com/pl/produkty/kalkulator-kodow-do-radia/online

https://www.pelock.com/products/radio-code-calculator/online