好的,所以我正在尝试编写一个通用的字符串去混淆器(类似于 .NET 与 Simple Assembly Explorer 的功能)
我想要做的是通过 BCEL 获取方法的指令,并使用我提供的参数执行它们,并可以访问该方法的输出。这可能与任何现有的库有关吗?如果是这样,我可以得到一些帮助吗?
谢谢
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