JObfuscator Dokumentacja API

Zautomatyzuj proces obfuskacji kodów źródłowych Java, wykorzystując dedykowany interfejs Web API JObfuscatora dla PHP i Pythona.

Opis

Możesz skorzystać ze wszystkich opcji JObfuscatora poprzez interfejs Web API. Web API bazuje na prostym zapytaniu POST i odpowiedzi zakodowanej w postaci JSON.

Instalacja

W celu szybszego wdrożenia, paczki instalacyjne interfejsu Web API JObfuscatora zostały wgrane na popularne repozytoria, a ich kody źródłowe zostały dodatkowo opublikowane na GitHubie:

Repozytorium Język Instalacja Paczka Źródła
Repozytorium Packagist dla PHP i Composera PHP

Uruchom komendę:

php composer.phar require --prefer-dist pelock/jobfuscator "*"

lub dodaj do sekcji require w pliku konfiguracyjnym composer.json wpis:

"pelock/jobfuscator": "*"
Packagist GitHub
Repozytorium PyPI dla Pythona i pip Python pip install jobfuscator PyPI GitHub

Przykłady użycia

Obfuskacja Javy z domyślnymi ustawieniami

<?php

/******************************************************************************
 * Przykład użycia JObfuscatora poprzez interfejs WebApi
 *
 * W tym przykładzie kod Javy poddany zostanie obfuskacji z domyślnymi opcjami.
 *
 * Version        : v1.04
 * Language       : PHP
 * Author         : Bartosz Wójcik
 * Web page       : https://www.pelock.com
 *
 *****************************************************************************/

//
// załącz klasę JObfuscator
//
use PELock\JObfuscator;

//
// jeśli nie chcesz użyć Composera wykorzystaj include_once
//
//include_once "JObfuscator.php";

//
// utwórz instancję klasy JObfuscator (do inicjalizacji wykorzystamy nasz klucz aktywacyjny)
//
$myJObfuscator = new PELock\JObfuscator("ABCD-ABCD-ABCD-ABCD");

//
// kod źródłowy w języku Java
//
$sourceCode = 'import java.util.*;
import java.lang.*;
import java.io.*;

//
// dodaj adnotację @Obfuscate do kodu,
// aby włączyć obfuskację na poziomie
// całej klasy lub pojedynczej metody
//
@Obfuscate
class Ideone
{
    //@Obfuscate
    public static double calculateSD(double numArray[])
    {
        double sum = 0.0, standardDeviation = 0.0;
        int length = numArray.length;

        for(double num : numArray) {
            sum += num;
        }

        double mean = sum/length;

        for(double num: numArray) {
            standardDeviation += Math.pow(num - mean, 2);
        }

        return Math.sqrt(standardDeviation/length);
    }

    //
    // poszczególne strategie obfuskacji
    // mogą być włączane lub wyłączane
    // na poziomie całej klasy lub
    // pojedyncznej metody (domyślnie
    // wszystkie strategie obfuskacyjne
    // są włączone jeśli użyta jest
    // sama adnotacja @Obfuscate bez
    // wyszczególnionych strategii)
    //
    //@Obfuscate(
    //  ints_math_crypt = true,
    //  crypt_strings = true,
    //  rename_methods = false,
    //  rename_variables = true,
    //  shuffle_methods = true,
    //  mix_code_flow = true,
    //  ints_to_arrays = true,
    //  dbls_to_arrays = true
    // )
    public static void main(String[] args) {

        double[] numArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        double SD = calculateSD(numArray);

        System.out.format("Standard Deviation = %.6f", SD);
    }
}';

//
// domyślnie wszystkie opcje obfuskacji są włączone, więc wystarczy wywołać funkcję
//
$result = $myJObfuscator->ObfuscateJavaSource($sourceCode);

//
// możliwa jest również obfuskacja pliku z kodem źródłowym Javy np.
//
// $result = $myJObfuscator->ObfuscateJavaFile("/path/to/project/source.java");

