PELock Zabezpieczenie Oprogramowania przed Złamaniem i System Licencyjny

Zabezpieczenie oprogramowania przed złamaniem oraz inżynierią wsteczną z systemem kluczy licencyjnych oraz opcją czasowego ograniczenia funkcjonalności.

Zabezpieczenie i ochrona oprogramowania

PELock to system pozwalający zabezpieczyć dowolne 32 bitowe oprogramowanie dla systemu Windows przed złamaniem (ang. cracking), modyfikacjami oraz ochronić je przed inżynierią wsteczną (ang. reverse engineering).

PELock posiada wbudowany system licencyjny, dzięki któremu możesz w prosty sposób dodać klucze licencyjne do swojego oprogramowania. Możliwe jest również ustawienie ograniczeń czasowych (ang. time-trial) np. 30 dniowy okres użytkowania dla zabezpieczonych aplikacji.

Możesz dodatkowo ściśle zintegrować zabezpieczenia i elementy systemu licencyjnego wykorzystując dedykowane SDK i setki przykładów użycia z pełnymi kodami źródłowymi dla C/C++, Delphi, Lazarus, Freepascal, PureBasic, PowerBASIC, D, Assembler.

Zabezpieczyć możesz dowolny skompilowany program dla systemu Windows kompatybilny z formatem Portable Executable, niezależnie w jakim języku i środowisku programowania został stworzony.

Obsługiwane formaty plików Rozszerzenia
Aplikacje EXE
Wygaszacze ekranu SCR
Biblioteki dynamiczne DLL
Kontrolki ActiveX OCX
Rozszerzenia Panelu Sterowania CPL
Paczki biblioteczne Borland BPL DPL
Kodeki audio ACM
Filtry DirectShow AX

Dlaczego zabezpieczać oprogramowanie?

Piractwo komputerowe

Bardzo często zdarza się tak, że po wypuszczeniu aplikacji na rynek, już dzień po premierze pojawiają się nielegalne numery seryjne, cracki, patche czy generatory numerów seryjnych (ang. keygen).

Google wyszukaj frazę Crack do...

Wynika to najczęściej ze stosowania słabych algorytmów weryfikacji danych rejestracyjnych, ale nawet najbardziej zaawansowane metody weryfikacji danych rejestracyjnych oparte o cyfrowe sygnatury czy silną kryptografię, nie są przeszkodą dla crackerów, jeśli aplikacja je stosująca, nie jest odpowiednio zabezpieczona przeciwko ingerowaniu w jej skompilowany kod.

Zabezpieczenie Słabości Wektory ataku
Pole tekstowe z kluczem Numer seryjny
  • Proste algorytmy generowania klucza
  • Wykorzystanie nieprawidłowych algorytmów kryptograficznych
  • Słabe metody weryfikacji kluczy rejestracyjnych
  • Weryfikacja klucza tylko w jednym punkcie programu
  • Brak ochrony samego pliku aplikacji przed modyfikacjami
generator kluczy keygen crack
Skrypt binarny Plik rejestracyjny
  • Zbyt prosta binarna postać klucza umożliwia jego nieautoryzowane wygenerowanie
  • Nawet najbardziej skomplikowane algorytmy mogą być spatchowane
generator kluczy patch crack
Dongle USB Klucz sprzętowy
  • Wykorzystanie tylko 1 funkcji do sprawdzenia obecności klucza sprzętowego (inaczej dongle) np. IsDonglePresent()
  • Brak wykorzystania zaawansowanych funkcji wbudowanych w klucze
  • Słabe jakościowo i przestarzałe systemy szyfrowania aplikacji tzw. envelope
emulator patch crack
Kalkulator Suma kontrolna
  • Możliwość zmiany kodu tylko w pamięci procesu, bez modyfikacji plików na dysku
  • Możliwośc podmiany lub aktualizacji sumy kontrolnej
  • Usunięcie sprawdzeń weryfikujących sumę kontrolną
loader patch crack
Calculator Exe-Paker
  • Niczego nie zabezpiecza, zapewnia jedynie kompresję jak archiwum ZIP lub RAR
  • Skompresowane pliki mogą być stosunkowo łatwo rozpakowane
  • Pliki mogą być spatchowane używając metody inline patching
  • Procesy skompresowanych aplikacji mogą być spatchowane używając tzw. debug loaderów
