Obfuscator Dokumentacja API

Zautomatyzuj proces obfuskacji kodu assemblera wykorzystując dedykowany interfejs Web API Obfuscatora.

Opis

Możesz skorzystać ze wszystkich opcji Obfuscatora poprzez interfejs Web API.

API Obfuscatora bazuje na prostym zapytaniu POST i odpowiedzi zakodowanej w postaci JSON.

Aby skorzystać z API, należy ustawić parametry w tablicy konfiguracyjnej i wywołać funkcję Obfuscate(), która zwróci wyniki w postaci tablicy JSON.

public function Obfuscate($params);
public JsonValue Obfuscate(NameValueCollection paramsArray);
$params["code"] [in, optional]
Kod aktywacyjny, bez niego Obfuscator będzie działał w trybie demonstracyjnym.
$params["command"] [in]
Komenda Obfuscatora, która ma wykonać. Dostępne komendy:
Komenda Opis
"login" Zalogowanie się do usługi w celu sprawdzenia poprawności kodu aktywacyjnego oraz pobrania dodatkowych informacji m.in. o ilości pozostałych kredytów użycia przypisanych do kodu aktywacyjnego.
"obfuscate" Wykonaj obfuskację kodu źródłowego.
$params["compression"] [wej, opcjonalnie]
Kompresja kodu źródłowego. Jeśli ten parametr jest ustawiony na true, należy skompresować wejściowy kod źródłowy np. $params["source"] = @base64_encode(@gzcompress($string, 9); i po procesie obfuskacji zdekompresować zwrócony kod wyjściowy $decompressed = @gzuncompress(@base64_decode($result["output"]));
$params["source"] [wej, opcjonalnie]
Kod źródłowy w formacie MASM.
$params["code_mixup"] [wej, opcjonalnie]
Zmień ścieżkę wykonywanych instrukcji na nielinearną.
$params["change_logic"] [wej, opcjonalnie]
Mutuj oryginalne instrukcje na serię równoznacznych instrukcji.
$params["mutation_passes"] [wej, opcjonalnie]
Ilość przebiegów mutacji dla metody obfuskacji $params["change_logic"].
$params["expand_calls"] [wej, opcjonalnie]
Ukrywaj wywołania procedur, usuwając instrukcje call (WinApi itp.).
$params["resolve_const"] [wej, opcjonalnie]
Konwertuj stałe WinApi do numerycznych wartości (dzięki temu mogą być poddane obfuskacji jak wartości liczbowe).
$params["assume_stdcall"] [wej, opcjonalnie]
Załóż wykorzystanie konwencji stdcall (rejestry EAX, ECX i EDX mogą być modyfikowane przed wywołaniem procedury).
$params["insert_fake_jumps"] [wej, opcjonalnie]
Wstaw zaśmiecające skoki (jx + jnx).
$params["insert_reg_jumps"] [wej, opcjonalnie]
Wstaw zaśmiecające skoki do rejestrów (jmp reg32).
$params["rep_prefix"] [wej, opcjonalnie]
Losowo używaj prefixów rep/repxx dla zaśmiecających instrukcji.
$params["insert_seh"] [wej, opcjonalnie]
Wstaw zaśmiecające wywołania wyjątków i bramki SEH.
$params["insert_com_jumps"] [wej, opcjonalnie]
Wstaw zaśmiecające skoki w stylu wywołań COM (jmp dword ptr [imm32 + rnd]).
$params["com_min"] [wej, opcjonalnie]
Min. liczba skoków zaśmiecających COM.
$params["com_max"] [wej, opcjonalnie]
Maks. liczba skoków zaśmiecających COM.
$params["insert_junks"] [wej, opcjonalnie]
Wstawiaj śmieciowe instrukcje pomiędzy prawdziwy kod.
$params["junks_min"] [wej, opcjonalnie]
Min. liczba instrukcji śmieciowych na komendę.
$params["junks_max"] [wej, opcjonalnie]
Maks. liczba instrukcji śmieciowych na komendę.
$params["fake_cmd"] [wej, opcjonalnie]
Wstaw fałszywe komendy (add reg32,1 + sub reg32,1 itp.).
$params["fake_cmd_32"] [wej, opcjonalnie]
Wstaw fałszywe instrukcje 32 bitowe.
$params["fake_cmd_16"] [wej, opcjonalnie]
Wstaw fałszywe instrukcje 16 bitowe.
$params["fake_cmd_8"] [wej, opcjonalnie]
Wstaw fałszywe instrukcje 8 bitowe.

Zwracane wartości

$result["error"] [wyj]
Kod błędu. Jeden z poniższych:
Nazwa Wartość Opis
ERROR_SUCCESS 0 Wszystko się udało.
ERROR_NOPROC 1 Obfuscator nie znalazł żadnych procedur do obfuskacji.
ERROR_NOFLAGS 2 Nie określiłeś żadnych opcji obfuskacji.
ERROR_INPUT 3 Uszkodzony wejściowy kod źródłowy, sprawdź składnię.
ERROR_INPUT_SIZE 4 Kod źródłowy jest zbyt duży. Najczęściej zwracana wartość w przypadku działania w trybie demo (limit).
$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["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.
$result["junks_min"] [wyj, opcjonalnie]
Min. dozwolona liczba instrukcji zaśmiecających dla parametru $params["junks_min"].
$result["junks_max"] [wyj, opcjonalnie]
Maks. dozwolona liczba instrukcji zaśmiecających dla parametru $params["junks_max"].
$result["com_min"] [wyj, opcjonalnie]
Min. dozwolona liczba instrukcji zaśmiecających COM dla parametru $params["com_min"].
$result["com_max"] [wyj, opcjonalnie]
Maks. dozwolona liczba instrukcji zaśmiecających COM dla parametru $params["com_max"].
$result["mutation_passes_min"] [wyj, opcjonalnie]
Min. liczba przebiegów mutacji dla parametru $params["mutation_passes"].
$result["mutation_passes_max"] [wyj, opcjonalnie]
Maks. liczba przebiegów mutacji dla parametru $params["mutation_passes"].

Przykłady

<?php

////////////////////////////////////////////////////////////////////////////////
//
// Obfuscator Web API usage example
//
// Version        : v1.0
// Language       : PHP
// Author         : Bartosz Wójcik
// Web page       : https://www.pelock.com
//
////////////////////////////////////////////////////////////////////////////////

// include main library
include ("obfuscator.php");

//
// setup parameters
//
$params = array();

//
// activation code, you can leave it empty for demo version, but keep in
// mind that there are many limitations in demo version)
//
$params["code"] = "";

//
// API command to execute
//
// "obfuscate" - obfuscate source code
// "login" - checks current activation code
//
// Return values
//
// $result["error"] [out]
//   Error code.
//
// $result["output"] [out, optional]
//   Obfuscated source code.
//
// $result["demo"] [out]
//   Are we running in full or demo mode.
//
// $result["credits_left"] [out]
//   Usage credits left for the provided activation code.
//
// $result["expired"] [out, optional]
//   If set to true it means our activation code has expired (it was the last run).
//
// $result["string_limit"] [out, optional]
//   Source code size limit for full & demo version.
//
// $result["junks_min"] [out, optional]
//   Min. number of junks for the $params["junks_min"] parameter.
//
// $result["junks_max"] [out, optional]
//   Max. number of junks for the $params["junks_max"] parameter.
//
// $result["com_min"] [out, optional]
//   Min. number of junks for the $params["com_min"] parameter.
//
// $result["com_max"] [out, optional]
//   Max. number of junks for the $params["com_max"] parameter.
//
// $result["mutation_passes_min"] [out, optional]
//   Min. number of junks for the $params["mutation_passes"] parameter.
//
// $result["mutation_passes_max"] [out, optional]
//   Min. number of junks for the $params["mutation_passes"] parameter.
//
$params["command"] = "obfuscate";

//
// source code compression
//
// if you set it to true, you need to compress input source code
//
// $params["source"] = @base64_encode(@gzcompress($string, 9)
//
// and after obfuscation you need to decompress obfuscated source code
//
// $decompressed = @gzuncompress(@base64_decode($result["output"]));
//
$params["compression"] = false;
//$params["compression"] = true;

//
// input source code in MASM format
//
$source = 'return_true proc uses esi edi ebx
xor ecx,ecx
mov eax,1
ret
return_true endp';

if ($params["compression"] == false)
{
	$params["source"] = $source;
}
else
{
	$params["source"] = @base64_encode(@gzcompress($source, 9));
}

//
// change code execution flow to nonlinear path.
//
$params["code_mixup"] = "1";

//
// mutate original opcodes into series of other equivalent instructions.
//
$params["change_logic"] = "1";

//
// Mutation passes for the $params["change_logic"] obfuscation method.
//
$params["mutation_passes"] = "1";

//
// Hide procedure calls by replacing call instructions with opaque predicates (WinApi etc.).
//
$params["expand_calls"] = "1";

//
// Resolve WinApi constants to numerical values (so it can be obfuscated as an unsigned integer values).
//
$params["resolve_const"] = "1";

//
// Assume WinApi calling convention (EAX, ECX & EDX registers can be changed before call).
//
$params["assume_stdcall"] = "1";

//
// Insert fake jumps (jx + jnx).
//
$params["insert_fake_jumps"] = "1";

//
// Insert register jumps (jmp reg32).
//
$params["insert_reg_jumps"] = "1";

//
// Prefix junk opcodes with rep/repxx.
//
$params["rep_prefix"] = "1";

//
// Insert junk SEH handlers (invoke misguiding exceptions).
//
$params["insert_seh"] = "1";

//
// Insert COM like jumps (jmp dword ptr [imm32 + rnd]).
//
$params["insert_com_jumps"] = "1";

//
// Min. number of COM like jumps.
//
$params["com_min"] = "1";

//
// Max. number of COM like jumps.
//
$params["com_max"] = "1";

//
// Insert junk instructions between original instructions
//
$params["insert_junks"] = "1";

//
// Min. number of junks per command.
//
$params["junks_min"] = "1";

//
// Max. number of junks per command.
//
$params["junks_max"] = "1";

//
// Insert fake commands (add reg32,1 + sub reg32,1 etc.).
//
$params["fake_cmd"] = "1";

//
// Insert fake 32 bit commands.
//
$params["fake_cmd_32"] = "1";

//
// Insert fake 16 bit commands.
//
$params["fake_cmd_16"] = "1";

//
// Insert fake 8 bit commands.
//
$params["fake_cmd_8"] = "1";

//
// obfuscate source code
//
$result = obfuscate($params);

if ($result != false)
{
	if ($result["error"] == ERROR_SUCCESS)
	{
		// if compression was enabled, we need to
		// decompress the output source code
		if ($params["compression"] == true)
		{
			$source = @gzuncompress(@base64_decode($result["output"]));
		}
		else
		{
			$source = $result["output"];
		}

		// display obfuscated source code
		echo "<pre>".$source."</pre>";

		// display number of credits left
		echo "<p>You have {$result['credits_left']} credits left.</p>";

		// activation code has expired, notify user
		if ($result["expired"] == true)
		{
			echo "<p>Your activation code has expired!</p>";
		}
	}
	else
	{
		echo "An error occurred (code ".$result["error"].")";
	}
}
else
{
	echo "Cannot connect to the API interface!";
}

?>
<?php

////////////////////////////////////////////////////////////////////////////////
//
// Obfuscator Web API usage example
//
// Version        : v1.0
// Language       : PHP
// Author         : Bartosz Wójcik
// Web page       : https://www.pelock.com
//
////////////////////////////////////////////////////////////////////////////////

// include main library
include ("obfuscator.php");

//
// setup parameters
//
$params = array();

//
// activation code, you can leave it empty for demo version, but keep in
// mind that there are many limitations in demo version)
//
$params["code"] = "";

//
// API command to execute
//
// "obfuscate" - obfuscate source code
// "login" - checks current activation code
//
// Return values
//
// $result["error"] [out]
//   Error code.
//
// $result["output"] [out, optional]
//   Obfuscated source code.
//
// $result["demo"] [out]
//   Are we running in full or demo mode.
//
// $result["credits_left"] [out]
//   Usage credits left for the provided activation code.
//
// $result["expired"] [out, optional]
//   If set to true it means our activation code has expired (it was the last run).
//
// $result["string_limit"] [out, optional]
//   Source code size limit for full & demo version.
//
// $result["junks_min"] [out, optional]
//   Min. number of junks for the $params["junks_min"] parameter.
//
// $result["junks_max"] [out, optional]
//   Max. number of junks for the $params["junks_max"] parameter.
//
// $result["com_min"] [out, optional]
//   Min. number of junks for the $params["com_min"] parameter.
//
// $result["com_max"] [out, optional]
//   Max. number of junks for the $params["com_max"] parameter.
//
// $result["mutation_passes_min"] [out, optional]
//   Min. number of junks for the $params["mutation_passes"] parameter.
//
// $result["mutation_passes_max"] [out, optional]
//   Min. number of junks for the $params["mutation_passes"] parameter.
//
$params["command"] = "login";

//
// execute API command
//
$result = obfuscate($params);

if ($result != false)
{
	if ($result["demo"] == true)
	{
		echo "<p>You are running in DEMO mode</p>";
	}
	else
	{
		echo "<p>You are running in FULL mode</p>";

		// display number of credits left
		echo "<p>You have {$result['credits_left']} credits left.</p>";
	}

	echo "<p>Source code max. length {$result['string_limit']} characters</p>";
}
else
{
	echo "Cannot connect to the API interface!";
}

?>

Wymagania

Biblioteka PHP obfuscator.php
Biblioteka C# obfuscator.cs

Masz pytania?

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