최고의 Java obfuscator? [닫은]


107

보안 소프트웨어를 개발 중이며 리버스 엔지니어링이 불가능 해 지도록 Java 코드를 난독 화하고 싶습니다. 가장 안정적인 Java obfuscator는 무엇입니까?


10
@Xinus "리버스 엔지니어링 불가능하게"- 거의 최선의 노력하지 않고 실패
개미

212
심하게 난독 화 된 코드를 만든 동료가있었습니다. 그러나 그것은 그들의 의도가 아니 었습니다.
Steve McLeod

7
It was once said that if you had an infinate amount of monkeys on typewiters and an infinate amount of time, they would write all of the great works of Shakespeare.-Dilbert
ant

7
리버스 엔지니어링을 피하는 것은 불가능합니다.
Mnementh

11
@Mnementh : 특정 앱에 대해 리버스 엔지니어링을 엄청나게 비싸게 만드는 것으로 충분합니다.
Dmitry Leskov

답변:


99

첫째, 당신은 정말 사실을 기억할 필요가 결코 리버스 엔지니어링의 뭔가 불가능합니다. 모든 것이 해킹 가능합니다. 스마트 IDE를 사용하는 스마트 개발자는 이미 충분히 발전 할 수 있습니다.

여기 에서 목록을 찾을 수 있습니다 . ProGuard는 꽤 좋습니다. 직접 사용했지만 Java 코드를 "축소"하기 위해서만 사용했습니다.


1
@BalusC : 자바 코드를 난독 화하기 위해 어떤 도구를 사용합니까? 당신은 당신의 자바 코드를 난독 화하지 않습니까?
Thinhbk

@Thinhbk Obfuscation은 유용한 스택 추적을 얻기 어렵게 만듭니다.
Thorbjørn Ravn Andersen 2015

@ ThorbjørnRavnAndersen : 동의합니다. IMO, 난독 화는 스택 추적을 대부분 쓸모 없게 만듭니다. 이 경우 도움이 될 수있는 로그 메시지에 몇 가지 트릭을 사용하고 있습니다.
Thinhbk 2015

2
@Thinhbk Proguard는 난독 화 된 스택 추적을 원래 코드로 다시 변환하는 맵을 생성합니다. 그렇지 않으면, 당신이 말했듯이 스택 추적은 쓸모 없게 될 것입니다 (그러나 어쨌든 잡히지 않은 예외를 얻는 사람은 ... ;-))
Matthieu

@Matthieu : 원본 코드로 백업 된 스택 추적을 자동으로 번역 할 수 있습니까? 그것은 훌륭하고 저에게 새로운 것입니다. 코드베이스가 크면 수동으로 다시 번역하는 것이 어려울 수 있다는 것을 알고 있습니다.
Thinhbk

33

컴퓨터가 그것을 실행할 수 있다면 적절한 동기를 가진 사람이 그것을 리버스 엔지니어링 할 수 있습니다.


3
얼마나 많은 사람들이 난독 화 된 코드를 읽고 논리를 이해할 수 있습니까? 엔지니어 친구가 많아서 할 수 없습니다. John Nash만이 할 수 있습니다;)
kodmanyagha 2017-06-24

5
@kodmanyagha 그들이 충분히 동기를 부여했다면 그들은 그것을 배울 것입니다. 어렵지 않습니다.
Thorbjørn Ravn Andersen

1
수학적 의미에서 리버스 엔지니어링 방법없이 실행할 수 있습니다. 이것이 동형 암호화에 관한 것이지만 SaaS와는 달리 컴퓨터 소프트웨어에서 실제로 사용할 수 있도록 해결해야 할 몇 가지 장애물이 있습니다. 우리는 천천히 그곳으로 이동하고 있습니다. Amit Sahai 등의 완전 동형 암호화 및 "수학적 직소 퍼즐"에 대한 Gentry의 세미나 작품. 그 방향으로 크게 도약했습니다. 전체 계획을 실현할 수있는 단 하나의 누락 된 요소 ( "장벽 기능"이라고 부름)가 있습니다. 지금 불가능한 것이 미래에 가능할 것입니다.
ogggre

30

내 기사 Protect Your Java Code-Through Obfuscators And Beyond [Archived] 에서 난독 화와 앱의 리버스 엔지니어링을 더 비싸게 만드는 다른 세 가지 방법에 대한 토론과 도구 및 추가 자료에 대한 링크 모음을 확인하십시오.


1
이것이 제가 실제로 필요한 것입니다. 내 프로젝트를 위해 PHP obfuscator를 작성하고 싶습니다. 논리는 모든 곳에서 동일합니다. 감사합니다 ...
kodmanyagha

1
Java 난독 화 및 소프트웨어 수집에 대한 멋지고 광범위한 기사.
m3nda

15

Proguard가 최고라고 생각합니다. IDE (예 : NetBeans)와 통합 할 수도 있습니다. 그러나 코드를 난독 화하면 로그에서 문제를 추적하기 어려울 수 있습니다.


6
+1은 "코드를 난독 화하면 로그의 문제를 추적하기 어려울 수 있음을 고려하십시오." 디버깅이 충분히 어렵다고 생각했을 때 ...
Adam Paynter

7
이름과 줄 번호 정보를 변경하는 좋은 난독 기는 프로세스를 되돌릴 수있는 로그를 생성해야합니다. 이렇게하면 최소한 스택 추적이 난독 화 된 바이너리에 유용합니다.
Joachim Sauer

3
ProGuard는 디버깅을 위해 이러한 리버스 파일을 생성합니다. :-)
Malax



7

아무도 집을 훔칠 수 없도록 순서대로 집을 보호하는 것이 불가능한 것처럼 일부 코드를 리버스 엔지니어링하는 것이 항상 가능하다는 것은 사실입니다. 그래도 문을 잠그는 데 방해가되지는 않습니다. 사실 저는 자바 세계에 있지 않으며 .net에 BitHelmet 을 사용 합니다.


7
+1하면 net 0으로 돌아갑니다.이 답변은 도움이되지 않습니다.
HaloWebMaster 2013-06-05

6

나는 이전 회사에서 Klassmaster 와 함께 일했고 정말 잘 작동하고 빌드 시스템과 꽤 잘 통합 될 수 있습니다 (메이븐 지원은 훌륭합니다). 그러나 그것은 무료가 아닙니다.



6

솔루션이 안전한지 확실하지 않지만 ClassGuard 솔루션 에 대해서는 http://www.javaworld.com/community/?q=node/1604#comment 에서 기사와 주석을 읽는 것이 흥미 롭습니다 . -12296


그리고 defineClass 대신 네이티브 코드를 사용하는 또 다른 대안은 JarCrypt입니다
Renato

ClassGuard 를 해독하는 방법을 가르치는 기사 : setrst.blogspot.com/2010/04/classguard-unguarded.html . 이것이 최신 버전에서 여전히 작동하는지 모르겠습니다.
Renato 2011 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.