본문 바로가기
Android App

Android Application 분석 방법

by ms-eo 2025. 11. 19.

정적 분석

정적 분석

  • 분석할 타겟을 실제 실행(동작)시키지 않는 상태로 분석

Android Application에서의 정적 분석

  • App Binary 분석
  • App Directory 탐색

Android Application에서의 정적 분석의 목적

  • 앱의 동작 로직을 파악하기 위해
  • 동적 분석을 쉽게 하기 위해
  • 중요 정보가 단말기에 저장되어 있는지 확인하기 위해

APK 추출

  1. 백업 기능을 이용한 APK 추출
  2. Play Store에서 APK 다운로드
  3. APK 추출 App을 이용하여 APK 추출

  1. 백업 기능을 이용한 APK 추출
    • 설치된 App을 백업하여 APK 추출
  2. PlayStore 주소로 APK 다운로드
    • PlayStore의 App 주소 경로를 이용하여 APK 다운로드
  3. APK 추출 App을 이용하여 APK 추출
    • APK를 추출하는 App을 이용하여 APK를 추출할 수 있음
    • 사용 어플 : APK Extractor

APK Compile Process

Smali Code

  • An assembler / disassembler for Android’s dex format의 약자로 DEX 바이너리를 사람이 읽을 수 있도록 표현한 언어
  • Dalvik 바이트 코드를 위한 어셈블리 언어
  • smali는 재컴파일이 가능하기 때문에 코드 패치할 때 smali 코드를 변조하고 컴파일해서 코드 패치를 함

Method 종류

  • Static : “this” 인수가 암묵적으로 첫 번째 인수로 전달되지 않으면, Static 메소드
  • Direct : Direct메소드. vtable 개입 없이, 직접 invoke함
  • Virtual : 자식 클래스에서 override 될 수 있는 Virtual 메소드. 클래스와 관련된 vtable을 사용해 invoke 함

ARM

  • Advanced RISC Machine의 약자의 CPU TYPE

ARM 모드 / Thumb 모드

  • ARM과 x86의 가장 큰 차이점은 Thumb 모드라는 것이 있다는 것
  • THUMB mode는 32bit ARM에서 돌아가는 16bit 기계어

ARM 모드 ↔ Thumb 모드

  • BLX / BX 등 X로 끝나는 분기문 명령으로 보드 전환

ARM Function Calling (함수 호출)

  1. 프롤로그 : 함수 호출 직전에 r4부터 r11까지 스택에 저장(push)하고 r14(ret address)를 스택에 저장 (push)
  2. r0 ~ r3 중에 함수에 전달할 인자값이 있으면 r4 ~ r11(임의)로 복사
  3. 나머지 지역 변수들은 r4 ~ r11 중 남아있는 곳에 할당
  4. 함수 수행
  5. r0에 return value(결과)를 저장
  6. 에필로그 : 이 함수를 호출한 곳으로 이동하면서 스택에서 r4 ~ r11로 값을 복구하고, r15(PC)에 ret address(복귀 주소)

ARM Instruction 요약

  1. MOV
    • 데이터를 이동시키는 명령어 (Register ← Data, Register ↔ Register)
    • Shift 연산과 함께 사용 가능 (ASR, LSR, LSL, ROR 등)
    • ASR : 오른쪽 Shift, 빈자리 부호, LSR : 오른쪽 Shift, 빈자리는 0, LSL : 왼쪽 Shift 빈자리 0, ROR : 오른쪽 rotation
  2. ADD, SUB, AND, ORR
    • 더하기, 빼기 연산과 AND, OR 연산을 하는 명령어
  3. UMULL, SMULL
    • 곱하기 연산을 하는 명령어
    • 32bit 크기의 수 두 개를 곱하면 64bit가 되므로 결과값을 저장하는 두 개의 레지스터가 필요
    • UMULL ; 부호가 없는 곱하기, SMULL : 부호가 있는 곱하기
  4. B, BL, BNE, BEQ
    • 분기 명령어
    • B : 무조건 그 위치로 분기, BL : 서브루틴 호출, BNE : 0이 아닌 경우 분기, BEQ : 0이면 분기
    • CMP 명령어가 같이 자주 사용되는데 CMP 명령어는 비교하는 명령어로 같으면 플래그를 0으로 세팅
  5. LDR, STR
    • 메모리에서 데이터를 로드 및 저장하는 명령어
    • LDR : 메모리에서 레지스터로 데이터를 로드, STR : 메모리에 데이터 저장
  6. LDMFD, STMFD
    • LDM/STM 명령어는 LDR/STR의 변종으로 블록 단위로load/store 할 때 사용되는 명령어
    • 스택에 여러 개의 레지스터 값을 저장하거나 복원

APP 디렉터리 탐색

  • APP 디렉터리에서 중요 정보가 저장될 수 있는 파일들을 확인

APP 디렉터리 탐색 방법

  1. adb shell을 이용한 앱 디렉터리 탐색
  2. FTP 프로그램을 이용한 앱 디렉터리 탐