//
// $result[] tablica zawiera wynikowy kod po obfuskacji oraz dodatkowe informacje
//
// $result["error"]         - kod błędu
// $result["output"]        - zobfuskowany kod
// $result["demo"]          - flaga określająca czy użyty był tryb demonstracyjny (albo błędny lub pusty klucz licencyjny)
// $result["credits_left"]  - pozostała liczba kredytów użycia po wykonanej operacji
// $result["credits_total"] - całkowita liczba kredytów użycia dla tego kodu aktywacyjnego
// $result["expired"]       - jeśli był wykorzystany ostatni kredyt użycia dla kodu aktywacyjnego flaga będzie ustawiona na true
//
if ($result !== false)
{
	// wyświetl zobfuskowany kod Javy
	if ($result["error"] === \PELock\JObfuscator::ERROR_SUCCESS)
	{
		// formatuj wyjściowy kod do formatu HTML
		echo "<pre>" . htmlentities($result["output"]) . "</pre>";
	}
	else
	{
		die("Wystąpił błąd, kod błędu:" . $result["error"]);
	}
}
else
{
	die("Wystąpił niespodziewany błąd podczas próby obfuskacji kodu Javy.");
}

?>
#!/usr/bin/env python

###############################################################################
#
# Przykład użycia JObfuscatora poprzez interfejs WebApi
#
# W tym przykładzie kod Javy poddany zostanie obfuskacji z domyślnymi opcjami.
#
# Version        : v1.04
# Language       : Python
# Author         : Bartosz Wójcik
# Web page       : https://www.pelock.com
#
###############################################################################

#
# załącz modul JObfuscator
#
from jobfuscator import JObfuscator

#
# jeśli nie chcesz użyć modułu Pythona, możesz go po prostu zaimportować z pliku
#
#from pelock.jobfuscator import JObfuscator

#
# utwórz instancję klasy JObfuscator (do inicjalizacji wykorzystamy nasz klucz aktywacyjny)
#
myJObfuscator = JObfuscator("ABCD-ABCD-ABCD-ABCD")

#
# kod źródłowy w języku Java
#
sourceCode = """import java.util.*;
import java.lang.*;
import java.io.*;

//
// dodaj adnotację @Obfuscate do kodu,
// aby włączyć obfuskację na poziomie
// całej klasy lub pojedynczej metody
//
@Obfuscate
class Ideone
{
    //@Obfuscate
    public static double calculateSD(double numArray[])
    {
        double sum = 0.0, standardDeviation = 0.0;
        int length = numArray.length;

        for(double num : numArray) {
            sum += num;
        }

        double mean = sum/length;

        for(double num: numArray) {
            standardDeviation += Math.pow(num - mean, 2);
        }

        return Math.sqrt(standardDeviation/length);
    }

    //
    // poszczególne strategie obfuskacji
    // mogą być włączane lub wyłączane
    // na poziomie całej klasy lub
    // pojedyncznej metody (domyślnie
    // wszystkie strategie obfuskacyjne
    // są włączone jeśli użyta jest
    // sama adnotacja @Obfuscate bez
    // wyszczególnionych strategii)
    //
    //@Obfuscate(
    //  ints_math_crypt = true,
    //  crypt_strings = true,
    //  rename_methods = false,
    //  rename_variables = true,
    //  shuffle_methods = true,
    //  mix_code_flow = true,
    //  ints_to_arrays = true,
    //  dbls_to_arrays = true
    // )
    public static void main(String[] args) {

        double[] numArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        double SD = calculateSD(numArray);

        System.out.format("Standard Deviation = %.6f", SD);
    }
}"""

#
# domyślnie wszystkie opcje obfuskacji są włączone, więc wystarczy wywołać funkcję
#
result = myJObfuscator.obfuscate_java_source(sourceCode)

#
# możliwa jest również obfuskacja pliku z kodem źródłowym Javy np.
#
# result = myJObfuscator.obfuscate_java_file("/path/to/project/source.java")

#
# result[] tablica zawiera wynikowy kod po obfuskacji oraz dodatkowe informacje
#
# result["error"]         - kod błędu
# result["output"]        - zobfuskowany kod
# result["demo"]          - flaga określająca czy użyty był tryb demonstracyjny (albo błędny lub pusty klucz licencyjny)
# result["credits_left"]  - pozostała liczba kredytów użycia po wykonanej operacji
# result["credits_total"] - całkowita liczba kredytów użycia dla tego kodu aktywacyjnego
# result["expired"]       - jeśli był wykorzystany ostatni kredyt użycia dla kodu aktywacyjnego flaga będzie ustawiona na true
#
if result and "error" in result:

    # wyświetl zobfuskowany kod Javy
    if result["error"] == JObfuscator.ERROR_SUCCESS:

        # formatuj wyjściowy kod do formatu HTML
        print(result["output"])

    else:
        print(f'Wystąpił błąd, kod błędu:{result["error"]}')

