정적 분석
정적 분석
- 분석할 타겟을 실제 실행(동작)시키지 않는 상태로 분석
Android Application에서의 정적 분석
- App Binary 분석
- App Directory 탐색
Android Application에서의 정적 분석의 목적
- 앱의 동작 로직을 파악하기 위해
- 동적 분석을 쉽게 하기 위해
- 중요 정보가 단말기에 저장되어 있는지 확인하기 위해
APK 추출
- 백업 기능을 이용한 APK 추출
- Play Store에서 APK 다운로드
- APK 추출 App을 이용하여 APK 추출
- 백업 기능을 이용한 APK 추출
- 설치된 App을 백업하여 APK 추출
- PlayStore 주소로 APK 다운로드
- PlayStore의 App 주소 경로를 이용하여 APK 다운로드
- 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 (함수 호출)
- 프롤로그 : 함수 호출 직전에 r4부터 r11까지 스택에 저장(push)하고 r14(ret address)를 스택에 저장 (push)
- r0 ~ r3 중에 함수에 전달할 인자값이 있으면 r4 ~ r11(임의)로 복사
- 나머지 지역 변수들은 r4 ~ r11 중 남아있는 곳에 할당
- 함수 수행
- r0에 return value(결과)를 저장
- 에필로그 : 이 함수를 호출한 곳으로 이동하면서 스택에서 r4 ~ r11로 값을 복구하고, r15(PC)에 ret address(복귀 주소)
ARM Instruction 요약
- MOV
- 데이터를 이동시키는 명령어 (Register ← Data, Register ↔ Register)
- Shift 연산과 함께 사용 가능 (ASR, LSR, LSL, ROR 등)
- ASR : 오른쪽 Shift, 빈자리 부호, LSR : 오른쪽 Shift, 빈자리는 0, LSL : 왼쪽 Shift 빈자리 0, ROR : 오른쪽 rotation
- ADD, SUB, AND, ORR
- 더하기, 빼기 연산과 AND, OR 연산을 하는 명령어
- UMULL, SMULL
- 곱하기 연산을 하는 명령어
- 32bit 크기의 수 두 개를 곱하면 64bit가 되므로 결과값을 저장하는 두 개의 레지스터가 필요
- UMULL ; 부호가 없는 곱하기, SMULL : 부호가 있는 곱하기
- B, BL, BNE, BEQ
- 분기 명령어
- B : 무조건 그 위치로 분기, BL : 서브루틴 호출, BNE : 0이 아닌 경우 분기, BEQ : 0이면 분기
- CMP 명령어가 같이 자주 사용되는데 CMP 명령어는 비교하는 명령어로 같으면 플래그를 0으로 세팅
- LDR, STR
- 메모리에서 데이터를 로드 및 저장하는 명령어
- LDR : 메모리에서 레지스터로 데이터를 로드, STR : 메모리에 데이터 저장
- LDMFD, STMFD
- LDM/STM 명령어는 LDR/STR의 변종으로 블록 단위로load/store 할 때 사용되는 명령어
- 스택에 여러 개의 레지스터 값을 저장하거나 복원
APP 디렉터리 탐색
- APP 디렉터리에서 중요 정보가 저장될 수 있는 파일들을 확인
APP 디렉터리 탐색 방법
- adb shell을 이용한 앱 디렉터리 탐색
- FTP 프로그램을 이용한 앱 디렉터리 탐
분석하고 싶은 Method 추적
- 정적 분석 Tool, Decompiler를 이용해 분석할 때 원하는 함수를 찾을 수 있는 능력이 필요
Method 추적 방법
- Method 이름 Guessing
- 사용되는 문자열을 이용한 추적
- 사용되는 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 방식
- Spawn 방식
- 앱 프로세스를 메모리에 적재한 뒤 실행 전에 스크립트를 로드하고 실행시키는 방식
- 앱 프로세스 시작에 동작하는 탈옥/루팅 탐지, 무결성 검증 우회에서 유용
- Attach 방식
- 실행된 프로세스에 스크립트를 로드하는 방식
- 앱 프로세스에서 동적으로 로딩되는 라이브러리 함수를 후킹할 때 유용
TCP Proxy 전략 → Redirect와 Relay
- Redirect
- 단말기에서 Proxy Server로 데이터를 Redirect 해야함
- domain name으로 접속 시 hosts 파일 변조를 통해 Redirect
- IP를 이용해 접속 시 Code Patch를 통해 Redirect
- IPtables를 이용한 redirect (Android의 경우)
- Relay
- Proxy 서버에서는 단말기에서 전달된 데이터를 다시 원래 App Server로 전달 해야함
- Relay 기능이 있는 Proxy 서버 구축
- 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
- smali Code Patch
- 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 |