unpaker inline patch debug loader
Świat Weryfikacja online
  • Możliwość podglądnięcia komunikacji sieciowej poprzez sniffery sieciowe
  • Zbyt proste mechanizmy potwierdzające legalność oprogramowania
  • Brak zastosowania właściwych funkcji kryptograficznych
proxy patch crack

Czy możesz powiedzieć, że twoje oprogramowanie jest zabezpieczone we wszystkich aspektach? PELock oferuje zabezpieczenia eliminujące wszystkie powyższe zagrożenia, zdejmując z Ciebie ciężar projektowania, wdrażania i testowania własnych metod na klientach końcowych twojego oprogramowania.

Kradzież własności intelektualnej

Niezabezpieczone oprogramowanie jest wyjątkowo podatne na analizę i korzystając z narzędzi do inżynierii wstecznej ułatwione jest uzyskanie wielu informacji o skompilowanej aplikacji. Możliwe jest odtworzenie fragmentów kodów źródłowych oprogramowania, takich jak np. algorytmy, a w odpowiednich warunkach nawet całych kodów źródłowych.

Nieuczciwa konkurencja może wykorzystać techniczną wiedzę uzyskaną w procesie inżynierii wstecznej do sklonowania funkcjonalności twojego oprogramowania, nie są to rzeczy wzięte z filmów o hakerach, a szara rzeczywistość, która może dotknąć każdego twórcę oprogramowania.

Hacki do gier

Gry komputerowe narażone są na tzw. hacki, czyli programy, które potrafią ingerować w wewnętrzne mechanizmy funkcjonowania gry, modyfikując jej kod w trakcie działania, w celu uzyskania przewagi nad przeciwnikami, np. w rozgrywkach online.

Przykładem takiego hacka może być modyfikacja gier FPS, która sprawia, że widać położenie przeciwników nawet przez ściany (z ang. wallhack). Innego rodzaju popularną modyfikacją jest tzw. aimbot, czyli automat naprowadzający celownik broni idealnie na pozycję przeciwnika.

Stosowanie tego typu dopalaczy w grach może skutecznie zniechęcić innych, uczciwych graczy do rozgrywki, przez co sama gra traci na popularności.

Wnioski

Straty dla twórców oprogramowania mogą być ogromne, zarówno dla dużych jak i małych firm, a tym bardziej jeśli jesteś samodzielnym programistą, dlatego warto pomyśleć również nad odpowiednim zabezpieczeniem już w procesie projektowania oprogramowania.

Własne metody zabezpieczeń nie zawsze się sprawdzają, opłaca się postawić na sprawdzone rozwiązanie takie jak PELock, które nie będzie miało problemów zarówno z zapewnieniem odpowiedniego poziomu ochrony, wykorzystując najnowsze osiągnięcia techniczne w dziedzinie zabezpieczeń oprogramowania oraz jednocześnie gwarantując maksymalny poziom kompatybilności i stabilności.

Co jest potrzebne do zabezpieczenia aplikacji?

W przypadku PELock-a do zabezpieczenia wymagany jest jedynie skompilowany plik aplikacji. Jeśli jednak masz możliwość edycji kodów źródłowych aplikacji to jak najbardziej rekomendowane jest wykorzystanie funkcji z SDK PELock-a, aby wprowadzić dodatkowe mechanizmy zabezpieczające oraz wykorzystać funkcje systemu licencyjnego.

SDK i przykłady użycia

SDK zapewnia specjalne makra i funkcje, które odpowiadają za komunikację pomiędzy aplikacją, a dodanym w procesie zabezpieczania kodem ochronnym.

Im więcej elementów SDK użyjesz — tym integracja zabezpieczenia i aplikacji będzie lepsza, a tym samym jej złamanie, odbudowa czy analiza będzie trudniejsza. SDK oraz przykłady jego użycia dostępne są dla wielu języków programowania m.in:

Język Programowania C i C++

C i C++

