2009-08-14 5 views
9

곧 공개적으로 배포 할 응용 프로그램을 만들고 있습니다. 내 프로그램을 다운로드하는 사람들이 리버스 엔지니어링하지 않도록 내 권한으로 무엇이든하고 싶습니다. .jar 파일을 배포하는 것은 매우 안전하지 않다는 것을 알고 있습니다.배포 용 Java jar 파일 보호

내 Java 응용 프로그램을 배포하는 데 플랫폼 독립적 인 방법을 권장하는 사람이 있습니까? 또한 모든 플랫폼 (Windows, Linux, Mac OSX)에서 서비스로 설치하고 싶습니다.

감사합니다.

답변

8
당신은/스크램블 yGuard 또는 다른 자바 바이트 코드 - 난독으로 바이트 코드를 당황하게 할 수

.

운영 체제 독립적 인 배포가 어려울 수 있습니다. IMHO 가장 좋은 해결책은 프로그램이 지원하는 운영 체제에서 프로그램 시작을위한 여러 스크립트 (Windows의 경우 .bat/.cmd, Linux/OSX의 경우 .sh)가 포함 된 일반 아카이브입니다.

서비스로 자바 프로그램을 실행하는 것이 훨씬 더 어려울 수 있습니다. Linux에서 실행하기 쉽습니다. 백그라운드에서 실행할 수있는 적절한 시작 스크립트를 작성하기 만하면됩니다. 필자는 FireDaemon이 java 프로그램을 서비스로 실행하는 데 문제가 있으므로 Windows에서 서비스로 실행하는 것이 어려울 수도 (또는 불가능할 수도 있음) 알아요. 죄송하지만 MacOS X에 대해서는 전혀 몰라. 리눅스만큼 쉽고 Windows만큼이나 빠를 수도 있습니다.

+0

난독 화가 방법입니다. – Carnell

2

GCJ과 같은 원시 코드 컴파일러를 사용 해본 적이 있습니까? 플랫폼 독립적이지 않습니다 (각 대상 플랫폼에 대해 컴파일해야 할 것입니다). 그러나 플랫폼 독립적 인 바이트 코드를 배포하고 최종 사용자로부터 해당 바이트 코드를 숨기는 방법을 알지 못합니다.

1

당신은 그것을 혼란스럽게 할 수 있습니다. 리버스 엔지니어링이 프로그램을 더 어렵게 만듭니다. 또한 클래스 파일을 실행 파일 (Windows 용 .exe)으로도 만들 수 있다고 생각합니다.

EDIT : 솔직히 말해서 애플리케이션에 대한 보안이 중요한 경우 Java를 모두 피하는 것이 가장 좋습니다. 예를 들어 gcc 컴파일러를 C++ 용으로 사용할 수 있습니다 (시스템 호출을하지 않는 한 플랫폼 독립적입니다). 다른 호스트 컴퓨터에서 컴파일해야합니다 (원래의 질문이 필요하지만 Java에서는 나타남).

Qt도 있지만 그 중 하나는 직접 시도하지 않았습니다.

+0

실행 파일을 만들 수는 있지만 가상 컴퓨터를 구축하는 것뿐입니다. –

+0

어렵지 만 불가능하지는 않습니다. –

2

jar를 암호화 할 수 있지만 사용자 정의 클래스 로더를 작성하여 jar의 내용을로드해야합니다. 그래도 100 % 바보 같은 증거는 아닙니다. 단순한 사실은 목표로하는 경우 코드를 100 % 안전하게 할 수 없다는 것입니다. 이 토론을 여기에서보십시오.

How to create encrypted Jar file?

+1

암호화 된 JAR 파일의 문제점은 실행을 위해 파일의 암호를 해독 할 수있는 코드를 제공해야한다는 것입니다. 이 코드는 해독 키/알고리즘을 결정하기 위해 리버스 엔지니어링 될 수 있습니다. –

+1

@Stephen - 100 % 동의하십시오. 이 방법은 정직한 사람을 정직하게하기 위해 만들어진 자물쇠와 같은 것일뿐입니다. 항아리에서 소스를 얻기 위해 모든 노력을 기울이려면 누구나 할 수 있습니다. 결국, 한번 해독되면 메모리에서 평범하게 읽을 수 있습니다. –

3

obfuscator를 통해 응용 프로그램을 실행하면 리버스 엔지니어링이 더 어렵고 비용이 많이 듭니다.

여러 플랫폼에서 서비스로 Java 응용 프로그램을 설치하고 실행하는 비교적 쉬운 방법은 Java Service Wrapper을보십시오.

2

다른 사람들이 말했듯이 코드를 난처하게 만들 수 있습니다. 그것은 리버스 엔지니어링이 중요하지 않을 것입니다. 예를 들어 GCJ를 사용하여 Java를 원시 코드로 컴파일 할 수도 있습니다. 이렇게하면 리버스 엔지니어링이 어려워 지겠지만 지원되는 하드웨어/OS 플랫폼마다 다른 배포 번들을 만들어야한다는 것을 의미합니다.

그러나 궁극적으로 리버스 엔지니어링을 방지하기 위해 수행 할 수있는 기술은 주식 플랫폼에서 실행되도록 소프트웨어를 배포하는 경우에는 인식 할 수 없습니다. 아무것도.

궁극적으로 소프트웨어를 배포 할 때 얻을 수있는 이점과 리버스 엔지니어링 할 때 위험을 감수해야합니다. 사람들이 취하는 한 가지 접근 방법은 이익이 위험 * 비용보다 중요한지 알아 내고, 리버스 엔지니어링을 막기 위해 법적인 안전 장치 (예 : 적절한 소프트웨어 사용권)를 사용하는 것입니다. 다른 접근 방식은 잠재적 리버스 엔지니어에게 "행운을 빌어 요"라고 말하고 소프트웨어 라이선스가 아닌 서비스를 제공하여 수익을 창출하는 것입니다.

1

또는 내가 한 일을 할 수 있습니다. C++로 작성된 특정 백엔드 기능이있는 Java 프론트 엔드는 JNI를 통해 호출되는 dll로 컴파일됩니다. 프론트 엔드 GUI는 완벽한 백엔드 그래먹과 완벽한 포팅이 가능합니다.