좋은 Java 디 컴파일러 및 디 난독 화 프로그램은 무엇입니까?

JD-GUI 를 사용하여 Java JAR 파일을 디 컴파일하는데 문제는 내가 직접 수정하고 프로그램이 여전히 작동하는지 확인해야하는 중복 변수와 같은 많은 오류를 남깁니다 (오류를 올바르게 수정 한 경우).

또한 Fernflower를 시도했지만 공백으로 남습니다. 종속성이 누락 된 경우 클래스.

어떤 디 컴파일러인지 알고 싶습니다.

  • 최소한의 오류를 제공합니다
  • 대부분.

댓글

  • 궁금한 점이 있습니다. deobfuscator가 제공 할 것으로 예상되는 기능은 무엇입니까? 변수 이름을 수동으로 변경하는 것 외에는 ' 실제로 일부 코드를 난독 화하는 방법이 없습니다.

답변

늦게 답장을 드려 죄송합니다.
저는 새로운 오픈 소스 Java 디 컴파일러 를 작업하고 있습니다. 부담없이 확인해보세요.
난독 화 된 코드에 대해 테스트하지는 않았지만 JD-GUI가 처리하지 못한 많은 메서드를 디 컴파일하는 것을 보았습니다. “진행중인 작업이며 디 컴파일에 실패 할 수있는 많은 코드를 찾을 수있을 것입니다.

코멘트

  • 첫째, 그의 디 컴파일러는 다른 답변에서 볼 수있는 Procyon입니다. 두 번째로, 제가 보통 꺼려하지만 "이 작업을 수행하는 내 라이브러리를보세요! " 답변이 여기에서 실수입니다. 위에서 링크 한 Strobel '의 readme 는 자세히 읽어 볼 가치가 있습니다. 그 자체로는 훌륭한 답변 이었지만, SE에게는 너무 긴 시간입니다.
  • +10000 이것은 정말 대단한 작업이며 제가 사용한 클래스를 디 컴파일했습니다. JD-GUI가 절반 만 얻은 후 재구성을 시도하는 데 몇 시간이 걸렸습니다.
  • 개인적으로 +1 댓글이 싫지만 ' 당신은 ' 좁은 자리에서 저를 도왔던 좋은 프로젝트를 가지고 있습니다. 계속 유지하세요!
  • @Signus 감사합니다. ' 제 작업이 유용하다는 것이 입증되어 기쁩니다 :).
  • @DavidGomes 아, BitBucket은 마침내 Mercurial repos를 삭제하겠다는 약속을 잘했습니다. 수정 됨.

답변

오래된 항목 및 누락 된 항목

JAD 얼마 전 모든 사람의 디 컴파일러 선택은 jad였습니다. 현재 프로젝트는 종료되었지만 (또한 오픈 소스가 아니었지만) 여전히 많은 사람들이이 프로젝트를 언급하고 있습니다.

자바 DeObfuscator 또한 fileoffset.com의 이전 도구이지만 여전히 어느 정도 작동합니다. 인터페이스는 큰 프로젝트에 사용하기에는 다소 어색하지만 도구는 오픈 소스 입니다.

JODE JODE 는 디 컴파일러와 자바 용 최적화 프로그램이 포함 된 자바 패키지입니다. 이 패키지는 GNU GPL에서 무료로 사용할 수 있습니다. 꽤 오랫동안 업데이트되지 않았습니다.

AndroChef Android 프로그램을 디 컴파일하는 독점 도구입니다. Java 파일은 여기 에서 사용 가능합니다. DJ Decompiler 와 같이 대안을 고려할 때 돈의 가치가 없습니다.

Candle Brad Davis의 오픈 소스 디 컴파일러입니다. 완전성을 위해 언급했지만 완전한 기능과는 거리가 멀습니다.


최신 도구

JD-Gui 아마도 Java 디 컴파일에 가장 널리 사용되는 도구 중 하나 일 것입니다. 사용하기 쉽고 클래스 파일 또는 JAR을 빠르게 열고 검사 할 수있는 그래픽 사용자 인터페이스를 제공합니다. 여기 에서 찾을 수 있습니다.

FernFlower 매우 새롭고 유망한 분석 Java 디 컴파일러 (IntelliJ 14의 필수 부분이 됨)

명령 줄 도구입니다. 전체 이름과 함께 유니 코드 매개 변수를 표시 할 수 있습니다.

여기에서 다운로드 명령 줄 도구입니다. 이것은 전체 이름과 함께 유니 코드 매개 변수를 표시 할 수 있습니다.
IntelliJ에도 기본적으로 이미 통합되어 있습니다.

CFR