Piszesz w C lub C++? PELock posiada setki przykładów użycia i SDK kompatybilne z takimi środowiskami i kompilatorami jak Visual C++, Intel C++ Compiler, GCC, MinGW, G++, Clang, C++Builder, Watcom C++, LCC, Pelles C, Digital Mars.

Język Programowania Delphi i Pascal

Delphi i Pascal

Jeśli tworzysz w Delphi, niezależnie od wersji, znajdziesz wiele przykładów oraz dodatkowy komponent, który ułatwi wykorzystanie funkcji SDK PELock-a. Znajdziesz również przykłady dla środowiska Lazarus i kompilatora FreePascal.

Język Programowania PureBasic

PureBasic

PureBasic to nowoczesna odsłona języka programowania BASIC z doskonałą optymalizacją kodu, setkami dodatkowych wbudowanych funkcji i rzeszą fanów. PELock w pełni wspiera ten język programowania i udostępnia dedykowane SDK oraz setki przykładów użycia.

Język Programowania PowerBASIC

PowerBASIC

PowerBASIC to kolejna odsłona języka BASIC, przeznaczona do tworzenia okienkowych i konsolowych aplikacji Windows z ogromną społecznością programistów. Jeśli piszesz w PowerBASIC to znajdziesz dedykowane SDK oraz setki przykładów użycia.

Assembler

Assembler

Tworzysz oprogramowanie w assemblerze dla 32 bitowych procesorów x86 z wykorzystaniem kompilatora MASM? W SDK znajdziesz nie tylko wszystko to, co jest dostępne dla języków wysokiego poziomu, ale także dodatkowe mechanizmy zabezpieczeń przeznaczone wyłącznie dla kodu assemblera.

Język Programowania D

D

Język programowania D zyskuje na coraz większej popularności. Sprawia to jego elastyczność, bogactwo oferowanych funkcji oraz niesłychana prędkość kompilacji. Wykorzystują i wspierają jego rozwój takie firmy jak m.in. Facebook. PELock oferuje rozbudowane SDK oraz wiele przykładów użycia dla języka D.

Jak wygląda proces zabezpieczania aplikacji?

Cały proces zabezpieczenia aplikacji przebiega automatycznie (może być uruchomiony z linii komend) i polega na przebudowie, modyfikacji i zaszyfrowaniu skompilowanego oprogramowania, jego kodu, struktur danych, oraz dodaniu do niego dodatkowego kodu zabezpieczającego.

Przykład integracji zabezpieczeń z kodem aplikacji

Przykładowe wykorzystanie podstawowych makr szyfrujących systemu licencyjnego, kod pomiędzy nimi jest szyfrowany na etapie zabezpieczania pliku aplikacji, a po uruchomieniu kod pomiędzy makrami jest deszyfrowany i wykonywany jedynie jeśli znaleziony zostanie klucz licencyjny, w którym znajdują się klucze pozwalające odszyfrować fragment kodu pomiędzy nimi. Po jego wykonaniu jest on powtórnie szyfrowany.

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "pelock.h"

int main(int argc, char *argv[])
{
	// kod pomiędzy makrami DEMO_START i DEMO_END bedzie zaszyfrowany
	// w zabezpieczonym pliku i nie bedzie dostępny (wykonany) bez
	// poprawnego klucza licencyjnego
	DEMO_START

	printf("Witaj w pelnej wersji mojej aplikacji!");

	DEMO_END

	printf("\n\nNacisnij dowolny klawisz, aby kontynuowac . . .");

	getch();

	return 0;
}
procedure TfrmMain.FormShow(Sender: TObject);
begin

  {$I DEMO_START.INC}

  lblInfo.Caption := 'Ta aplikacja jest zarejestrowana';

  {$I DEMO_END.INC}

end;
import std.stdio;
import std.string;
import core.stdc.stdio;
import core.sys.windows.windows;
import PELock;

int main(string args[])
{
	// kod pomiedzy makrami DEMO_START i DEMO_END bedzie zaszyfrowany
	// w zabezpieczonym pliku i nie bedzie dostepny (wykonany) bez
	// poprawnego klucza licencyjnego
	mixin(DEMO_START);

	writef("Witaj w pelnej wersji mojej aplikacji!");

	mixin(DEMO_END);

	writef("\n\nNacisnij dowolny klawisz, aby kontynuowac . . .");

	getchar();

	return 0;
}
#COMPILE EXE
%USEMACROS = 1