else:
    print("Wystąpił niespodziewany błąd podczas próby obfuskacji kodu Javy.")

Obfuskacja z własnymi ustawieniami

<?php

/******************************************************************************
 * Przykład użycia JObfuscatora poprzez interfejs WebApi
 *
 * W tym przykładzie kod Javy poddany zostanie obfuskacji z własnymi opcjami.
 *
 * Version        : v1.04
 * Language       : PHP
 * Author         : Bartosz Wójcik
 * Web page       : https://www.pelock.com
 *
 *****************************************************************************/

//
// załącz klasę JObfuscator
//
use PELock\JObfuscator;

//
// jeśli nie chcesz użyć Composera wykorzystaj include_once
//
//include_once "JObfuscator.php";

//
// utwórz instancję klasy JObfuscator (do inicjalizacji wykorzystamy nasz klucz aktywacyjny)
//
$myJObfuscator = new PELock\JObfuscator("ABCD-ABCD-ABCD-ABCD");

//
// czy kod źródłowy powinien być kompresowany (wejściowy i wyjściowy)
//
$myJObfuscator->enableCompression = true;

//
// global obfuscation options
//
// when disabled will discard any @Obfuscate annotation declaration
// in the Java source code
//
// you can disable a particular obfuscation strategy globally if it
// fails or you don't want to use it without modifying the source codes
//
// by default all obfuscation strategies are enabled
//

//
// zmień linearną ścieżkę wykonywania kodu na nielinearną wersję
//
$myJObfuscator->mixCodeFlow = true;

//
// zmień nazwy zmiennych na losowe ciągi znakowe
//
$myJObfuscator->renameVariables = true;

//
// zmień nazwy metod na losowe ciągi znakowe
//
$myJObfuscator->renameMethods = true;

//
// wymieszaj położenie wszystkich metod w wyjściowym kodzie
//
$myJObfuscator->shuffleMethods = true;

//
// szyfruj wartości typu integer wykorzystując ponad 15 zmiennoprzecinkowych funkcji matematycznych z klasy java.lang.Math.*
//
$myJObfuscator->intsMathCrypt = true;

//
// zaszyfruj ciągi tekstowe wykorzystując losowo wygenerowane algorytmy polimorficzne
//
$myJObfuscator->cryptStrings = true;

//
// dla każdej metody wyekstrahuj wszystkie możliwe wartości typu integer i przenieś je do tablicy
//
$myJObfuscator->intsToArrays = true;

//
// dla każdej metody wyekstrahuj wszystkie możliwe wartości typu double i przenieś je do tablicy
//
$myJObfuscator->dblsToArrays = true;

//
// kod źródłowy w języku Java
//
$sourceCode = 'import java.util.*;
import java.lang.*;
import java.io.*;

//
// dodaj adnotację @Obfuscate do kodu,
// aby włączyć obfuskację na poziomie
// całej klasy lub pojedynczej metody
//
@Obfuscate
class Ideone
{
    //@Obfuscate
    public static double calculateSD(double numArray[])
    {
        double sum = 0.0, standardDeviation = 0.0;
        int length = numArray.length;

        for(double num : numArray) {
            sum += num;
        }

        double mean = sum/length;

        for(double num: numArray) {
            standardDeviation += Math.pow(num - mean, 2);
        }

        return Math.sqrt(standardDeviation/length);
    }

    //
    // poszczególne strategie obfuskacji
    // mogą być włączane lub wyłączane
    // na poziomie całej klasy lub
    // pojedyncznej metody (domyślnie
    // wszystkie strategie obfuskacyjne
    // są włączone jeśli użyta jest
    // sama adnotacja @Obfuscate bez
    // wyszczególnionych strategii)
    //
    //@Obfuscate(
    //  ints_math_crypt = true,
    //  crypt_strings = true,
    //  rename_methods = false,
    //  rename_variables = true,
    //  shuffle_methods = true,
    //  mix_code_flow = true,
    //  ints_to_arrays = true,
    //  dbls_to_arrays = true
    // )
    public static void main(String[] args) {

        double[] numArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        double SD = calculateSD(numArray);

        System.out.format("Standard Deviation = %.6f", SD);
    }
}';

