본문 바로가기

보안/시큐어코딩

자바 디컴파일 방지 솔루션 JavaProtect 1.5

출처: http://m.blog.naver.com/mearee/220042040502


================= 원문 =================



JavaProtect V1.5 User Guidebook

 

 

 2014/07/28 - 프로그램이 업데이트 되었습니다. 

자세한 정보는 다음 링크를 이용하세요.

 http://blog.naver.com/mearee/220074899746

 

 

프로그램 다운로드 URL: http://1drv.ms/1nSahuJ

매뉴얼 다운로드 : http://1drv.ms/1lRrRxP

 

 

내용 목차

I.    JavaProtect    4

1.1.    JavaProtect란?    4

1.2.    JavaProtect 환경 최소 요구사항    4

1.3.    JavaProtect V1.5의 기능    5

II.    JavaProtectV1.5 인터페이스    5

2.1. 실행    5

2.2. JavaProtect V1.5 화면 구성    7

 

 

그림목차

[그림 1] 프로그램의 실행    5

[그림 2] 프로그램의 로딩 및 실행직후 화면    5

[그림 3] 프로그램의 GUI    6

[그림 4] 기본화면 GUI    7

[그림 5] 원본파일의 위치 선택    7

[그림 6] 출력폴더의 선택    8

[그림 7] SDK 및 ClassPath의 선택    8

[그림 8] APK SIGN을 위한 Command    8

[그림 9] APK Sign을 위한 Argument    8

[그림 10] Keystore 파일의 위치    8

[그림 11] KeyStore의 명칭    8

그림 12    9

[그림 13] 선택 보호규칙    9

[그림 14] Dex2Jar의 위치선택    9

[그림 16] Dex2Jar의 Argument    10

[그림 17] Jar2Dex의 위치선택    10

[그림 18] Jar2Dex의 Argument    10

[그림 19] Jar파일의 위치선택    10

[그림 20] Jar파일 Argument    10

[그림 21] ZipAlign 위치    10

[그림 22] ZipAlign Argument    10

[그림 23] 이름변경이 안돼야 할 목록들    10

[그림 24] 등록된 이름변경이 안 되야 할 목록들    11

[그림 25] 이름변경이 안되 야할 것들의 설정버튼    11

[그림 26] 이름변경금지 항목의 선택    11

[그림 27] 실행버튼    12

 

 

  1. JavaProtect란?

 

자바프로텍트는 기존 자바로 만들어진 소스코드를 난독화 하여 해당 소스코드를 보호하는 기능을 가지고 있습니다.

자바로 만들어진 프로그램의 경우 플랫폼의 독립성을 위해 바이너리 컴파일을 하는 게 아닌 중간 바이트코드로 컴파일 되기 때문에 디컴파일이 가능합니다.

디컴파일을 하였을 경우 소스코드가 보여지기 때문에 해당 소스코드를 보호하기 위한 난독화가 필요합니다.

JavaProtect 는 APK 및 JAVA로 만들어진 프로그램의 소스코드를 안전하게 보호 할 수 있습니다.

 

본 프로그램은 무료로 배포됩니다.

 

  1. JavaProtect 환경 최소 요구사항

 

표 1 – 요구사항

구분

요구 사항

OS

Windows XP이상

RAM

2GB 이상

Framework

JAVA

HDD

100mb 이상

Network

외부와 연결된 네트워크

 

본 JavaProtect V1.5는 [표 1 – 요구사항]에 나와있는 항목을 필요로 합니다.

APK를 난독화 하실 때에는 JAVA를 필요로 합니다. 또한 라이선스의 검증을 위한 외부와 연결된 네트워크를 필요로 합니다. 물론 무료로 배포되는 프로그램이긴 하나, 1년에 한번씩 라이선스를 재발급 받아 사용해야 합니다. 라이선스를 발급받을 때에 비용은 들지 않습니다.

 

  1. JavaProtect V1.5의 기능

 

표 2 – JavaProtect V1.5의 기능

APK 코드난독화

