2009-06-10 6 views
3

나는 난독 화가 새로 생겨서 개미에 대한 많은 경험이 없습니다. 어떤 사람이 ProGuard (또는 다른 오픈 소스 obfuscator)를 사용하여 일반 Java 응용 프로그램을 난독화할 수있는 방법을 제공합니다. 현재 NetBeans 6.5.1을 사용하고 있으며 Java ME를 만들면 난독 화 기능 만 볼 수 있으며 Java 응용 프로그램과는 다릅니다. 나는 http://wiki.netbeans.org/DevFaqModuleObfuscation을 보았지만 그들이 말하는 것을 이해하지 못합니다.Netbeans 난독 화

입력 해 주셔서 감사합니다.

+0

해당 페이지의 어느 부분을 이해하지 못합니까? 개미를 이해합니까? –

답변

9

당신이 가리키는 FAQ는 NetBeans 모듈을 난독 화하기위한 것입니다. 이것은 매우 복잡한 사용 사례이므로 정규 애플리케이션 인이 아닌 것으로 가정합니다.

매우 간략하게 : 난독 처리 프로세스가 클래스, 메소드 및 필드의 이름을 변경하여 더 어렵게 만듭니다. 응용 프로그램을 리버스 엔지니어링하십시오.

은 몇 가지 문제가 발생합니다

  • JVM이 public 클래스의 공용 정적 무효 메인 (문자열 인수 [])를 가지고 응용 프로그램을 필요로를, 그래서 당신은이 이름을 변경하지 않는 난독을 알려야합니다
  • 당신은 자기 반성의 어떤 종류를 사용하는
  • 경우 수동

Additionall에서 설명한 바와 같이, 당신은

  • other cases
  • 변경되는 관련 이름을 보호해야 proguard는 사용하지 않는 코드를 제거합니다. 사용되었지만 직접 참조되지 않은 클래스가있는 경우 -keep도 필요합니다.

    proguard 설명서에는 간단한 응용 프로그램을 난독 화하는 방법에 대한 example이 포함되어 있습니다. 당신이 -dontshrink를 지정 난독 화는 코드가 유지되지 또는 코드를 유지에서 참조되지 제거하지 않는 한

    -injars  application.jar  # obfuscate all the classes in the named jars 
    -outjars  obfuscated.jar   # save all the obfuscated classes to the named jar 
    -libraryjars <java.home>/lib/rt.jar # these are all the libraries that the application uses 
    -printmapping obfuscation.map  # save a file linking the original names to the obfuscated ones 
                # this helps understanding stack traces from the obfuscated application 
    
    # we need to keep our main class and the application entry point 
    -keep public class com.mycompany.Application { 
        public static void main(java.lang.String[]); 
    } 
    

    : 여기에 (일부 덜 혼란 이름) 설명의 예입니다. 따라서 위의 구성에서는 main 메소드에서 (간접적으로) 참조되지 않은 코드는 제거됩니다.

    Proguard에는 NetBeans 작업 과정과 통합하는 데 사용할 수있는 Ant 작업이 포함되어 있습니다. Ant를 사용하지 않고 직접 수동으로 실험 해 보길 권합니다. 그 과정에서 복잡한 요소 중 하나가 필요합니다. NetBeans로 응용 프로그램 jar를 빌드 한 다음 위의 구성으로 난독 화하려고 시도합니다 (필요한 경우 fleshed). 무수한 것들이 잘못 될 수 있으므로 난독 화 된 응용 프로그램을 테스트하십시오. Proguard 설정이 끝나면 빌드 파일에 Ant 태스크를 추가하여 NetBeans 내에서 난독 처리 프로세스를 자동화하십시오.

    +0

    도움을 주셔서 감사합니다. 그러나 다음을 얻었습니다. 경고 : 수퍼 클래스 또는 인터페이스를 찾을 수 없습니다. javax.swing.TransferHandler $ HasGetTransferHandler 경고 : javax.swing.JWindow : 수퍼 클래스를 찾을 수 없습니다. 또는 인터페이스 javax.swing.TransferHandler $ HasGetTransferHandler 경고 : javax.swing.JComponent : 슈퍼 클래스 또는 인터페이스를 찾을 수 없습니다. javax.swing.TransferHandler $ HasGetTransferHandler 경고 : javax.swing.JFrame : 수퍼 클래스 또는 javax 인터페이스를 찾을 수 없습니다. swing.TransferHandler $ HasGetTransferHandler TransferHandler $ HasGetTransferHandler.class가있는 rt.jar가 포함되어 있습니다. 어떤 아이디어? – Jon

    +0

    매뉴얼에 있습니다 :'-dontskipnonpubliclibraryclasses' : http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass – jackrabbit

    2

    -dontskipnonpubliclibraryclasses 이외의 다른 해결책은 JAR 파일에서 코드를 컴파일 할 때 사용한 것과 동일한 JDK를 사용하여 proguard를 실행하는 것입니다.

    사용 을 ../proguard3.8/lib/proguard.jar -jar 예

    대신 자바 /usr/local/jdk1.5.0/bin/java -jar ../proguard3. 8/lib/proguard.jar

    제이콥