//
// domyślnie wszystkie opcje obfuskacji są włączone, więc wystarczy wywołać funkcję
//
$result = $myJObfuscator->ObfuscateJavaSource($sourceCode);

//
// możliwa jest również obfuskacja pliku z kodem źródłowym Javy np.
//
// $result = $myJObfuscator->ObfuscateJavaFile("/path/to/project/source.java");

//
// $result[] tablica zawiera wynikowy kod po obfuskacji oraz dodatkowe informacje
//
// $result["error"]         - kod błędu
// $result["output"]        - zobfuskowany kod
// $result["demo"]          - flaga określająca czy użyty był tryb demonstracyjny (albo błędny lub pusty klucz licencyjny)
// $result["credits_left"]  - pozostała liczba kredytów użycia po wykonanej operacji
// $result["credits_total"] - całkowita liczba kredytów użycia dla tego kodu aktywacyjnego
// $result["expired"]       - jeśli był wykorzystany ostatni kredyt użycia dla kodu aktywacyjnego flaga będzie ustawiona na true
//
if ($result !== false)
{
	// wyświetl zobfuskowany kod Javy
	if ($result["error"] === \PELock\JObfuscator::ERROR_SUCCESS)
	{
		// formatuj wyjściowy kod do formatu HTML
		echo "<pre>" . htmlentities($result["output"]) . "</pre>";
	}
	else
	{
		die("Wystąpił błąd, kod błędu:" . $result["error"]);
	}
}
else
{
	die("Wystąpił niespodziewany błąd podczas próby obfuskacji kodu Javy.");
}

?>
#!/usr/bin/env python

###############################################################################
#
# Przykład użycia JObfuscatora poprzez interfejs WebApi
#
# W tym przykładzie kod Javy poddany zostanie obfuskacji z własnymi opcjami.
#
# Version        : v1.04
# Language       : Python
# Author         : Bartosz Wójcik
# Web page       : https://www.pelock.com
#
###############################################################################

#
# załącz modul JObfuscator
#
from jobfuscator import JObfuscator

#
#  jeśli nie chcesz użyć modułu Pythona, możesz go po prostu zaimportować z pliku
#
#from pelock.jobfuscator import JObfuscator

#
# utwórz instancję klasy JObfuscator (do inicjalizacji wykorzystamy nasz klucz aktywacyjny)
#
myJObfuscator = JObfuscator("ABCD-ABCD-ABCD-ABCD")

#
# global obfuscation options
#
# when disabled will discard any @Obfuscate annotation declaration
# in the Java source code
#
# you can disable a particular obfuscation strategy globally if it
# fails or you don't want to use it without modifying the source codes
#
# by default all obfuscation strategies are enabled
#

#
# czy kod źródłowy powinien być kompresowany (wejściowy i wyjściowy)
#
myJObfuscator.enableCompression = True

#
#  zmień linearną ścieżkę wykonywania kodu na nielinearną wersję
#
myJObfuscator.mixCodeFlow = True

#
# zmień nazwy zmiennych na losowe ciągi znakowe
#
myJObfuscator.renameVariables = True

#
# zmień nazwy metod na losowe ciągi znakowe
#
myJObfuscator.renameMethods = True

#
# wymieszaj położenie wszystkich metod w wyjściowym kodzie
#
myJObfuscator.shuffleMethods = True

#
# szyfruj wartości typu integer wykorzystując ponad 15 zmiennoprzecinkowych funkcji matematycznych z klasy java.lang.Math.*
#
myJObfuscator.intsMathCrypt = True

#
# zaszyfruj ciągi tekstowe wykorzystując losowo wygenerowane algorytmy polimorficzne
#
myJObfuscator.cryptStrings = True

#
# dla każdej metody wyekstrahuj wszystkie możliwe wartości typu integer i przenieś je do tablicy
#
myJObfuscator.intsToArrays = True

#
# dla każdej metody wyekstrahuj wszystkie możliwe wartości typu double i przenieś je do tablicy
#
myJObfuscator.dblsToArrays = True

