역공학을 방지함
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
'공부 > 보안' 카테고리의 다른 글
암호화 기본 - 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 |