반응형

1. Renaming

1.1 ClassRename

class renaming은 class의 이름를 "Base64Coder"처럼 식별할 수 있는 문자대신, "pabd63bb"와 같이 무슨 의미인지 알 수 없게 바꾸어 준다. 따라서 역공학으로 해당 파일을 보더라도 무슨 역할을 하는 지 알아차리기 힘들어 역공학을 방해한다. [1]

 

python3 -m obfuscapk.cli -o ClassRename ../../sample_apps/app_1.apk
apktool b app_1/ -o app_1_ClassRenamed.apk

 

ClassRename 난독화를 하고 해당 앱을 리패키징하여 jadx로 비교하였다.

class의 이름이 Base64Coder에서 pabd63bb로 바뀐 것을 알 수 있다.

 

기존앱을 virustotal로 검사하면 30개의 백신에서 탐지가 된다.

하지만 ClassRename을 하고 난 뒤에는 20개의 백신에만 탐지가 된다.

1.2. MethodRename

Method Rename method의 이름을 식별하기 힘들게 변경하는 것이다. 따라서 역공학시 해당 메소드가 어떠한 역할을 하는지 명시적으로 알기 어려워져 분석하기 어려워진다.[1]

python3 -m obfuscapk.cli -o MethodRename ../../sample_apps/app_2.apk

 

리패키징을 해준뒤 jadx로 기존앱과 비교하면

c.ca/a 자바 클래스 파일의 메소드 f m8fa14cdd로 변경됨을 알 수 있다.

 

백신탐지 비교 시

(왼쪽 : 기존 앱, 오른쪽 : MethodRename 적용)

Method Rename을 적용한 경우에 백신 탐지가 덜 되는 것을 알 수 있다.

 

2. Encryption

2.1. ConstStringEncryption

소스 코드의 문자열 상수를 암호화한뒤 decrypString함수를 통하여 복호화하여 원래의 문자열 상수를 얻도록 한다. 따라서 역공학 분석시, 암호화된 문자열이 어떠한 것을 가리키는 지 인식하기 힘들어 역공학을 어렵게한다.[2]

python3 -m obfuscapk.cli -o ConstStringEncryption ../../sample_apps/app_5.apk

app_5의 connector파일을 보면 "http://" String(왼쪽사진)이 암호화(오른쪽사진)되어 있는 것을 알 수 있다.

(jadx 사용)

\

 

백신탐지 비교시

왼쪽 : 기존앱, 오른쪽 : ConstStringEncryption적용)

ConstStringEncryption을 적용한 경우에 백신 탐지가 덜 되는 것을 알 수 있다.

 

2.2. AssetEncryption

python3 -m obfuscapk.cli -o AssetEncryption ../../sample_apps/app_2.apk

 

Asset 디렉토리에 있는 리소스를 복제, 수정으로부터 보호한다.[4]

 

smali/android/annotation 안에 DecryptAsset.smali가 생긴 것을 알 수 있다.

[그림] DecryptAsset.smali

 

또한 com.decryptassetmanager.DecryptAsset 파일이 생겼음을 알 수 있다.

[그림] com.decryptassetmanager.DecryptAsset

 

Assets에 접근 시 복호화하여 파일을 불러온다.

 

백신탐지 비교 시

(왼쪽 : 기존 앱, 오른쪽 : AssetEncryption 적용)

AssetEncryption을 적용한 경우에 백신 탐지가 덜 되는 것을 알 수 있다.

 

3. Code

 

3.1. Goto

java에는 없는 goto bytecode를 추가함으로써, control-flow를 수정하고 control-flow를 이해하기 어렵게 한다. [3]

python3 -m obfuscapk.cli -o Goto ../../sample_apps/app_2.apk

[그림]"smali/android/view/a.smali" 비교

 

처음에 메소드의 끝을 가리키는 goto가 있고, 메소드 끝에 메소드의 처음을 가리키는 goto가 추가되어 bytecode 흐름이 달라졌다.

 

 

백신탐지 비교시

(왼쪽 : 기존앱, 오른쪽 : Goto옵션 적용)

Goto 옵션을 적용한 경우에 백신 탐지가 덜 되는 것을 알 수 있다.

 

3.2. Reorder