#INCLUDE "win32api.inc"
#INCLUDE "pelock.inc"

FUNCTION PBMAIN () AS LONG

    ' kod pomiedzy makrami DEMO_START i DEMO_END bedzie zaszyfrowany
    ' w zabezpieczonym pliku i nie bedzie dostepny (wykonany) bez
    ' poprawnego klucza licencyjnego
    DEMO_START

    MSGBOX "Witaj w pelnej wersji mojej aplikacji!"

    DEMO_END

END FUNCTION
IncludePath "..\..\..\..\..\SDK\Polish\PureBasic\"
XIncludeFile "pelock.pb"

; start

    ; kod pomiedzy makrami DEMO_START i DEMO_END bedzie zaszyfrowany
    ; w zabezpieczonym pliku i nie bedzie dostepny (wykonany) bez
    ; poprawnego klucza licencyjnego
    DEMO_START

    MessageRequester("PELock", "Witaj w pelnej wersji mojej aplikacji!")

    DEMO_END

Czym się różni zabezpieczona aplikacja od niezabezpieczonej?

Po zabezpieczeniu, kod aplikacji jest odpowiednio zmodyfikowany, chroniąc go przed analizą i ewentualną odbudową, czyli przywróceniem do stanu pierwotnego, w którym możliwe byłoby dokonywanie analizy lub modyfikacji w kodzie i danych. Kod, dane i dodatkowe elementy aplikacji (zasoby) są zaszyfrowane, wykorzystując silne algorytmy kryptograficzne oraz wielowarstwowe szyfrowanie polimorficzne, a sam kod zabezpieczający jest poddany mutacjom wykorzystując innowacyjny silnik metamorficzny, co sprawia, że analiza całości jest niesłychanie trudnym technicznie zadaniem, nawet dla ludzi profesjonalnie zajmujących się inżynierią wsteczną oprogramowania.

Należy nadmienić, że po zabezpieczeniu, kod aplikacji jest ściśle zintegrowany z dodanym kodem zabezpieczającym, jeśli atakujący spróbuje usunąć kod zabezpieczający, sama aplikacja nadal pozostanie bezpieczna i nie będzie można jej uruchomić, ani z niej skorzystać.

Licencjonowanie oprogramowania

PELock oferuje niezwykle rozbudowany system licencyjny, pozwalający w łatwy sposób kontrolować oprogramowanie na podstawie udostępnionego klucza licencyjnego.

Wbudowany menedżer kluczy licencyjnych pozwala w prosty sposób dodawać użytkowników do projektu, generować i weryfikować klucze licencyjne, blokować te nielegalnie opublikowane w Internecie.

System licencyjny posiada szereg funkcji API, dzięki którym zabezpieczone oprogramowanie może w prosty sposób odczytać nazwę użytkownika przypisaną do klucza, zweryfikować jego poprawność oraz odczytać dodatkowe wartości i dane zapisane w kluczu.

Przykład wykorzystania funkcji systemu licencyjnego

Poniżej znajdziesz przykład odczytania dodatkowych wartości liczbowych zapisanych w kluczu licencyjnym, które mogą być wykorzystane w dowolnym celu w twoim oprogramowaniu:

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "pelock.h"

int main(int argc, char *argv[])
{
	unsigned int nNumberOfItems = 0;

	// kod pomiedzy markerami DEMO_START i DEMO_END bedzie zaszyfrowany
	// w zabezpieczonym pliku i nie bedzie dostepny bez poprawnego klucza
	DEMO_START

	printf("To wersja oprogramowania jest zarejestrowana!\n");

	// odczytaj wartosc liczbowa zapisana w kluczu, PELock oferuje 16 indywidualnie
	// ustawianych wartosci, ktore moga byc uzyte jak tylko chcesz
	nNumberOfItems = GetKeyInteger(5);

	printf("Mozesz zapisac maksymalnie %u elementow w bazie danych\n", nNumberOfItems);

	DEMO_END

	printf("\n\nNacisnij dowolny klawisz, aby kontynuowac . . .");

	getch();

	return 0;
}
procedure TfrmMain.FormShow(Sender: TObject);
begin

  {$I DEMO_START.INC}

  lblInfo.Caption := 'Ta aplikacja jest zarejestrowana';

  // odczytaj wartosc liczbowa z klucza (indeksy od 1-16)
  lblLicenses.Caption := 'Liczba licencji: ' + IntToStr(GetKeyInteger(1));

  {$I DEMO_END.INC}