무료 오픈 소스 . 이것은 최신 Java 기능을 디 컴파일하는 것을 목표로합니다. , Java 12 스위치 표현식, Java 8 람다 (Java 베타 103 이전 및 이후 변경 사항), Java 7 문자열 스위치 등을 포함하지만 자체적으로 Java 6으로 작성되었습니다.

또한 명령 줄 도구입니다.이것은 더 나은 작업을 수행하고 약간 더 빠릅니다.

Procyon

오픈 소스 이며 Java 8 기능 (lambdas, :: 연산자) 처리를 목표로합니다. 실행하려면 Java 7이 필요합니다.

Krakatau Krakatau 는 Python으로 작성 되었기 때문에 흥미 롭습니다. 현재 Java 클래스 파일을위한 디 컴파일러 및 디스어셈블러와 클래스 파일을 생성하는 어셈블러의 세 가지 도구가 포함되어 있습니다.

아직 Java 8 기능을 지원하지 않습니다.

Soot

Soot는 원래 McGill University의 Sable Research Group에서 개발 한 Java 및 Android 애플리케이션을 분석하고 변환하기위한 프레임 워크입니다. 중간 바이트 코드 언어도 정의하므로 디 컴파일러로 “단지”일반적으로 사용되지는 않습니다.

Recaf

사용하기 쉬운 Java 바이트 코드 편집기 및 리버스 엔지니어링 도구입니다. 여러 디 컴파일러 (CFR, FernFlower, Procyon) 를 통해 또는 테이블 레이아웃으로 바이트 코드를 제공하여 표준 디 컴파일러에서 해독 할 수없는 클래스 요소를 표시 할 수 있습니다. Recaf는 상황에 맞는 메뉴를 사용하여 클래스, 메서드 및 필드와 상호 작용하므로 사용자가 사용 사례를 검색하고 항목의 이름을 바꾸고 분해 된 형식으로 정의를 편집 할 수 있습니다.

jar, wars, classes, 실행중인 Java 프로세스에서 클래스를 추출합니다.

완전히 Java로 작성되었으며 오픈 소스 입니다.

Konloch의 바이트 코드 뷰어

고급 경량 Java 바이트 코드 뷰어, GUI Java 디 컴파일러, GUI 바이트 코드 편집기, GUI Smali, GUI Baksmali, GUI APK 편집기, GUI Dex 편집기, GUI APK Decompiler, GUI DEX Decompiler, GUI Procyon Java Decompiler, GUI Krakatau, GUI CFR Java Decompiler, GUI FernFlower Java Decompiler, GUI DEX2Jar, GUI Jar2DEX, GUI Jar-Jar, Hex Viewer, Code Searcher, Debugger 등.

완전히 Java로 작성되었으며 오픈 소스 입니다.

Decompilation을 위해 FernFlower, Procyon 및 CFR을 사용합니다. 최첨단 디 컴파일러를 사용하는 멋진 시각적 도구 :

Enigma

난독 해제를 위해 특별히 설계된 도구 :

원래 Minecraft 버전의 난독 해제에 사용되었습니다. 내부적으로 Procyon을 사용합니다.

최신 포크 여기에서 찾을 수 있습니다

재미 있습니다. 자바 용 디 컴파일러 및 디 난독 화 프로그램에 대한 많은 노력은 자바로 구현 된 가장 인기있는 게임 중 하나 인 Minecraft 주변의 모딩 장면의 결과입니다.

출처 : http://blog.macuyiko.com/post/2015/a-quick-look-at-java-decompilers.html

댓글

  • 이 답변 업데이트가 필요할 수 있습니다. JD-Gui는 2019 년 3 월 현재 활발하게 개발되고있는 것으로 보입니다. java-decompiler.github.io
  • Java 7이 있습니다. 제가 ' 몇 가지 측면을 작성하려고하는 코드입니다. 내장 된 intellij 디 컴파일러는 경우에 따라 잘못된 변수 이름을 가지며 코드 블록을 생략 할 수 있습니다. JD-Gui는 이러한 블록을 표시하고 더 정확한 변수 이름으로 보이는 것도 표시합니다. 또한 JD-Gui의 이전 버전과 새 버전의 차이점을 나란히 보여줍니다. ' 당신이 심각한 반전을하고 있다면 ' 살펴볼 가치가 있습니다.

Answer

이 중 어느 것이 가장 좋은지 말할 수는 없지만이 SO 질문 . 이러한 디 컴파일러 중 어느 것도 난독 화 처리를 적극적으로 시도하지 않는 것으로 보이며 많은 프로젝트가 중단되었습니다.

