0. smali 파일이란
smali파일은 Android 애플리케이션의 바이트코드를 인간이 읽을 수 있는 형식으로 변환한 것이며, 앱의 동작 방식을 이해하는 데 중요한 정보를 제공합니다.
Smali 파일 분석 절차
(1) 파일 구조 파악
- smali 디렉토리 내에 어떤 클래스 파일들이 있는지 확인하세요. 일반적으로 .smali 파일이 많습니다. 클래스명은 애플리케이션의 기능과 관련이 있을 수 있습니다.
(2) 중요한 메서드 찾기
- 앱의 핵심 기능을 수행하는 클래스(예: 메인 액티비티, 서비스 등)와 의심스러운 메서드를 찾습니다.
- 주요 메서드(예: onCreate(), onStart(), onResume(), onDestroy())를 분석하여 앱이 시작될 때 어떤 동작을 하는지 확인할 수 있습니다.
(3) 권한 및 네트워크 통신
- 네트워크 관련 메서드(예: HTTP 요청을 보내는 메서드)를 찾고, 어떤 URL과 통신하는지 확인합니다. 불필요한 데이터 수집이나 의심스러운 서버와의 통신이 있는지 분석합니다.
(4) 잠재적 악성 코드 찾기
- 코드 내에서 악의적인 동작(예: 사용자 정보를 수집하거나, 백그라운드에서 악성 작업을 수행하는 코드)을 찾을 수 있습니다.
(5)스태틱 분석 도구 사용
- smali 코드를 보다 쉽게 분석하기 위해 jadx 같은 디컴파일러를 사용할 수 있습니다. jadx는 APK를 Java 소스 코드로 변환해 주므로, 더 읽기 쉽게 만듭니다.
1. Smali 분석하기
1.1 Smali 파일구조
cd smali

- io : 기능을 포함하는 클래스들이 위치
- androidx : 안드로이드의 Jetpack 라이브러리와 관련된 클래스들이 포함되어 있을 수 있습니다.
- 안드로이드 SDK와 관련된 기본 클래스들을 포함하고 있을 수 있습니다.
1.2 io 파일 분석(메인파일, MainActivity.smali)
모든 파일을 분석은 제한되기 때문에
MainActivity.smali와 같은 파일이 메인 액티비티를 포함해 분석을 하겠습니다.

1.2.1 민감한 API 호출 확인
- 네트워크 통신(데이터 전송)
HttpURLConnection또는OkHttpClient같은 네트워크 라이브러리 호출을 추척합니다.
- SMS 전송(유저 모르게 메시지 발송)
SmsManager.sendTextMessage() 사용 여부 확인
- 연락처 접근
ContentResolver.query() 같은 메서드로 연락처를 읽는 지 확인
- 파일 시스템 접근
FileOutputStream 또는 openFileOutput() 으로 저장소에 접근하는지 확인
=> 해당 코드 없음
1.2.2 Invoke 명령어 추적
Smali는 저수준 바이트코드이므로 메서드 호출은 invoke-virtual, invoke-static 등으로 표현됩니다. 이러한 호출을 분석하여 민감한 동작을 하는지 확인합니다.
- onCreate()에서 의심스러운 호출: 메인 액티비티나 서비스의 onCreate() 메서드를 확인하여 앱 시작 시 실행되는 동작을 분석합니다.
=> 의심가는 코드 발견 X
2. 결론
사실 Smali을 분석하는 것은 어렵습니다.
어셈블리 언어로 구조를 이해하는 것은 매우 높은 난이도를 가집니다.