Reorder는 역공학하여 분석하기 어렵도록, 메소드의 명령어 흐름을 복잡하게 한다. 왼쪽의 그림이 Reorder된 app_3의 BandManager.smali이다. [2] 오른쪽의 기존과 method와 다르게 추가된 내용도 생기고 흐름도 goto문이 생기는 등 복잡하게 바뀐 것을 알 수 있다.

python3 -m obfuscapk.cli -o Reorder ../../sample_apps/app_3.apk

[그림]"smali/com/BandManager.smali"비교

 

 

백신탐지 비교시

(왼쪽 : 기존앱, 오른쪽 : Reoreder 적용)

Reoreder 옵션을 적용한 경우에 백신 탐지가 덜 되는 것을 알 수 있다.

 

3.3. Nop

Nop 명령어를 추가하여 bytecode 흐름을 수정한다. 따라서 control flow를 이해하기 어렵게 한다. [3]

python3 -m obfuscapk.cli -o Nop ../../sample_apps/app_2.apk

왼쪽의 Nop 옵션이 적용된 app_2/smali/c/ca/a.smali 파일을 보면 오른쪽의 기존 파일과 다르게 nop 명령어들이 추가된 것을 알 수 있다.

[그림] "smali/c/ca/a.smali"비교

 

백신탐지 비교 시

(왼쪽 : 기존앱, 오른쪽 : nop 옵션 적용)

nop 옵션을 적용한 경우에 백신 탐지가 덜 되는 것을 알 수 있다.

 

 

 

 

 

 

3.4. ArithmeticBranch

ArithmetiBranch 옵션은 의미 없는 코드를 삽입하여 명령어 흐름을 복잡하게 만들다. 따라서 역공학시 분석을 하기 어렵게 한다. [2] 왼쪽의 ArithmeticBranch 옵션이 적용된 app_4/smali/com/example/eroplayer/MainActivity을 보면 오른쪽의 기존 파일과 다르게 junk code가 삽입된 것을 알 수 있다.

[그림] “smali/com/example/eroplayer/MainActivity.smali" 비교

 

백신 탐지 비교 시

 

ArithmetiBranch 옵션을 적용한 경우에 백신 탐지가 덜 되는 것을 알 수 있다.

 

 

 

 

 

일반적인 개발자의 입장에선, 안드로이드 난독화는 역공학을 어렵게하여, 개발자가 만든 소스코드, 파일 등을 보호할 수 있게 해주는 좋은 수단이다.

악성 앱 개발자의 입장에선, 안드로이드 난독화는 control-flow를 바꾸거나, 암호화, renaming등으로 백신이 악성코드를 탐지하게 어렵게 악용하는 수단이다. 

 

 

참고 논문

[1] 난독화에 강인한 안드로이드 앱 버스마킹 기법 김 동 진Š , 조 성 제° , 정 영 기* , 우 진 운**, 고 정 욱***, 양 수 미**** Android App Birthmarking Technique Resilient to Code Obfuscation Dongjin KimŠ , Seong-je Cho° , Youngki Chung* , Jinwoon Woo**, Jeonguk Ko***, Soo-mi Yang****

 

[2] 안드로이드 어플리케이션 역공학 보호기법 하 동 수*, 이 강 효*, 오 희 국*

 

[3] Android Code Protection via Obfuscation Techniques: Past, Present and Future Directions Parvez Faruki, Malaviya National Institute of Technology Jaipur, India Hossein Fereidooni, University of Padua, Italy Vijay Laxmi, Malaviya National Institute of Technology Jaipur, India Mauro Conti, University of Padua, Italy Manoj Gaur, Malaviya National Institute of Technology Jaipur, India

 

[4] APK에 적용된 난독화 기법 역난독화 방안 연구 및 자동화 분석 도구 구현* 이 세 영,† 박 진 형, 박 문 찬, 석 재 혁, 이 동 훈고려대학교 정보보호대학원

728x90
반응형

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

cwe119 버퍼 오버플로우 방어  (0) 2021.06.02
Widthness bugs  (0) 2021.06.02
암호화 기본 - 2  (0) 2021.06.02
암호화 기본 - 1  (0) 2021.06.01
apk 난독화  (0) 2021.05.17
블로그 이미지

아상관없어

,