안드로이드 앱  자바 언어적 특성상 쉽게 디컴파일되는 특징이 있다.

때문에 분석이 용이한데 이를 방지하기 위해서 분석 방지 솔루션(보안 솔루션)을 사용한다.

 

분석 방지 솔루션은 크게 두 가지 방법으로 나눌 수 있다.

첫째, 

디컴파일 되더라도 프로그램의 기능이나 흐름을 파악할 수 없도록 클래스, 메소드, 필드들의 이름을 특수한 형태로 바꾸어 난독화 시키는 방법이 있다. 난독화에는 다양한 방법이 있다.

1) 이름 난독화(Renaming) - 필드, 메소드, 클래스의 이름을 의미 없는 이름으로 변경한다.

  showMessage() -> abc()

2) API 은닉(API Hiding) - Java Reflection 이용

Class a = Class.forName("testClass")

3) 흐름 제어(Control Flow) - 클래스 속의 메소드 등의 영역을 바꾸거나, 의미 없는 더미 코드를 삽입하여 코드 흐름 파악을 어렵게 한다.

i = 0;                                // 흐름 제어 전
while( i < 10){
  i = i + 1;
}
i = 0;                               // 흐름 제어 후
while( i < 10){
  i = i +  9 - 11 + 3;
}

4) 문자열 암호화(String Encryption) - 애플리케이션에서 사용하는 문자열을 암호화하여 읽을 수 없게 하고 실제 애플리케이션 구동시에는 복호화 메소드를 이용해 정상 출력하게 한다.

···                                                          // 문자열 암호화 전
TextView example = new TextView(this);
example.setText("Test String");
setContentView(example);
···
···                                                          // 문자열 암호화 후
TextView example = new TextView(this);
example.setText(decrytion("b/$$*"));
setContentView(example);
···

5) 클래스 암호화(Class Encryption) - 파일 내용 전체를 암호화하여 저장해 두었다가 동적으로 복호화, 클래스 로더로 로딩

 

'Android > Reversing' 카테고리의 다른 글

APK 파일 보호 기법(2)  (0) 2020.03.13
arm 기반 ELF 파일 만들기  (0) 2020.03.12
DEX 동적 분석(1) - IDA  (0) 2020.03.10
DEX 동적 디버깅하기 위한 조건  (0) 2020.03.10
smali 코드 패치로 루팅 우회하기  (0) 2020.03.10

WRITTEN BY
Bugday

,