2013년 3월 25일 월요일

자신이 만든 jar 파일을 남이 뜯어 소스 보지 못하게 하기

jar 파일, Java로 만든 실행 파일을, 남이 뜯는 것을 방지하는 것은, 원천적으로 불가능하다고 합니다. 물론 C로 짠 것도 시간만 들이면 얼마든지 뜯을 수 있겠지만, 그 난이도가 차원이 다릅니다.

실제로, 자바 디컴파일러를 저는 가지고 있습니다. 알아보기 쉽게 변수명 함수명까지 그대로 나옵니다.

하지만,

jar 파일을 뜯어 소스 보는 것을 막는 건 불가능해도, 소스를 봐도 뭐가 뭔지 못알아보게 하는 방법은 있습니다.

http://proguard.sourceforge.net/#downloads.html

에 들어가세요.

Download section at SourceForge 버튼을 클릭하세요.

Download 어쩌구가 보이실 겁니다. 클릭해 다운받아 압축 푸시면 됩니다.

압축을 풀어보면

1

이렇게 나오는데, bin 폴더에 들어가세요.

image

여기에 우리가 실행할 파일이 있습니다. proguardgui 라고 보이시나요? 더블클릭.
리눅스 환경을 위해 sh 파일까지 친절하게 구비되어 있습니다.

도스창이 하나 뜨고, 이후 뭔가 창이 더 뜰 겁니다. 왼쪽 부분을 봐주세요.

image

우선, Input/Output 을 클릭해보세요. 그리고 오른쪽 부분을 보세요.

image

Add input 버튼을 클릭하면, 파일을 불러오는 창이 나타나는데, 소스를 공개하고 싶지 않은 jar 파일을 선택하세요.

Add output 버튼을 클릭하면, 파일을 저장하는 창이 나타나는데, 새로 만들어질 jar 파일이 어디에 저장할 지 지정하시면 됩니다.

다시 왼쪽으로 돌아와서 Obfuscation 을 클릭하세요.

창 아래 오른쪽 부분을 보세요.

image

Add 를 클릭하세요. 창이 또 하나 뜰겁니다.

image

여기가 중요한데, 일단 위와 같이 하세요.

Java 소스를 짜실 때, 클래스끼리 통신이 필요없는 것은 private 로 선언해 두셨어야 합니다. 그 private된 변수와 메소드 이름만 이상한 걸로 바뀌게 되고, public 으로 선언된 것은 그대로 남습니다.

OK 누르셔서 창 닫고, 원래 창으로 돌아와서, 다시 왼쪽을 보세요.

Process 를 클릭하세요.

image

이제 준비는 끝났습니다.

image

오른쪽 아랫 부분에 Process! 버튼이 있는데, 클릭하시면 작업이 수행됩니다.

만들어진 jar 파일을 배포하시기 전에, 반드시 실행해서 오류가 생기는지 확인해 보세요. 오류가 생긴다면, private 선언할 것과 public 선언할 것을 확실히 구분해 선언해 주시고 jar 파일을 다시 만들어서 위의 과정을 다시 따라 주세요.

디컴파일로 뜯어봤습니다.

먼저, 난독기 돌리기 전의 모습

image

그리고, 난독기 돌린 후의 모습

image

변수 이름이 q, r, s 등등 마구잡이로 섞여 있는 게 보이시나요?

위의 디컴파일러(Decompiler)가 필요하다면 http://blog.naver.com/hujinone22/185136002 에서 찾아보실 수 있습니다.

댓글 없음:

HJOW의 신버전 블로그입니다. 이 블로그는 제 관심사에 해당하는 기사, 동영상 등을 퍼오거나, 작성하는 곳으로, 마음껏 퍼가셔도 됩니다. 제 홈페이지는 http://hujinone11.dothome.co.kr 입니다.