첫번 째 방법은 디컴파일을 하여 코드를 분석하기 어렵게 하기 위한 방법이라면,
두번 째 방법은 아예 디컴파일을 못하게 하는 방법이다.
예전엔 Dex 파일 내부의 바이너리 변조를 통해 코드의 일부를 난독화시켜 디컴파일이 불가능하도록 했지만,
현재는 Dex파일 자체를 암호화하고 이를 래핑(Wrapping)한 후, 다시 리패키징하여 디컴파일 자체를 무력화시키는 방법을 사용한다.
특정 악성 앱은 안티 리버스 엔지니어링 및 데이터 도용 방지 목적으로 보안 솔루션을 이용하여 Dex 파일 자체를 암호화한 뒤 이를 스미싱 형태로 유포한다.
암호화된 Dex 파일은 .jar 형태로 Assets 폴더에 저장될 수 있으며 .jar 파일을 복호화하여 행위를 수행한다.
암호화된 Dex 파일(.jar)은 JNI Library를 로드하여 해당 라이브러리가 복호화한다.
복호화한 뒤 복호화된 Dex 파일을 메모리에 올린다.

출처 - https://blog.alyac.co.kr/749
두번 째 방법은 일명 패킹(실행 압축 기술)이라고 불리우는 방법이다.
우리가 보호하고 싶은 애플리케이션 A가 있다.
랩퍼 애플리케이션이라고 불리는 B 애플리케이션은 A 애플리케이션을 암호화하여 저장하고 있다가 프로그램을 시작하면 A의 실행 파일에 해당하는 .dex 또는 apk 파일 또는 .jar 파일을 복호화하여 실행한다.
이 처럼 보호하고 싶은 애플리케이션을 랩퍼 애플리케이션에 암호화하여 쌓은 뒤 실행할 때 랩퍼 애플리케이션에 의해 복호화되어 실행되는 방법이 있다.
우리는 두번째 방법, 랩퍼 B 애플리케이션에 쌓여 있는 A 애플리케이션을 구해서 분석하는 방법을 알아보자!.
루팅 기기를 이용한 분석 방지 솔루션 우회
분석을 위해서는 루팅된 기기가 필요하고 솔루션이 적용된 애플리케이션을 설치해야한다.
애플리케이션을 실행 시킨 뒤 메모리 맵을 확인하기 위해 프로세스의 PID를 확인한다.

해당 앱의 PID는 9396이다. PPID는 15335로 zygote이다.
1675404는 VSIZE로써 이는 가상 메모리의 크기다.
102460은 RSS(Resident Set Size)로 실제로 할당된 메모리를 나타낸다.
# cat /proc/[PID]/maps // 메모리 맵 확인법

~~ - ~~ r--p 00000000 b3:1c 374752 /data/data/[패키지명]/files/~.dex (deleted)
···
~~ - ~~ r--p 00000000 b3:1c 374752 /data/app/[패키지명]-1/files/~.apk
메모리 맵에서 살펴보면 실행시켰던 애플리케이션에서 위와 같이 특정 파일(.dex)을 만들고 삭제했거나 특정 영역에 .apk을 만드는 과정이 있었음을 확인할 수 있다.
이렇게 생성됐다가 짧은 DexClassLoader API에 의해 사용된 후 삭제되는 파일은 스크립트를 이용하면 파일을 가져올 수 있다.
# cd /data/local/tmp/
# vi copydex.sh
#! /system/bin/sh
while [ 1 ]; do
if [ -f "/data/data/[패키지명]/files/~.dex" ]; then
cp /data/data/[패키지명]/files/~.dex /sdcard/
fi
if [ -f "/data/app/[패키지명]-1/files/~.apk" ]; then
cp /data/app/[패키지명]-1/files/~.apk /sdcard/
fi
sleep 0.1
done
# chmod 777 copydex.sh
이제 스크립트를 실행시키고 애플리케이션을 실행시키면 /sdcard 영역에 임시로 생성된 파일들이 복사된 것을 확인할 수 있다.
이렇게 하면 보안 솔루션에 의해 보호돼 있던 파일들을 획득할 수 있다. 이제 이렇게 얻은 dex 파일을 분석하기 위해서는 Header 부분을 수정해야 한다. 추출한 파일은 ELF 헤더 정보를 가지고 있다.
HxD을 열어서 64 65 78 0A(dex.)을 검색하고 처음부터 64 65 78 0A 부분 전까지 삭제 후 저장하면 IDA 등에서 에러 없이 분석할 수 있다.
'Android > Reversing' 카테고리의 다른 글
| APK 파일 보호 기법(1) (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