end;
import std.stdio;
import std.string;
import core.stdc.stdio;
import core.sys.windows.windows;
import PELock;

int main(string args[])
{
	// inicjalizuj klase PELock
	PELock myPELock = new PELock;

	uint nNumberOfItems = 0;

	// kod pomiedzy markerami DEMO_START i DEMO_END bedzie zaszyfrowany
	// w zabezpieczonym pliku i nie bedzie dostepny bez poprawnego klucza
	mixin(DEMO_START);

	writef("To wersja oprogramowania jest zarejestrowana!\n");

	// odczytaj wartosc liczbowa zapisana w kluczu, PELock oferuje 16 indywidualnie ustawianych
	// wartosci, ktore moga byc uzyte jak tylko chcesz
	nNumberOfItems = myPELock.GetKeyInteger(5);

	writef("Mozesz zapisac maksymalnie %d elementow w bazie danych\n", nNumberOfItems);

	mixin(DEMO_END);

	writef("\n\nNacisnij dowolny klawisz, aby kontynuowac . . .");

	getchar();

	return 0;
}
#COMPILE EXE
%USEMACROS = 1

#INCLUDE "win32api.inc"
#INCLUDE "pelock.inc"

FUNCTION PBMAIN () AS LONG

    DIM nNumberOfItems AS LONG

    nNumberOfItems = 0

    ' kod pomiedzy markerami DEMO_START i DEMO_END bedzie zaszyfrowany
    ' w zabezpieczonym pliku i nie bedzie dostepny bez poprawnego klucza
    DEMO_START

    MSGBOX "To wersja oprogramowania jest zarejestrowana!"

    ' odczytaj wartosc liczbowa zapisana w kluczu, PELock oferuje 16 indywidualnie ustawianych
    ' wartosci, ktore moga byc uzyte jak tylko chcesz
    nNumberOfItems = GetKeyInteger(5)

    MSGBOX "Mozesz zapisac maksymalnie" & STR$(nNumberOfItems) & " elementow w bazie danych"

    DEMO_END

END FUNCTION
IncludePath "..\..\..\..\..\SDK\Polish\PureBasic\"
XIncludeFile "pelock.pb"

; start

    nNumberOfItems.l = 0

    ; kod pomiedzy markerami DEMO_START i DEMO_END bedzie zaszyfrowany
    ; w zabezpieczonym pliku i nie bedzie dostepny bez poprawnego klucza
    DEMO_START

    MessageRequester("PELock", "To wersja oprogramowania jest zarejestrowana!")

    ; odczytaj wartosc liczbowa zapisana w kluczu, PELock oferuje 16 indywidualnie ustawianych
    ; wartosci, ktore moga byc uzyte jak tylko chcesz
    nNumberOfItems = GetKeyInteger(5)

    MessageRequester("PELock", "Mozesz zapisac maksymalnie " + Str(nNumberOfItems) + " elementow w bazie danych")

    DEMO_END

Klucze licencyjne generowane są z wykorzystaniem silnych algorytmów kryptograficznych, takich jak m.in. RSA-2048, co sprawia, że nie jest możliwe nieautoryzowane utworzenie kluczy licencyjnych przez takie narzędzia jak np. keygeny.

Wirtualne biblioteki DLL

PELock posiada wbudowany binder dla dodatkowych bibliotek DLL, dzięki któremu możliwe jest połączenie pliku aplikacji EXE oraz dodatkowych bibliotek DLL do jednego, wyjściowego pliku EXE.

