Zautomatyzuj proces obfuskacji kodów źródłowych Java, wykorzystując dedykowany interfejs Web API JObfuscatora dla PHP i Pythona.
Możesz skorzystać ze wszystkich opcji JObfuscatora poprzez interfejs Web API. Web API bazuje na prostym zapytaniu POST i odpowiedzi zakodowanej w postaci JSON.
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 |
---|---|---|---|---|
PHP | Uruchom komendę:
lub dodaj do sekcji
|
Packagist | GitHub | |
Python | pip install jobfuscator |
PyPI | GitHub |
<?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.")
<?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.")
<?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.")
$result["error"]
[wyj]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]$result["demo"]
[wyj]$result["credits_left"]
[wyj]$result["credits_total"]
[wyj]$result["expired"]
[wyj, opcjonalnie]true
oznacza to, że kod aktywacyjny wygasł (było to jego ostatnie wykorzystanie).$result["string_limit"]
[wyj, opcjonalnie]Biblioteka PHP | JObfuscator |
Moduł dla Pythona 3 | JObfuscator |
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.