분석하고 싶은 Method 추적

  • 정적 분석 Tool, Decompiler를 이용해 분석할 때 원하는 함수를 찾을 수 있는 능력이 필요

Method 추적 방법

  1. Method 이름 Guessing
  2. 사용되는 문자열을 이용한 추적
  3. 사용되는 System Call을 이용한 추적

동적 분석

동적 분석

  • 분석할 타겟을 실제로 실행(동작)시키면서 분석

Android Application에서의 동적 분석

  • 원격 디버깅
  • 함수 후킹
  • TCP Proxy (패킷 분석)
  • HTTP Porxy (패킷 분석)
  • 코드 패치

Android Application에서의 동적 분석의 목적

  • 앱의 동작 로직을 정확하게 파악하기 위해
  • 호출되는 메서드를 추적하기 위해

Dubugging (디버깅) 이란?

  • 프로그램의 논리적 오류를 찾아내는 것
  • 프로그램을 실행하가며 동작을 분석하고 문제를 해결하는 것

모의해킹에서의 디버깅

  • 프로그램의 동작 과정을 분석하고 오류를 찾아내어 그 오류가 취약점인지 확인

Function Hooking

  • 소프트웨어 공학 용어로, 운영 체제나 응용 소프트웨어 등의 각종 컴퓨터 프로그램에서 소프트웨어 구성 요소 간에 발생하는 함수 호출, 메시지, 이벤트 등을 중간에서 바꾸거나 가로채는 명령, 방법, 기술이나 행위를 말함
  • 함수가 실행 직후와 반환 직전에 임의의 코드를 삽입하여 실행시키는 것
  • 함수의 실행 흐름을 임의의 코드로 변경해 주는 것

Frida

  • Scriptable한 DBI 프레임워크
  • C/S 구조
  • 타겟 Process에 프레임워크 agent를 인젝션하여 파이프를 만들어 놓고, 그 파이프를 통해 통신
  • JavaScript를 통한 바이너리 조작
  • 멀티 플랫폼
  • Inline Hooking 수행

DBI란?

  • Dynamic Binary Instrumentation
  • 바이너리의 동작을 동적으로 조사하는 일

Frida 사용법 - Frida Script Load 방식

  1. Spawn 방식
    • 앱 프로세스를 메모리에 적재한 뒤 실행 전에 스크립트를 로드하고 실행시키는 방식
    • 앱 프로세스 시작에 동작하는 탈옥/루팅 탐지, 무결성 검증 우회에서 유용
  2. Attach 방식
    • 실행된 프로세스에 스크립트를 로드하는 방식
    • 앱 프로세스에서 동적으로 로딩되는 라이브러리 함수를 후킹할 때 유용

TCP Proxy 전략 → Redirect와 Relay

  1. Redirect
    • 단말기에서 Proxy Server로 데이터를 Redirect 해야함
  2. domain name으로 접속 시 hosts 파일 변조를 통해 Redirect
  3. IP를 이용해 접속 시 Code Patch를 통해 Redirect
  4. IPtables를 이용한 redirect (Android의 경우)
  5. Relay
    • Proxy 서버에서는 단말기에서 전달된 데이터를 다시 원래 App Server로 전달 해야함
  6. Relay 기능이 있는 Proxy 서버 구축
  7. Relay 기능이 있는 Proxy 서버 Tool 사용 : mitm_relay

TCP Proxy Tool - mitm_relay

Download : https://github.com/jrmdev/mitm_relay

SSL Pinning

  • SSL/TLS 통신할 때 사용하는 인증서를 앱 서버의 인증서로 고정하는 것

SSL Pinning 목적

  • MITM 공격을 막기 위함
  • SSL/TLS를 사용하더라도 단말기에 공격자의 인증서를 설치하고 인증서 신뢰 설정을 하게 되면 중간자 공격이 가능하여 이를 막기 위함

※ MITM 공격 : Man In The Middle 공격으로 중간자 공격이라고도 하며, 통신하는 두 대상 중간에 끼어들어 통신 내용을 확인하는 공격

Brida

  • Frida를 사용하는 Burp Suite Plugin
  • Frida JS load와 관련된 기능들을 자동화
  • 기본적인 리턴값 변조를 쉽게 해주는 도구

※ Brida Download : https://github.com/federicodotta/Brida/releases

Code Patch

  • App 실행 Binary 파일의 코드를 직접 수정하는 것

Code Patch Type

  1. smali Code Patch
  2. so library Code Patch

Code Patch의 장점

  • frida 탐지 등의 방법에 탐지되지 않음
  • 한 번 코드를 패치하여 앱이 재실행되어도 변조한 로직으로 앱을 실행시킬 수 있음

Code Patch의 단점

  • App의 무결성이 훼손되어 무결성 검증 로직이 존재한다면 이에 탐지됨
  • 다양한 데이터로 변조하며 테스트해야하는 경우 시간이 오래 걸림

'Android App' 카테고리의 다른 글

Android Mobile Solution 분석  (0) 2025.11.19
Android 진단 환경 구축  (0) 2025.11.19
Android 개론  (11) 2025.11.19