Android 앱 구조
APK 내부 구조
Android 앱 구조은(는) CoddyKit의 무료 Ethical Hacking Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ethical Hacking Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ethical Hacking Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
APK 파일
Android 앱은 APK(Android Package) 형태로 배포됩니다. APK는 컴파일된 코드, 리소스, 메타데이터가 들어 있는 ZIP 아카이브입니다.
ZIP이므로 간단히 압축을 풀어 내부 내용을 확인할 수 있으며, 이것이 모바일 침투 테스트의 첫 단계입니다.
unzip app.apk -d app_extracted/APK 내부
압축을 푼 APK에는 다음 항목이 들어 있습니다.
AndroidManifest.xml: 앱 설정입니다.classes.dex: 컴파일된 바이트코드입니다.res/및resources.arsc: 리소스입니다.lib/: 네이티브 라이브러리입니다.META-INF/: 서명 정보입니다.
매니페스트
AndroidManifest.xml은 앱의 구성 요소, 권한, 설정을 선언합니다. APK 안에서는 도구가 디코딩할 수 있는 바이너리 XML 형식으로 저장됩니다.
앱의 공격 표면을 이해하는 데 가장 중요한 단일 파일입니다.
DEX와 런타임
Java/Kotlin 소스는 classes.dex에 들어 있는 DEX(Dalvik Executable) 바이트코드로 컴파일됩니다. 최신 Android는 ART(Android Runtime)를 통해 이를 실행합니다.
DEX는 읽을 수 있는 코드에 가깝게 변환할 수 있으며, APK 정적 분석은 바로 이 점을 활용합니다.
네 가지 구성 요소
Android 앱은 다음 네 가지 구성 요소 유형으로 구성됩니다.
- 액티비티: 화면 및 사용자 인터페이스입니다.
- 서비스: 백그라운드 작업입니다.
- 브로드캐스트 수신자: 시스템 이벤트에 응답합니다.
- 콘텐츠 제공자: 앱 간에 데이터를 공유합니다.
내보낸 구성 요소
android:exported="true"로 표시된 구성 요소는 다른 앱에서 호출할 수 있습니다. 이러한 구성 요소가 검사 없이 민감한 작업을 수행한다면 공격 표면이 됩니다.
침투 테스터는 데이터를 유출하거나 권한 있는 작업을 수행하는 내보낸 액티비티, 서비스, 제공자를 집중적으로 찾습니다.
<activity android:name=".AdminActivity" android:exported="true"/>권한
앱은 매니페스트에서 권한을 요청합니다(예: INTERNET, READ_SMS, ACCESS_FINE_LOCATION).
지나치게 광범위한 권한은 위험한 동작이나 과도한 데이터 접근을 암시합니다. 사용자 지정 권한도 잘못 구성되면 권한 없는 접근을 허용할 수 있습니다.
<uses-permission android:name="android.permission.READ_SMS"/>앱 샌드박스
Android는 각 앱을 고유한 Linux UID를 사용하는 자체 샌드박스로 격리합니다. 기본적으로 앱은 서로의 데이터를 읽을 수 없습니다.
앱이 이 경계를 약화하면 취약점이 발생합니다. 예를 들어 모든 사용자가 읽을 수 있는 파일이나 외부에 노출된 제공자가 이에 해당합니다.
앱 데이터 저장소
설치된 앱은 /data/data/<package>/ 아래에 개인 데이터를 저장합니다. 여기에는 데이터베이스, 공유 환경 설정, 파일이 포함됩니다.
침투 테스터는 루팅된 기기나 백업을 통해 이 디렉터리를 검사하여 안전하지 않게 저장된 비밀 정보를 찾습니다. 이에 대해서는 이후 레슨에서 자세히 다룹니다.
/data/data/com.example.app/서명
모든 APK에는 디지털 서명이 있으며, 서명은 META-INF/에 저장됩니다. Android는 설치 및 업데이트 시 서명을 확인합니다.
앱을 수정하고 다시 패키징하면 다시 서명해야 합니다. 이것이 개발자가 변조를 탐지하기 위해 서명에 의존하는 이유입니다.
네이티브 라이브러리
성능에 중요한 로직이나 난독화된 로직은 C/C++로 컴파일된 네이티브 라이브러리(.so 파일)에 들어 있을 수 있으며, lib/ 아래에 저장됩니다.
이 코드는 DEX에 포함되지 않으므로 네이티브 디스어셈블러를 사용한 별도의 분석이 필요합니다. 개발자가 네이티브 코드는 검사하기 어렵다고 잘못 생각하여 이곳에 비밀 정보를 숨기는 경우도 있습니다.
lib/arm64-v8a/libnative.so빠른 확인
어떤 매니페스트 속성이 구성 요소를 다른 앱에 노출하는지 떠올려 보십시오.
복습
이제 Android 앱의 구조를 이해하셨습니다.
- APK는
AndroidManifest.xml,classes.dex, 리소스, 서명 데이터가 들어 있는 ZIP입니다. - 앱은 네 가지 구성 요소를 사용하며, 내보낸 구성 요소는 공격 표면이 됩니다.
- 권한과 앱별 샌드박스가 접근을 제어하며, 개인 데이터는
/data/data/에 저장됩니다. - APK는 변조를 탐지할 수 있도록 서명됩니다.
다음에는 정적 분석에서 APK를 디컴파일합니다.
자주 묻는 질문
“Android 앱 구조” 강의는 무료인가요?
네 — “Android 앱 구조” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ethical Hacking Academy 강의 전체를 잠금 해제할 수 있습니다. Ethical Hacking Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Android 앱 구조”에서 뭘 배우나요?
APK 내부 구조 브라우저에서 직접 실행하는 실습 코드로 Ethical Hacking Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Ethical Hacking Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Ethical Hacking Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“Android 앱 구조” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Ethical Hacking Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Ethical Hacking Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Android 앱 구조
- APK 정적 분석
- Frida를 활용한 동적 분석
- 안전하지 않은 저장소와 통신