#
# kod źródłowy w języku Java
#
sourceCode = """import java.util.*;
import java.lang.*;
import java.io.*;

//
// dodaj adnotację @Obfuscate do kodu,
// aby włączyć obfuskację na poziomie
// całej klasy lub pojedynczej metody
//
@Obfuscate
class Ideone
{
    //@Obfuscate
    public static double calculateSD(double numArray[])
    {
        double sum = 0.0, standardDeviation = 0.0;
        int length = numArray.length;

        for(double num : numArray) {
            sum += num;
        }

        double mean = sum/length;

        for(double num: numArray) {
            standardDeviation += Math.pow(num - mean, 2);
        }

        return Math.sqrt(standardDeviation/length);
    }

    //
    // poszczególne strategie obfuskacji
    // mogą być włączane lub wyłączane
    // na poziomie całej klasy lub
    // pojedyncznej metody (domyślnie
    // wszystkie strategie obfuskacyjne
    // są włączone jeśli użyta jest
    // sama adnotacja @Obfuscate bez
    // wyszczególnionych strategii)
    //
    //@Obfuscate(
    //  ints_math_crypt = true,
    //  crypt_strings = true,
    //  rename_methods = false,
    //  rename_variables = true,
    //  shuffle_methods = true,
    //  mix_code_flow = true,
    //  ints_to_arrays = true,
    //  dbls_to_arrays = true
    // )
    public static void main(String[] args) {

        double[] numArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        double SD = calculateSD(numArray);

        System.out.format("Standard Deviation = %.6f", SD);
    }
}"""

#
#  domyślnie wszystkie opcje obfuskacji są włączone, więc wystarczy wywołać funkcję
#
result = myJObfuscator.obfuscate_java_source(sourceCode)

#
# result[] tablica zawiera wynikowy kod po obfuskacji oraz dodatkowe informacje
#
# result["error"]         - kod błędu
# result["output"]        - zobfuskowany kod
# result["demo"]          - flaga określająca czy użyty był tryb demonstracyjny (albo błędny lub pusty klucz licencyjny)
# result["credits_left"]  - pozostała liczba kredytów użycia po wykonanej operacji
# result["credits_total"] - całkowita liczba kredytów użycia dla tego kodu aktywacyjnego
# result["expired"]       - jeśli był wykorzystany ostatni kredyt użycia dla kodu aktywacyjnego flaga będzie ustawiona na true
#
if result and "error" in result:

    # wyświetl zobfuskowany kod Javy
    if result["error"] == JObfuscator.ERROR_SUCCESS:

        # formatuj wyjściowy kod do formatu HTML
        print(result["output"])
    else:
        print(f'Wystąpił błąd, kod błędu:{result["error"]}')

else:
    print("Wystąpił niespodziewany błąd podczas próby obfuskacji kodu Javy.")

Sprawdzanie klucza aktywacyjnego

<?php

/******************************************************************************
 * Przykład użycia JObfuscatora poprzez interfejs WebApi
 *
 * W tym przykładzie zweryfikujemy status naszego klucza aktywacyjnego.
 *
 * Version        : v1.04
 * Language       : PHP
 * Author         : Bartosz Wójcik
 * Web page       : https://www.pelock.com
 *
 *****************************************************************************/

//
// załącz klasę JObfuscator
//
use PELock\JObfuscator;

//
// jeśli nie chcesz użyć Composera wykorzystaj include_once
//
//include_once "JObfuscator.php";

//
// utwórz instancję klasy JObfuscator (do inicjalizacji wykorzystamy nasz klucz aktywacyjny)
//
$myJObfuscator = new PELock\JObfuscator("ABCD-ABCD-ABCD-ABCD");

//
// zaloguj się do usługi
//
$result = $myJObfuscator->Login();