APK(Android) 파일을 난독화할 수 있습니다.

해당 난독화 파일은 바로 설치/사용할 수 있습니다.

JAR 코드 난독화

JAR 파일을 난독화 할 수 있습니다.


  1. JavaProtectV1.5 인터페이스

 


  1. 실행

 

  1. JavaProtectGUI.exe 실행 파일을 더블클릭 합니다.

     

[그림 1] 프로그램의 실행

  1. 정상적으로 실행 될 경우 [그림]2 와 같이 실행됩니다.

     

[그림 2] 프로그램의 로딩 및 실행직후 화면

 

 

[그림 3] 프로그램의 GUI

 

   

  1. JavaProtect V1.5 화면 구성

     

    1. 기본 화면 구성

[그림 4] 기본화면 GUI

 

  1. 원본파일

[그림 5] 원본파일의 위치 선택


원본파일은 난독화를 해야 할 대상자, 즉 원본파일을 선택하는 위치입니다. 찾아보기를 클릭하여 해당 파일을 선택하시면 원본파일의 선택위치가 바뀐 것을 확인할 수 있습니다.

 

원본 파일에 선택할 수 있는 파일들은 APK 파일, JAR 파일, DEX 파일, ZIP 파일등이 있습니다.

 

  1. 출력폴더

[그림 6] 출력폴더의 선택


해당 원본파일을 난독화 한 후 난독화된 파일을 출력할 위치를 선택합니다. 찾아보기를 클릭하여 해당 폴더를 선택하시면 난독화된 파일의 출력위치가 바뀐 것을 확인 하실 수 있습니다.

 

  1. SDK or ClassPath

[그림 7] SDK 및 ClassPath의 선택


난독화를 하기 위하여 필요한 ClassPath 및 SDK의 위치를 지정합니다.

안드로이드용 APK의 경우, 안드로이드 SDK의 JAR 파일인 android.jar 과 uiautomator.jar를 선택하시면 되고,

Java 프로그램을 난독화 하기 위해서는 Java 설치 폴더의 JRE 디렉토리의 JAR 파일들을 설정해주면 됩니다.

 

  1. SignCommand

[그림 8] APK SIGN을 위한 Command


APK 파일의 경우 설치 시 SIGN을 필수로 필요로 하기 때문에 Sign을 할 프로그램을 선택합니다.

보통 APK Sign을 위해서는 JDK 설치 폴더의 jarsigner.exe 를 이용합니다.

 

  1. SignArgs

[그림 9] APK Sign을 위한 Argument


APK파일의 싸인 Argument 입니다 jarsigner.exe에 맞게 기본 설정되어 있습니다.

 

  1. Keystore 파일

[그림 10] Keystore 파일의 위치


APK 서명을 위한 Keystore 파일을 선택합니다.

 

  1. Key Alias

[그림 11] KeyStore의 명칭


KeyAlias 파일의 명칭을 적어둡니다. 해당 Keystore파일에서 파싱할 Key입니다.

이클립스에서 키 store만들 때 넣었던 문자열입니다.

 

  1. 보호규칙

그림 12

[그림 13] 선택 보호규칙


  1. 패키지이름변경

    해당 난독화시 패키지 이름을 변경할 여부를 선택합니다. 패키지 이름을 감추는 데에 사용합니다.


  2. 클래스이름변경

    클래스 이름을 변경하는데 사용합니다. 디컴파일되어 분석을 할 경우 난이도를 상승시킵니다.


  3. 메소드이름변경

    메소드이름을 변경하는데 사용합니다.


  4. 필드이름변경

    필드 이름을 변경하는 데에 사용합니다.


  5. 디버그정보삭제

    디버그 정보를 삭제합니다.


  6. 시작클래스보호

    시작클래스를 보호합니다. 즉, public static void main() 함수가 들어 있는 클래스의 클래스 이름을 바꾸지 않습니다. 자바 Applet의 경우, Applet 시작 코드가 들어 있는 클래스 이름을 바꾸지 않습니다.


  7. 클래스조각내기

    클래스를 작게 분해하여 여러 클래스로 생성합니다. 디컴파일 되어 분석 시 어렵게 합니다.


  8. 어플릿클래스

    에플릿클래스일경우 체크합니다. Applet class의 경우 꼭 체크해주셔야 합니다.


  9. Native지원

    Native코드를 지원합니다. 만약, native 인터페이스로 선언된 메소드가 있을 경우, 클래스 이름과 메소드 이름을 변경하지 않습니다.


  10. 시작클래스 외 숨기기

    분석을 어렵게 합니다. 어플릿이나 자바 프로그램의 main() 함수가 있는 클래스 이외에는 모두 다른 패키지로 묶어서 버립니다.


  1. Dex2JarCmd

