JObfuscator — Obfuskacja Kodów Źródłowych Javy

JObfuscator umożliwia obfuskację kodów źródłowych i algorytmów w Javie w celu ich ochrony przed inżynierią wsteczną, dekompilacją oraz kradzieżą technologii. JObfuscator był już użyty 24767 razy!

Kod źródłowy w Javie

Kod Javy po obfuskacji

Globalne opcje obfuskacji. Wyłączone, spowodują zignorowanie adnotacji @Obfuscate w kodzie źródłowym.

System.out.println("1");
System.out.println("2");
System.out.println("3");
int JOWCN_FGIWJIGTWJ_JSDAO = 0;
JOWCN_FGIWJIGTWJ_JSDAO = 1148643996;
while (JOWCN_FGIWJIGTWJ_JSDAO != 1421874931) {
  switch(JOWCN_FGIWJIGTWJ_JSDAO) {
    case 797943348:
      System.out.println("3");
      JOWCN_FGIWJIGTWJ_JSDAO += 623931583;
      break;
    case 1148643996:
      System.out.println("1");
      JOWCN_FGIWJIGTWJ_JSDAO -= 911757835;
      break;
    case 236886161:
      System.out.println("2");
      JOWCN_FGIWJIGTWJ_JSDAO -= -561057187;
      break;
}

Przeczytaj co to ścieżka wykonywania kodu.

int myNum = 5;
float myFloatNum = 5.99f;
char myLetter = 'D';
boolean myBool = true;
String myText = "Java Obfuscator";
int ap9axcpArl_nyapT__QpnQOl_ = 5;
float var_3897 = 5.99f;
char aAqktfgaaaqRjhiouqlSwoqgob = 'D';
boolean nVdbxytrOhipcleakh = true;
String MUQJO_OGIEHC = "Java Obfuscator";

Wszystkie odwołania do przemianowanych zmiennych są automatycznie poprawiane.

public int calc(double numArray[]) {...}
public int SqcFsxe(double[] numArray) {...}

Wszystkie odwołania do przemianowanych metod są automatycznie poprawiane. Nazwa punktu wejściowego main() pozostaje niezmieniona. Nazwy metod oznaczone adnotacją @Override nie są zmieniane.

public static int methodNum1(int param)
{...}

public static int methodNum2(int param)
{...}

public static int methodNum3(int param)
{...}
public static int methodNum2(int param)
{...}

public static int methodNum3(int param)
{...}

public static int methodNum1(int param)
{...}

Kolejnośc metod w kodzie źródłowym Java nie ma znaczenia.

public static int method(int param) {
  int a = 1;
  int b = a + 2;
  int c = 0;
  if (b > 3) return c;

  return 4;
}
public static int method(int param) {
  int a = (int) (681.57415 - Math.cbrt(315229127.95597));
  int b = a + (int) (2.76739 - Math.acos(0.71973));
  int c = (int) (-1.20690 + Math.tan(0.87887));
  if (b > (int) (-1.85887 + Math.log10(72255.55488)))
    return c;
  return (int) Math.min(6525.74776, 4.00000);
}

Wykorzystanych jest ponad 15 funkcji matematycznych z klasy java.lang.Math.*.

System.out.println("Java Obfuscator Online");
String var_127 = "";
int[] var_1774 = { 0xFB5F, 0xF9EF, 0xF89F, 0xF9EF,
                   0xFDFF, 0xFB0F, 0xF9DF, 0xF99F,
                   0xF8AF, 0xF8CF, 0xF9CF, 0xF9EF,
                   0xF8BF, 0xF90F, 0xF8DF, 0xFDFF,
                   0xFB0F, 0xF91F, 0xF93F, 0xF96F,
                   0xF91F, 0xF9AF };
for (int hGrz = 0, x = 0; hGrz < 22; hGrz++) {
  x = var_1774[hGrz];
  x ^= 0xFFFF;
  x = ((x << 12) | ((x & 0xFFFF) >> 4)) & 0xFFFF;
  var_127 += (char) (x & 0xFFFF);
}

System.out.println(var_127);

Polimorficzne szyfrowanie ciągów tekstowych wykorzystuje silnik z naszego innego rozwiązania StringEncrypt.

public static int method(int param) {
  int a = 1;
  int b = a + 2;
  int c = 0;
  if (b > 3) return c;

  return 4;
}
public static int method(int param) {
  int[] IFNMDK = { 0, 3, 2, 4, 1 };
  int a = IFNMDK[4];
  int b = a + IFNMDK[2];
  int c = IFNMDK[0];
  if (b > IFNMDK[1])
    return c;
  return IFNMDK[3];
}

To sprawia, że analiza jest trudniejsza, ponieważ wymaga wyszukiwania po indeksach w tabeli każdej wartości numerycznej. Jako dodatkowa obfuskacja, wygenerowane tablicy są losowo zadeklarowane jako tablice o typie double np. double[] IFNMDK = { 0.49128, 3.33891, 2.00013, 4.32255, 1.99981 };

public static double method(double param) {
  double a = 1.1;
  double b = a + 2.2;
  double c = 0.0;
  if (b > 3.3) return c;

  return 4.4;
}
public static double method(double param) {
  double[] xnn_dji_34 = { 0.0, 3.3, 2.2, 4.4, 1.1 };
  double a = xnn_dji_34[4];
  double b = a + xnn_dji_34[2];
  double c = xnn_dji_34[0];
  if (b > xnn_dji_34[1])
    return c;
  return xnn_dji_34[3];
}

To sprawia, że analiza jest trudniejsza, ponieważ wymaga wyszukiwania po indeksach w tabeli każdej wartości numerycznej.


Jak otrzymać darmowy kod aktywacyjny?

Tutaj znajdziesz kilka sposobów, dzięki którym możesz otrzymać kod aktywacyjny bez płacenia:

Pencil

Napisz artykuł

Napisz artykuł na blogu czy na stronie o JObfuscatorze ze zrzutami ekranu, przykładowymi kodami źródłowymi oraz odnośnikiem do strony produktu.

Twitter

Tweetnij o tym

Wyślij Tweeta o JObfuscatorze do swoich fanów wraz z linkiem do strony produktu, użyj hasztagów #jobfuscator #java #obfuscator oraz #obfuscation.

Pencil

Zgłoś błąd

Zgłoś błąd i jeśli będę w stanie go potwierdzić, otrzymasz darmowy kod aktywacyjny w ramach podziękowanie.

Twitter

Zasugeruj pomysł na obfuskację

Jeśli masz pomysł jak udoskonalić obecne metody obfuskacji lub wprowadzić nowe techniki, skontaktuj się ze mną przedstawiając wszelkie szczegóły.

Skorzytaj z formularza kontaktowego, aby ze mną porozmawiać.

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.