반응형

역공학을 방지함

Why? 

- sw 자체가 수익임 따라서 불법복제를 막아야함

- 중요한 logic 유출 방지

- DRM 기술 또한 저작권 보호를 위해 역공학이 필요함

- sw 개발 플랫폼은 기본적으로 역공학 대책을 제공하고 있음

ex) 구글 proguard 제공

 

java, c#언어는 디컴파일, disassemble하기 편함 => binary 코드들에 비해서 byte코드들이 봉합되기 더 쉬움

따라서 안드로이드에서는 proguard (최적화 난독화 기법 제공)

 

- obfuscator (난독화 도구)

프로그램에 있는 정보를 수정, 제거함으로써 가독성을 감소 시켜주는 도구 => 분석하기 어려워짐 

 

Anti-reversing 방법

 

1.  symbolic 정보를 제거함

소스코드를 컴파일할 때 symbol정보를 제거함 (함수이름, 변수이름 ...) => 컴파일러가 컴파일 단계에서 시행함 따라서 디버깅하기 어려움

 

2. 코드 암호화

코드를 암호화하여 정적분석을 막음 

 

3. anti-Debugging

 

4. 프로그램 난독화

난독화 = 여러가지 기법을 뜻함

일반적으로 프로그램의 가독성을 떨어뜨리거나, 취약점을 제거하거나, 정적분석을 어렵게 하기 위해 사용되는 기법

따라서, 난독화를 하면 역공학이 어려워짐

ex) 레이아웃 변경, 프로그램 로직 변경, 데이터를 변경, 구성자체를 변경  => 프로그램을 분석하기 어렵게 함

 

- code 난독화

기능은 유지하면서, 사람이 코드를 분석하기 어렵게 변경하는 것

 

- 난독화 도구

ProGuard, DexGuard, Allatori ...

NHN 토스트 앱가드 -> 식별자 난독화(이름 재지정), 문자열 암호화, 제어흐름 난독화 등

 

* de-obfuscator : 난독화된 악성코드를 분석시 사용, 난독화를 해제시켜주는 도구

 

분석 지연 난독화 클래스, 메소드, 변수명 등을 의미 없는 문자나 식별할 수 없는 문자로 치환, 제어흐름 난독화
암호화 문자열, 리소스 등 암호화
코드 분리 핵심 로직이 담긴 코드를 분리하고 실행 중에 동적으로 적재
환경 탐지 디버거 탐지 프로세스 ID 확인, 디버깅 탐지 API 결과 값 반환
에뮬레이터 탐지 단말 ID, 전화번호, 빌드 값, IP 조사
플랫폼 해킹 탐지 OS 해킹 여부 확인
앱 변조 탐지 앱 위변조 여부, 앱 서명 값 확인

 

 

 

코드 난독화 기법 분류

 

- 레이아웃 난독화

예시) 식별자 난독화 (identifier renaming)

package iAmDriving{
	public class LetsNavigate{...}
}

pacakge iAmConnecting {
	public class MyBluetoothHandle{...}
}

pacakge userIsActive{
	public class MainActivity{...}
}



|
V


package a{
	public class a{...}
}

pacakge b {
	public class b{...}
}

pacakge c{
	public class c{...}
}

 

- 제어흐름 난독화 : 제어흐름 은닉, 추가코드 삽입(의미없는), disassemble 복잡하게 만듬

의미 없는 switch 문장 추가

중복되는 operator 추가

제어흐름의 순서 조작

제어흐름 flatten시킴(ex 여러개 함수를 하나의 함수로)

 

- 데이터 난독화 (자료구조 난독화)

data aggregation : 배열 변수를 합쳐서 (일차원 두개 합쳐서, 이차원으로), 클래스 상속을 조작하여 이해하기 어렵게함

data storage and encoding : encoding변경(기법 변경), 데이터 수정 

data ordering : 메소드나 array의 순서를 조작

 

- 예방적 변환

anti De-compilation

String encryption

 

 

 

728x90
반응형

'공부 > 보안' 카테고리의 다른 글

암호화 기본 - 1  (0) 2021.06.01
apk 난독화  (0) 2021.05.17
Reverse Engineering  (0) 2021.05.14
간단한 Android game app hacking  (0) 2021.05.03
SEED Lab Return-to-Libc Attack  (0) 2021.05.03
블로그 이미지

아상관없어

,