Jeśli twoja aplikacja wykorzystuje lub wymaga do działania dodatkowych bibliotek DLL możesz je ukryć wewnątrz zabezpieczonej aplikacji, nikt postronny nie będzie w stanie ich podejrzeć, ani żaden inny program nie będzie miał do nich dostępu, bo cały proces ich ładowania jest emulowany w pamięci i nic nie jest zapisywane na dysku, a działanie aplikacji pozostanie takie samo.

Elastyczność konfiguracji

Do poprawnego zabezpieczenia oprogramowania nie jest wymagana jakakolwiek zmiana domyślnej konfiguracji. Jeśli jednak chcesz, zajrzyj w okno Opcji, znajdziesz tam setki dodatkowych ustawień konfiguracyjnych, które pozwolą Ci dostosować zabezpieczenie w najmniejszym detalu do własnych potrzeb.

Odkryj bogactwo dodatkowych funkcji PELock-a, dzięki którym nie będziesz potrzebował już żadnych innych narzędzi zabezpieczających dla swoich aplikacji.

Wszystkie opcje są dokładnie opisane w pliku pomocy w języku polskim, nie bój się eksperymentować, jednym kliknięciem możesz przywrócić wszystkie domyślne ustawienia.

Kompatybilność i stabilność

PELock został przetestowany na wszystkich dostępnych 32 jak i 64 bitowych wersjach systemu operacyjnego Windows. I nie mówię tutaj tylko o dwóch czy trzech ostatnich wersjach Windows.

Zarówno PELock jak i kod zabezpieczający dodawany do aplikacji jest kompatybilny z systemami:

Windows 10
Windows 8.1
Windows 8
Windows 7
Windows Vista
Windows XP
Windows Server 2012
Windows Server 2008
Windows Server 2003
Windows 2000
Windows NT 4
Windows ME
Windows 98
Windows 95

Gwarantowana stabilność

Doprowadzenie oprogramowania do kompatybilności z tak ogromną gamą systemów operacyjnych wymagało tysięcy godzin pracy, analiz, testów i poprawek. Czy znasz jakiekolwiek inne oprogramowanie kompatybilne zarówno z tymi najnowszymi jak i najstarszymi systemami operacyjnymi Windows? Ze wszystkimi.

Dzieki temu ogromnemu wysiłkowi — PELock zapewnia stabilną pracę twojego zabezpieczonego oprogramowania niezależnie od warunków, w jakich zostanie uruchomione u klientów końcowych.

Ochrona przeciwko exploitom i lukom 0day

PELock poprawnie obsługuje aplikacje wykorzystujące nowoczesne technologie anty-exploitacyjne wbudowane w nowe wersje systemów Windows i zintegrowane z aplikacjami dzięki wsparciu odpowiednich opcji kompilatorów. Technologie te są w pełni obsługiwane i aktywne dla zabezpieczonych aplikacji.

Dzięki temu twoja aplikacja będzie zabezpieczona zarówno przed złamaniem, ale również nie będziesz musiał rezygnować z dodatkowych zabezpieczeń przeciwko exploitom i lukom 0day.

Kompatybilność z antywirusami

Inni twórcy systemów zabezpieczeń tego nie powiedzą, ale systemy te są często niekompatybilne z oprogramowaniem antywirusowym. Dochodzi w takich wypadkach do fałszywych i błędnych detekcji zabezpieczonego oprogramowania jako zainfekowanego, jest to tzw. przypadek false-positive detection.

Przyczyna zwykle leży w błędnym rozpoznaniu przez oprogramowanie antywirusowe krytycznych fragmentów zabezpieczonych plików aplikacji, które często ze względu na szyfrowanie mogą powodować tego typu kłopoty w niektórych pakietach oprogramowania antywirusowego.

Kompatybilność z oprogramowaniem antywirusowym

Problem ten został dokładnie przeanalizowany, przetestowany i rozwiązany w PELock-u poprzez odpowiednią przebudowę zabezpieczonego pliku aplikacji, tak aby jej kod, dane i wewnętrzna struktura nie wzbudzały jakichkolwiek zastrzeżeń w oprogramowaniu antywirusowym.

Masz pytania?

Jeśli masz jakieś pytania dotyczące oprogramowania PELock, masz jakieś uwagi, coś jest niejasne, napisz do mnie, chętnie odpowiem na każde Twoje pytanie.