Javassist에 유니 코드가있는 클래스에 문제가 있는지 확실하지 않지만이 난독 화 클래스에는 메서드의 매개 변수에 대한 유니 코드가 있으며 바이트를 반환 할 때마다 중단되는지는 잘 모르겠습니다. 그것은 완벽하게 잘 작동 unobfuscated 환경에서 작동합니까? 다음 예는이 클래스를 수정하려고하지만, 여기 당신이 갈입니다 :Javaassist 바이트 코드 제한 사항?
여기public class aaa extends yo
{
private final ahs b;
public aaa(final ahs \u2603) {
super(\u2603);
this.b = \u2603;
this.d(0);
this.a(true);
}
@Override
public int a(final int \u2603) {
return \u2603 | 0x4;
}
@Override
public int a(final zx \u2603, final int \u2603) {
return this.b.h(this.b.a(\u2603.i()));
}
@Override
public String e_(final zx \u2603) {
return super.a() + "." + this.b.b(\u2603.i()).d();
}
}
내가 변환 (아무것도) 일을하지있어 무엇
는@Override
public byte[] transform(String name, String transformedName, byte[] basicClass) {
if (name.equals("ave") || name.equals("net.minecraft.client.Minecraft")) { // Minecraft.class // net.minecraft.client.Minecraft
try {
System.out.println(String.format("oh no its doing it -> %s", name));
ClassPool pool = ClassPool.getDefault();
CtClass ctClass = pool.getCtClass(name);
return ctClass.toBytecode();
} catch (Exception e) {
e.printStackTrace();
}
}
return basicClass;
}
정확하게 무엇을하려고하고 무엇이 잘못 될지 설명해 주시겠습니까? – Antimony
@Antimony Minecraft Forge (mod-loader) 클래스를 편집하려고하는데 위의 코드는 유니 코드를 매개 변수 이름으로 사용하는 난독 화 클래스의 예입니다. javassist가 읽을 수 있는지 잘 모르겠습니다. 어떤 ctClass.toBytecode()를 반환하기 때문에; 완전히 충돌합니다. 이것은 모호하지 않은 환경에서 완벽하게 작동합니다. objectweb ASM으로 전환해야할지 모르겠지만 오히려하지 않을 것입니다. 편집 : 이전 버전의 게임에는 다른 방법으로 난독 화되어 있기 때문에이 문제가 발생하지 않습니다. – cn198nc1
바이트 코드 수준에서 작업 할 때 매개 변수 변수의 이름은 전적으로 관련이 없습니다. 이와 관련하여 ASM은이 수준의 조작 만 허용하기 때문에 이러한 이름으로 혼동하지 않습니다. 따라서 소스 레벨에서 Instrumentation을 시도하는 경우 (필자는 권장하지 않음), Javassist 만이 유일한 선택입니다. 그러나 지역 변수 이름은 JVM에 아무런 의미가 없으므로 디버그 속성으로 인해 사용할 수 있습니다. 따라서 Javassist는이를 제거해야합니다. (arg1','arg2'와 같은) 생성 된 이름을 사용하여, 주어진 이름에 혼동을 일으키지 않습니다. – Holger