Basilica android

sharku.egloos.com



Zelix Klassmaster 설치 & 사용법 by sharku

잠깐 딴짓하다가 발견한 도구인데...
설치방법이 한글로는 없길래.. 남겨놓습니다

간단히 설명하자면 자바 난독화도구입니다
실제 ProGuard 라는 도구가 안드로이드에서 쓰이지만
이 도구는 jar 파일만 직접 난독화를 해줍니다.
기본이 ProGuard 인듯 한데 직접 ProGuard를 사용해도 무방할 듯 합니다.

ProGuard와 비교

간단히 비교하자면
ProGuard는 홈페이지에서 이렇게 소개하고 있습니다
총 네 단계를 거치는데
  • In the shrinking step, ProGuard starts from these seeds and recursively determines which classes and class members are used. All other classes and class members are discarded.
  • In the optimization step, ProGuard further optimizes the code. Among other optimizations, classes and methods that are not entry points can be made private, static, or final, unused parameters can be removed, and some methods may be inlined.
  • In the obfuscation step, ProGuard renames classes and class members that are not entry points. In this entire process, keeping the entry points ensures that they can still be accessed by their original names.
  • The preverification step is the only step that doesn't have to know the entry points.
이 중에서 난독화 단계를 보면 단순 변수와 메소드의 이름만 바꿔줍니다.
이것만으로 충분히 어려워지지만 복구하지 못할 수준은 아닙니다.
그리고 함수부분은 최적화 과정에서 코드들의 변동이 약간 있습니다.
최적화만 하기에 크게 변동은 되지 않습니다.
결론적으로 난독화의 기본만 사용한다고 보면 됩니다.

아무래도 ProGuard와 Zelix Klassmaster를 섞어 쓰는 것이 좋아 보입니다.
젤릭스는 약간 실행이 느려지는거 아니야? 할정도로 섞어버립니다
심지어 변수까지 알아볼수 없을 형태로 만들수도 있습니다.
만약 카카오톡에서 이것을 사용했다면 복호화에서 진행했던 키값을 절대 유추할 수 없겠죠.
동적분석에는 가능하리라 봅니다.

무조건 찬양글 같은데..
젤릭스가 유료라서 저는 좋아하지는 않습니다...

1. 다운받기
2. 설치하기
3. 사용하기

이렇게 시작하겠습니다~!!

-------------------------------------

설치하기 전에 필요한 것은 Java 입니다.
Zelix는 jar파일로 실행하기 때문에 자바를 꼭 설치하세요.

1. 다운받기

먼저 해당 사이트에 접속해봅니다.

간단히 살펴보면 가격들이 나와있는데 유료도구라는 것을 알 수 있습니다

하지만 Try It 메뉴를 통해서 한달정도는 무료로 사용이 가능한 것을 알 수 있는데

여기에서 중요한 것은 이메일 주소입니다.
지메일이나 다음메일같이 무료로 제공되는 메일주소는 사용할 수 없습니다.
회사메일을 사용하시는 것을 추천합니다.
우회가 가능하신분은 하셔도 되구요..


2. 설치하기
사실 설치랄것도 없긴 합니다..

그러면 메일로 메뉴얼과 설치파일이 옵니다
(위 그림은 받았던 자료를 다음메일로 포워딩해서 받은겁니다)
docs가 메뉴얼이고 eval이 평가판입니다.

실제 필요한 eval 파일을 압축을 풀어보면 다음 파일이 생성됩니다.
그 중에서 
위 파일을 주목하면 됩니다..

커멘드 창에서 실행할수 있으나 여기에서는 그냥 이 파일을 더블클릭하면 됩니다
만약 실행이 안된다면 [오른쪽클릭] - [연결프로그램] - [Java(TM) Platfrom ..] 을 선택해주면 됩니다

물론 자바가 설치되어있어야 합니다.

실행하면 다음과 같은 창이 뜨면 성공입니다.
동의를 눌러주고
그다음 창이 하나 더 뜨는데 설정해도 되고 그냥 취소를 눌러도 됩니다.


만약 성공이 안되면 다음같은 방법도 있습니다.
(같은 폴더에 있는 install.html 을 참고하면 됩니다)

커맨드창을 띄우고
해당 폴더로 가서 아래와 같이 입력합니다.
java -Xmx256m -jar ZKM.jar

Xmx256m 은 256메모리로 작동한다는 뜻입니다.

(검정색으로 가려진 부분은 1번에서 메일로 요청했을때 적었던 이름,이메일주소가 나오길래 지웠습니다)

이렇게 되면 똑같이 실행됩니다..

그럼 써보죠..

3. 사용하기

여기에서는 한개 파일만 작업하겠습니다.
인터페이스는 여러개를 연동해서도 가능해 보입니다..
기본 클래스 참조하는부분도 설정할수 있구요...(Optinos - Classpath)

여기에서는 Obfuscate 만 사용하겠습니다

File - Open 으로 파일을 불러옵니다
저는 kakao.jar 파일을 불러오겠습니다.

이렇게 불러와지면 Tools - Obfuscate 에서 실행하면 됩니다. 
처음 뜨는 창은 Name Exclusions 인데 난독화하지 않을 이름들을 지정하는 부분입니다..
세부 설정은 잘 모르므로 그냥 Next를 눌러 진행하겠습니다.

그러면 중요한 부분입니다. 어떻게 난독화를 할것인지 정하는 창입니다

use input change log file
produce a change log file
Obfuscate control flow
Exception obfuscation
Encrypt String literals
Mixed case class names
collapse packages.
aggressively rename methods
randomize obfuscation
Keep inner class information
Keep generics information
Local variable tables
Line number tables
auto reflection handling
preverify

이렇게 옵션이 많습니다..
docs 파일이 보면 설명서가 있으니 참고하시면 되고
실행 속도 감소부분을 생각해보면 
보통 단계가 light, normal, aggresive 이렇게 나눠지는데
무겁게 설정할수록 실제 실행 속도가 느려집니다. 여기에서는 감소율을 퍼센트로 정의하고 있는데
Obfuscate control flow 부분만 본다면 각각 1%, 25%, 25% 이렇게 감소 한다고 합니다. 
파일 크기도 늘어나구요..

또 한가지 더 살펴본다면 Encrypt String literals 를 살펴보면
normal 로 하면 바이트코드 단계에서 스트링 값을 암호화해서 저장하고
aggresive 로 설정하면 컴파일러 단계에서 암호화해서 저장합니다.
flow obfuscate 로 설정하면 복호화 메소드가 바이트코드로 저장되지 않습니다..
그래서 오류가 발생할수도 있다고 하네요..

normal 로 하더라도 알아볼수 없을텐데..
여기에서는 flow obfscate로 살펴보겠습니다.

암호화 후에 원래 구문이 어떻게 되는지 비교해보면


왼쪽이 난독화 후 오른쪽이 난독화 전입니다.
우선 복호화가 간단하게는 안되며
확실히 알아볼수 없게 원래와 전혀 관계없는 값들이 들어있는 것을 알 수 있습니다..
그리고 비슷한 값들도 순서가 뒤죽박죽으로 되어있습니다

적절히 활용하면 보통 이상의 효과를 낼 수 있을듯 합니다..
이상입니다~!!