2017-05-21 13 views
1

에서 항아리를 보호하기 위해 , 적어도 decompilers에 대한 몇 가지 기본적인 보호.어떻게 이것이 매우 일반적인 문제입니다 알고, 좋은 주제 여기에 실제로 "단순/쉬운"디 컴파일

JD와 Jode 같은 일부 디 컴파일러를 일부 .jar 파일과 함께 사용하려고 시도했으며 모든 .java 클래스를 디 컴파일 할 수 없었습니다. 많은 경우에 오류가 발생했으며 많은 다른 매우 기본적인 코드가있었습니다.
이 디 컴파일러에서 jar 파일을 어떻게 보호합니까? 내 항아리와 함께 동일한 디 컴파일러를 사용할 때 모든 클래스가 디테일로 디 컴파일됩니다.

그래서 기본적으로 제 질문은 이러한 디 컴파일러에서이 오류의 원인이 될 수 있습니다. 자바 클래스가 암호화 되었기 때문입니까?

편집 :이었다 무엇

java.lang.ClassCastException: g cannot be cast to T 
     at bK.a(Unknown Source) 
     at T.a(Unknown Source) 
     at bK.<init>(Unknown Source) 
     at bW.a(Unknown Source) 
     at bW.<init>(Unknown Source) 
     at bW.<init>(Unknown Source) 
     at i.a(Unknown Source) 
     at i.a(Unknown Source) 
     at i.a(Unknown Source) 
     at de.fernflower.main.decompiler.ConsoleDecompiler.addSpace(Unknown Source) 
     at de.fernflower.main.decompiler.ConsoleDecompiler.main(Unknown Source) 

:이 오류와 함께, 또한 FernFlower의 디 컴파일러와 시도

Exception while decompiling:java.lang.NoClassDefFoundError: [package.ClassName] 
    at jode.bytecode.ClassInfo.loadInfo(ClassInfo.java:631) 
    at jode.decompiler.ClassAnalyzer.<init>(ClassAnalyzer.java:86) 
    at jode.decompiler.ClassAnalyzer.<init>(ClassAnalyzer.java:123) 
    at jode.decompiler.Decompiler.decompile(Decompiler.java:191) 
    at jode.swingui.Main.run(Main.java:204) 
    at java.lang.Thread.run(Unknown Source) 

: 나는 Jode 일부 자바 파일이 오류를 보여주는주의했다
거기에 보호? 내 항아리 파일에 대해 충분할 수 있다고 생각합니다.

+1

Java 8을 사용하면 지원하지 않는 디 컴파일러가 혼란 스럽습니다. Fernflower (InteliJ에 내장되어 있음)는 Java 8을 잘 처리합니다. –

답변

1

http://www.thegeekstuff.com/2008/06/protect-your-java-code-from-reverse-engineering을 살펴보십시오. JAR 형식으로 프로그램을 출시하는 경우 효과적으로 제어가 느슨합니다. 이 프로그램은 수정/복사 할 수 있습니다. 당신이 할 수있는 유일한 일은 코드 또는 유사한 기술을 모호하게함으로써 그러한 일을 더 어렵게 만드는 것입니다.

+0

제 질문에 대한 편집, jar 파일로 제공되는 프로그램, 디 컴파일러가 작동하지 않는 방법을 읽었습니까? – Enrique

+0

jar 파일의 모든 클래스를 나열하고 오류가 발생한 클래스 이름이 포함되어 있는지 확인할 수 있습니까? –

2

아주 간단한 방법 중 하나는 클래스에 람다를 추가하는 것입니다. 많은 디 컴파일러는 람다를 처리 할 수 ​​없습니다. 네가 할 수있는 또 다른 일은 클래스에 유니 코드 이름, 특히 아스트랄 문자를 사용하는 클래스를 지정하는 것이다. 유니 코드 클래스 이름은 올바르게 구현하기 까다로워서 대부분의 디 컴파일러는 그렇지 않습니다. Try-with-resources는 복잡하고 바닐라 Java 코드에서 이에 상응하는 요소가 없기 때문에 시도해 보는 것도 좋은 방법입니다.

이것은 좋은 디 컴파일러를 깨지는 않지만, 여러분이 요구하는 것이 아닙니다.