Динамическое выполнение байт-кода - PullRequest
0 голосов
/ 09 декабря 2010

Хорошо, поэтому я пытаюсь написать универсальный деобфускатор строк (аналогично тому, что .NET имеет в Simple Assembly Explorer)

Что я хочу сделать, это получить инструкции метода через BCEL и выполнить их с аргументамиЯ предоставляю и имею доступ к выводу этого метода.Возможно ли это сделать с любыми существующими библиотеками?Если да, могу ли я получить помощь?

Спасибо

1 Ответ

1 голос
/ 09 декабря 2010

Комбинация BCEL и отражения / вызова может сделать работу. Используйте BCEL, чтобы получить имена классов и методов (ваш трюк LDC, invokestatic или что-то похожее) и сразу же вызвать метод. Вы можете сделать это, если поместите свои «тестовые классы» в путь к классам. Для меня нет необходимости выполнять байт-код.


Если у вас есть класс и имя метода, оно выглядит следующим образом:

Class clazz = Class.forName(yourClassName);
// either (for public methods)
Method method = clazz.getMethod(yourMethodName);
// or for protected / private methods:
Method method = clazz.getDeclaredMethod(yourMethodName, yourArgumentTypes);
method.setAccessible(true); 

// assuming the method is static
Object result = method.invoke(null, yourMethodArgs);
// otherwise: pass a object reference instead of null
// to call the method "on" that object
...