[그림 14] Dex2Jar의 위치선택


APK 파일에서만 사용됩니다.

기본적으로 자바프로텍트에는 Dex2Jar기능이 포함되어 있으나, 추후 DEX의 규격이 바뀌거나 혹은 별도의 Dex2Jar 프로그램을 이용하고자 할 경우에 사용할 수 있습니다.

 

  1. Dex2JarArgs

[그림 16] Dex2Jar의 Argument


APK파일에서만 사용됩니다.

기본적으로 dex2jar 명령어에 대한 전달인자로 설정되어 있습니다.

 

  1. Jar2DexCmd

[그림 17] Jar2Dex의 위치선택


APK 파일에서만 사용됩니다.

기본적으로 자바프로텍트에 jar2dex 기능이 포함되어 있습니다. 별도의 프로그램으로 jar2dex를 이용하고자 할 경우에만 설정해줍니다.

 

  1. Jar2DexArgs

[그림 18] Jar2Dex의 Argument


Jar2Dex의 프로그램이 변경되어 인자 값의 변경이 필요할 경우 사용됩니다.

기본적으로 변경하실 필요가 없습니다.

 

  1. JarCMD

[그림 19] Jar파일의 위치선택


  1. JarArgs

[그림 20] Jar파일 Argument


자바프로텍트에는 기본적으로 패키징기능이 포함되어 있으나, 별도의 APK 패키징을 위한 압축을 할 때 사용하는 명령어 입니다. Zip 이나 jar를 이용하여 압축을 할 수 있으나, 여기서는 jar를 이용하여 패키징화 할 수 있도록 기본 설정되어 있습니다.

 

  1. ZipAlignCmd

[그림 21] ZipAlign 위치


  1. ZipAlignArgs

[그림 22] ZipAlign Argument


기본적으로 자바프로텍트에는 zip alignment 기능이 포함되어 있으나, 별도의 프로그램을 이용하여 zip alignment를 수행하고자 할 경우에 사용합니다.

 

  1. 이름보존목록

[그림 23] 이름변경이 안돼야 할 목록들


프로그램의 실행 시 이름을 보존해야 할 필요성이 있을 때가 있습니다.

하이브리드 앱일경우 Html단에서 호출하는 이름은 변경이 되면 안되기 때문에

해당 제외목록을 확인할 수 있도록 되어있습니다.

제외목록을 추가하기 위해서는 이름보존설정 버튼을 클릭하시면 됩니다.

[그림 24] 등록된 이름변경이 안 되야 할 목록들


등록된 이름을 추가하면 위와 같이 현재 제외되어있는 리스트를 확인 할 수 있습니다.


  1. 이름보존설정

[그림 25] 이름변경이 안되 야할 것들의 설정버튼

 

이름보존을 설정하여 변경되지 말아야 할 메소드이름 또는 클래스이름 등을 지정할 수 있습니다.

[그림 26] 이름변경금지 항목의 선택


이름변경 금지항목의 선택을 통하여 해당 금지항목을 추가 할 수 있습니다.


  1. 실행

[그림 27] 실행버튼


마지막으로 실행버튼을 클릭하면 해당 출력 디렉터리에 해당 난독화된 파일이 생성된 것을 확인 하실 수 있습니다.