Krakatau ,하지만 찾는 데 도움이 될 것 같습니다.

  • Readme에서 :”Krakatau 디 컴파일러는 다른 접근 방식을 사용합니다. 대부분의 자바 디 컴파일러. 입력 언어가 Java 바이트 코드이고 대상 언어가 Java 소스 코드 인 컴파일러로 생각할 수 있습니다. Krakatau는 임의의 바이트 코드를 가져와 동등한 Java 코드로 변환하려고합니다. 이렇게하면 “원본”소스를 재구성하지 않는 단점이 있지만 난독 화되지 않은 Java 클래스에 대해 패턴 일치 디 컴파일러가 생성하는 것보다 읽기 어려운 출력으로 이어지지 만 사소한 난독 화에 견고합니다. “
  • 이것은 공개되어 있습니다. 소스이며 (이 글을 쓰는 시점에서) 적극적으로 유지되는 것으로 보입니다.

코멘트

  • 실제로 디스어셈블러의 출력입니다. 디 컴파일러는 Java 출력으로 디 컴파일합니다. (PS저는 ' 개발자입니다.)
  • JD-GUI는 현재 최고의 Java Decompiler 중 하나이지만, deobfuscator와 함께 사용해야합니다. 코드를 디 컴파일하기 전의 바이트 코드. 내가 아는 최고의 자바 해독기는 rune-server.org 또는 moparscape.org/에서 왔습니다. smf 또는 moparisthebest.org/smf 는 완전히 Java로 작성되고 고도로 난독 화 된 Runescape Game의 해킹 커뮤니티입니다.

답변

바이트 코드 뷰어 살펴보기 https://github.com/Konloch/bytecode-viewer 5 가지 디 컴파일러를 사용하여 디 컴파일 할 수있는 옵션이 있습니다.

  • FernFlower
  • Procyon
  • CFR
  • Krakatau
  • JD-GUI

댓글

  • 정말 좋은 제안이었습니다. 감사합니다. fernflower cli를 사용하는 것보다 훨씬 낫습니다!

답변

우선, 수정이 있습니다. 누락 된 클래스와 관련된 Fernflower 문제는 여기 를 참조하세요. 이에 대해 agaricusb에게 감사를 표할 수 있습니다.

현재 Fernflower는 지난 몇 년간 유지 관리되지 않았더라도 최고의 Java 디 컴파일러로 남아 있습니다. 최근 저자에게 연락을 시도했지만 여전히 운이 없습니다.

AndroChef Java Decompiler의 경우 저자의 허가를받은 엔진으로 Fernflower를 사용합니다. 패치 / 수정을 사용하는지 여전히 확실하지 않습니다. 버전 또는 그것은 단지 GUI입니다.

@ mike-strobel이 개발 한 Procyon 디 컴파일러는 좋은 것 같지만 Fernflower는 여전히 큰 이점을 가지고 있으며 내 애플리케이션의 약 95 %를 디 컴파일 할 수있었습니다 (~ 3000 procyon은 60 % 만 처리 할 수있었습니다 (2014 년 1 월 확인).

댓글

  • 귀하의 애플리케이션은 네이티브 " Java 또는 Android 형식에서 변환 되었습니까? 전자 인 경우 바이너리 파일을 사용하여 Fernflower와 비교하여 Procyon이 고장난 위치를 확인하고 싶습니다.
  • @MikeStrobel It ' s " 네이티브 " Java 애플리케이션. ' 내부 전용이므로 ' 어쨌든 공유 할 수 없습니다.
  • 모든 기회를 놓칠 수 있습니다. 어떤 종류의 문제가 발생했는지 설명하는 이메일을 받습니까? 저는 항상 Procyon이 어떻게 향상 될 수 있는지 듣고 싶어합니다. 내 연락처 정보는 프로젝트 '의 BitBucket 사이트에 있습니다.
  • @MikeStrobel 관심을 가져 주셔서 감사합니다. ' 확장 된 정보와 예제 클래스를 제공하려고 노력하지만 약속은 없습니다.

답변

https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine 를 사용하고 있습니다. IntelliJ의 디 컴파일러입니다. JD-GUI가 실패하는 경우 코드를 디 컴파일합니다.

다운로드하는 것은 “비공식 미러입니다. http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

답변

AndroChef Java Decompiler를 추천합니다. AndroChef Java Decompiler는 난독 화 된 Java 6 및 Java 7 .class 및 .jar 파일을 성공적으로 디 컴파일합니다.

댓글

  • ANDROCHEF에주의를 기울이십시오! AndroChef는 버려진 고사리 디 컴파일러를위한 포장지 일뿐입니다. ' 돈을 낭비하지 마세요!

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다