2011-11-21 2 views
1

자바 코드가 약간 있습니다. (Minecraft mod입니다.) .class 파일을 jd-gui로 디 컴파일하고, 편집 한 다음 다시 컴파일하려고했습니다. (javac 사용).디 컴파일 된 클래스 파일을 다시 컴파일 할 수 없습니다.

나는 수백 개의 오류가 있습니다. 그래도 몇 줄만 편집 했으므로 편집되지 않은 .java 파일을 컴파일하려고했는데 정확히 decompiler에서 나온 것입니다. 똑같은, 수백 가지의 오류.

Java에 대해 거의 알지 못하므로 실수를 저지르고 있습니다. 유효한 작업 .class 파일에서 편집되지 않은 코드를 컴파일 할 수없는 이유는 무엇입니까?

ReiMinimap.java:451: illegal start of expression 
       switch (???) 
      ^
ReiMinimap.java:451: ';' expected 
       switch (???) 
        ^
ReiMinimap.java:451: illegal start of expression 
       switch (???) 
        ^
ReiMinimap.java:451: illegal start of expression 
       switch (???) 
         ^
ReiMinimap.java:451: illegal start of expression 
       switch (???) 
         ^
ReiMinimap.java:452: illegal start of expression 
       { 
      ^
ReiMinimap.java:452: : expected 
       { 
      ^
ReiMinimap.java:453: ';' expected 
       case 49: 
        ^
ReiMinimap.java:453: ')' expected 
       case 49: 
        ^
ReiMinimap.java:454: illegal start of expression 
       this.allowCavemap = true; 
        ^
ReiMinimap.java:454: ';' expected 
       this.allowCavemap = true; 
        ^
ReiMinimap.java:454: illegal start of expression 
       this.allowCavemap = true; 
           ^
ReiMinimap.java:454: ';' expected 
       this.allowCavemap = true; 
           ^
ReiMinimap.java:456: orphaned case 
       case 50: 
      ^
ReiMinimap.java:308: 'try' without 'catch' or 'finally' 
    try { if (paramMinecraft == null); 
    ^
ReiMinimap.java:499: illegal start of type 
     else 
    ^
ReiMinimap.java:499: ';' expected 
     else 
     ^
ReiMinimap.java:501: illegal start of type 
     this.chatWelcomed = true; 
     ^
ReiMinimap.java:501: <identifier> expected 
     this.chatWelcomed = true; 
      ^
ReiMinimap.java:501: ';' expected 
     this.chatWelcomed = true; 
      ^
ReiMinimap.java:501: illegal start of type 
     this.chatWelcomed = true; 
         ^
ReiMinimap.java:501: <identifier> expected 
     this.chatWelcomed = true; 
         ^

그리고 일부 코드 : 원래 자바 컴파일이 난독 것처럼

if ((!this.chatWelcomed) && (System.currentTimeMillis() < this.chatTime + 10000L)) 
     { 
     Object localObject1; 
     for (localObject2 = this.chatLineList.iterator(); ((Iterator)localObject2).hasNext();) { localObject1 = (ahe)((Iterator)localObject2).next(); 

      if ((localObject1 == null) || (this.chatLineLast == localObject1)) break; 
      Matcher localMatcher1 = Pattern.compile("§0§0((?:§[1-9a-d])+)§e§f").matcher(((ahe)localObject1).a); 
      while (localMatcher1.find()) 
      { 
      this.chatWelcomed = true; 
      for (??? : localMatcher1.group(1).toCharArray()) 
      { 
       switch (???) 
       { 
       case 49: 
       this.allowCavemap = true; 
       break; 
       case 50: 
       this.allowEntityPlayer = true; 
       break; 
       case 51: 
       this.allowEntityAnimal = true; 
       break; 
       case 52: 
       this.allowEntityMob = true; 
       break; 
       case 53: 
       this.allowEntitySlime = true; 
       break; 
       case 54: 
       this.allowEntitySquid = true; 
       break; 
       case 55: 
       this.allowEntityLiving = true; 
       } 
      } 
      } 
+0

예를 표시하십시오. – Boann

+0

컴파일 할 때 원래 라이브러리를 클래스 경로에 추가 했습니까? –

+0

예를 들자면 전체 오류 로그를 복사 해 주시겠습니까? 또한 : 원본 라이브러리? 프로그래밍에 대한 기본 지식과 다른 관련없는 언어는 알고 있지만 Java에 대해서는 거의 알지 못합니다. 당신이 무슨 뜻인지 확실하지. 왜 내가 문제가 있는지 설명 할 수있다. . . – zeel

답변

2

그것은 소리가 여기

내가 무엇을 얻을의 샘플입니다. 난독 화자가 코드를 리버스 엔지니어링하는 것을 어렵게하는 데 사용하는 많은 트릭이 있습니다. 예를 들어, Java 소스에서 예약어 인 메소드 및 필드 이름을 .class 파일에 포함하는 것은 합법입니다 ( for, if 등). obfuscator가 이러한 트릭을 사용하는 경우 .class 파일을 디 컴파일하면 Java 소스 이러한 예약어를 메서드 나 필드 이름으로 사용할 수 없기 때문에 불법입니다.

+0

사실, 그게 제가 발견 한 것입니다. obfuscator는 이러한 종류의 리버스 엔지니어링을보다 어렵게 만들도록 정밀하게 설계되었습니다. 디 컴파일 된 소스 코드를 다시 컴파일하려고 시도하는 것보다 실제로 기본 바이트 코드를 수정하는 것이 더 많은 행운을 빕니다. – Ewald

+1

코드의 어느 것도 난독 화되어 보이지 않으며 난독 화 코드를 보았지만이 코드는 보이지 않습니다. – zeel

관련 문제