정보보안

안드로이드 APK 분석 (디컴파일링, 리버싱)

화이트해커 Luna 🌙 2024. 1. 3. 09:01
728x90
반응형

안드로이드 APK 분석 (디컴파일링, 리버싱)

 

 

 

 

1. 실행 파일 구조와 기계어 특징

1.1 실행 파일 구조

애플리케이션 실행 파일은 컴퓨터에서 실행되는 프로그램을 담고 있는 바이너리 파일입니다. 대부분의 운영 체제에서는 실행 파일이 특정한 형식을 따르며, 이 형식은 실행 파일의 구조를 결정합니다.

1.1.1 ELF(Executable and Linkable Format) 포맷
  • 헤더(Header): ELF 파일의 기본 정보를 담고 있습니다. 헤더에는 섹션 및 프로그램 헤더 등이 포함됩니다.
  • 섹션(Section): 코드, 데이터, BSS 등의 섹션으로 나누어진 부분입니다. 각 섹션은 특정한 유형의 데이터를 저장합니다.
  • 프로그램 헤더(Program Header): 실행 시에 로드되는 정보를 포함합니다. 메모리에서 어떻게 섹션을 배치할지 등을 지정합니다.
  • 섹션 헤더 테이블(Section Header Table): 섹션의 메타데이터를 가지고 있습니다. 각 섹션의 크기, 오프셋 등을 기록합니다.

1.2 기계어 특징

컴퓨터의 CPU는 명령어 세트 아키텍처(ISA, Instruction Set Architecture)를 따라 명령을 이해하고 실행합니다. 각 명령어는 특정한 동작을 수행하며, 이러한 명령어들이 모여 프로그램이 구성됩니다.

1.2.1 명령어(Command/Instruction)
  • 오퍼랜드(Operand): 명령어가 수행하는 작업의 대상이나 값으로, 레지스터, 메모리 위치 등이 될 수 있습니다.
  • 레지스터(Register): CPU 내부에 있는 작은 저장 공간으로, 빠른 데이터 접근을 위해 사용됩니다.
1.2.2 명령어의 실행
  • 프로그램 카운터(PC): 다음에 실행할 명령어의 주소를 가리키는 레지스터입니다.
  • 명령어 Fetch: 프로그램 카운터가 가리키는 주소에서 명령어를 메모리에서 가져옵니다.
  • 디코딩(Decoding): 명령어를 해석하여 어떤 동작을 수행할지 결정합니다.
  • 실행(Execution): 명령어가 수행되며 데이터나 레지스터 상태가 변경될 수 있습니다.
  • 프로그램 카운터 업데이트: 다음에 실행할 명령어의 주소를 업데이트합니다.

2. 안드로이드 APK 분석: 디컴파일링과 리버스 엔지니어링

2.1 디컴파일링 (Decompiling)

2.1.1 디컴파일링 개념

디컴파일링은 컴파일된 바이너리 코드를 소스 코드로 변환하는 프로세스입니다. 안드로이드 애플리케이션은 Java로 개발되며, 컴파일된 후 DEX(Dalvik Executable) 형태로 패키징됩니다. 디컴파일링은 이 DEX 파일을 Java 소스 코드로 역변환하여 원시 코드를 추출하는 과정입니다.

2.1.2 대표적인 디컴파일러: JADX
2.1.2.1 과정
  1. APK 추출: APK 파일을 디바이스나 에뮬레이터에서 추출합니다.
  2. DEX 파일 분리: 추출한 APK 파일에서 DEX 파일을 분리합니다.
  3. JADX 실행: jadx 도구를 사용하여 DEX 파일을 디컴파일합니다.
  4. Java 소스 코드 획득: 디컴파일된 코드를 확인하고 필요한 Java 소스 코드를 얻습니다.
2.1.2.2 장단점
  • 장점: 빠르고 간편한 사용, 안드로이드 스튜디오 플러그인 제공.
  • 단점: 모든 코드를 완벽하게 복원하는 것은 어려울 수 있음.

2.2 리버스 엔지니어링 (Reverse Engineering)

2.2.1 리버스 엔지니어링 개념

리버스 엔지니어링은 제품이나 소프트웨어의 내부 동작을 이해하거나 수정하기 위해 역으로 분석하는 과정입니다. 안드로이드 애플리케이션 분석에서는 리버스 엔지니어링을 통해 애플리케이션의 동작 원리, 알고리즘, 보안 구조를 파악하고자 합니다.

2.2.2 대표적인 리버스 엔지니어링 도구
2.2.2.1 IDA (Interactive Disassembler)
2.2.2.1.1 과정
  1. APK 분석: APK 파일을 열어 IDA에서 분석을 시작합니다.
  2. **바이

너리 코드 읽기:** IDA는 APK의 바이너리 코드를 읽고 어셈블리 코드로 변환합니다.

  1. 코드 분석: 어셈블리 코드를 통해 프로그램의 동작을 이해하고 보안 취약점을 찾습니다.
2.2.2.1.2 장단점
  • 장점: 고급 리버스 엔지니어링 및 정적 분석에 용이.
  • 단점: 학습 곡선이 높고 복잡한 기능 사용에 어려움이 있을 수 있음.
2.2.2.2 Frida
2.2.2.2.1 과정
  1. Frida 설치: 디바이스 또는 에뮬레이터에 Frida를 설치합니다.
  2. 애플리케이션 실행: 분석 대상이 되는 애플리케이션을 실행합니다.
  3. Frida 스크립트 작성: JavaScript를 사용하여 동적 분석을 위한 스크립트를 작성합니다.
  4. 스크립트 적용: Frida 스크립트를 적용하여 애플리케이션의 동작을 추적하거나 수정합니다.
2.2.2.2.2 장단점
  • 장점: 동적 분석에 강력하며 런타임 수정이 가능하여 보안 분석에 유용.
  • 단점: 학습 곡선이 높고 안정성 문제가 발생할 수 있음.
728x90
반응형

'정보보안' 카테고리의 다른 글

해커용 검색엔진 : 쇼단 (shodan.io) 명령어 모음  (0) 2024.01.20
[정보보안기사] 정보보호 개요  (2) 2023.05.24
모의해킹 기술면접 준비  (2) 2023.04.06
snort 룰  (10) 2023.03.09