ItzSomebody / radon

[Abandoned] Scuffed java bytecode obfuscator
GNU General Public License v3.0
362 stars 74 forks source link

Ejector concept #69

Closed vovanre closed 5 years ago

vovanre commented 5 years ago

Just a concept.

Transformer retrieves the constant parameters of a method call into individual methods.

Before:

void process(String a, int b, boolean c) {
    System.out.println(a + b + c);
}

void main() {
    process("Hello", 1, true);
    process("Hello".toLowerCase(), 1, true);
    process("Hello", 1, System.currentTimeMillis() % 2 == 0);
}

After:

void process(String a, int b, boolean c) {
    System.out.println(a + b + c);
}

void proxy(String a, int b, boolean c, int id) {
    if (id == 0) {
        a = "Hello";
        b = 1;
        c = true;
    }
    if (id == 1) {
        b = 1;
        c = true;
    }
    if (id == 2) {
        a = "Hello";
        b = 1;
    }
    process(a, b, c);
}

void main() {
    proxy(null, 0, false, 0);
    proxy("Hello".toLowerCase(), 1, true, 1);
    proxy(null, 0, System.currentTimeMillis() % 2 == 0, 2);
}
vovanre commented 5 years ago

Array:

void main() {
   int[] arr = new int[3];
   arr[1] = 2;
   arr[2] = 3;
}

void proxy(arr, i) {
  if (i == 1)
     arr[1] = 2;
  if (i == 2)
     arr[2] = 3;
}

void main() {
   int[] arr = new int[3];
   proxy(arr, 1)
   proxy(arr, 2)
}

Field (implemented):

int X;

void main() {
   X = 1
   X = 2
}
int X;

void proxy(i) {
  if (i == 1)
     X = 1;
  if (i == 2)
     X = 2;
}

void main() {
    proxy(1)
    proxy(2)
}

Any more ideas?

vovanre commented 5 years ago

@ItzSomebody pull request ready.

Transformer output example: https://gist.github.com/vovanre/32a18026ca6a188f3938f396b0b11383