//
// $result[] tablica zawiera informację o licencji
//
// $result["demo"]          - czy to licencja demonstracyjna (został użyty błędny lub pusty klucz aktywacyjny)
// $result["credits_left"]  - pozostała liczba kredytów użycia po wykonanej operacji
// $result["credits_total"] - całkowita liczba kredytów użycia dla tego kodu aktywacyjnego
// $result["string_limit"]  - maksymalny dozwolony rozmiar kodu źródłowego (dla wersji demonstracyjnej to 1500 bajtów)
//
if ($result !== false)
{
	echo "Status wersji demonstracyjnej - " . ($result["demo"] ? "true" : "false") . "<br>";
	echo "Pozostałych kredytów użycia -" . $result["credits_left"] . "<br>";
	echo "Całkowita liczba kredytów użycia - " . $result["credits_total"] . "<br>";
	echo "Maksymalny dozwolony rozmiar kodu źródłowego - " . $result["string_limit"] . "<br>";
}
else
{
	die("Wystąpił nieoczekiwany błąd podczas próby zalogowania się do usługi.");
}

?>
#!/usr/bin/env python

###############################################################################
#
# Przykład użycia JObfuscatora poprzez interfejs WebApi
#
# W tym przykładzie zweryfikujemy status naszego klucza aktywacyjnego.
#
# Version        : v1.04
# Language       : Python
# Author         : Bartosz Wójcik
# Web page       : https://www.pelock.com
#
###############################################################################

#
# załącz modul JObfuscator
#
from jobfuscator import JObfuscator

#
#  jeśli nie chcesz użyć modułu Pythona, możesz go po prostu zaimportować z pliku
#
#from pelock.jobfuscator import JObfuscator

#
# utwórz instancję klasy JObfuscator (do inicjalizacji wykorzystamy nasz klucz aktywacyjny)
#
myJObfuscator = JObfuscator("ABCD-ABCD-ABCD-ABCD")

#
# login to the service
#
result = myJObfuscator.login()

#
# result[] tablica zawiera informację o licencji
#
# result["demo"]          - czy to licencja demonstracyjna (został użyty błędny lub pusty klucz aktywacyjny)
# result["credits_left"]  - pozostała liczba kredytów użycia po wykonanej operacji
# result["credits_total"] - całkowita liczba kredytów użycia dla tego kodu aktywacyjnego
# result["string_limit"]  - maksymalny dozwolony rozmiar kodu źródłowego (dla wersji demonstracyjnej to 1500 bajtów)
#
if result:

    print(f'Status wersji demonstracyjnej - {"True" if result["demo"] else "False"}')
    print(f'Pozostałych kredytów użycia -{result["credits_left"]}')
    print(f'Całkowita liczba kredytów użycia - {result["credits_total"]}')
    print(f'Maksymalny dozwolony rozmiar kodu źródłowego - {result["string_limit"]}')

else:
    print("Wystąpił nieoczekiwany błąd podczas próby zalogowania się do usługi.")

Zwracane wartości

$result["error"] [wyj]
Kod błędu. Jeden z poniższych:
Nazwa Wartość Opis
ERROR_SUCCESS 0 Wszystko się udało.
ERROR_INPUT_SIZE 1 Kod źródłowy jest zbyt duży. Najczęściej zwracana wartość w przypadku działania w trybie demo (limit 1500 znaków).
ERROR_INPUT 2 Uszkodzony wejściowy kod źródłowy, sprawdź składnię.
ERROR_PARSING 3 Błąd parsowania kodu źródłowego Java.
ERROR_OBFUSCATION 4 Błąd obfuskacji sparsowanego już kodu źródłowego.
ERROR_OUTPUT 5 Błąd podczas generowania zobfuskowanego kodu wyjściowego.
$result["output"] [wyj, opcjonalnie]
Wyjściowy kod źródłowy poddany obfuskacji.
$result["demo"] [wyj]
Flaga oznaczająca czy to wersja pełna czy demo.
$result["credits_left"] [wyj]
Pozostała ilość kredytów użycia dla przypisanego kodu aktywacyjnego.
$result["credits_total"] [wyj]
Całkowita ilość kredytów dla przypisanego kodu aktywacyjnego.
$result["expired"] [wyj, opcjonalnie]
Jeśli ustawiona na true oznacza to, że kod aktywacyjny wygasł (było to jego ostatnie wykorzystanie).
$result["string_limit"] [wyj, opcjonalnie]
Maksymalny dozwolony rozmiar wejściowego kodu źródłowego dla wersji pełnej i demo.

Wymagania

Biblioteka PHP JObfuscator
Moduł dla Pythona 3 JObfuscator

Masz pytania?

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