안드로이드 앱 뜯기 처음이라면 이렇게 시작하세요

Last Updated :
안드로이드 앱 뜯기 처음이라면 이렇게 시작하세요

얼마 전 제가 만든 앱의 설치 파일을 열어 봤는데, 프로젝트에서 보던 모습과 꽤 달라서 잠깐 당황했습니다. 이미지와 문구는 남아 있었지만 코드는 낯선 이름으로 바뀌어 있었거든요. 안드로이드 앱 뜯기는 이런 설치 파일의 내부를 들여다보는 작업입니다. 처음에는 파일 구조를 확인하고, 궁금한 부분만 조금씩 좁혀 가는 편이 이해하기 쉽습니다.

시작할 파일과 확인할 목적부터 정하기

가장 편한 연습 대상은 직접 만든 앱의 APK 파일입니다. 예를 들어 앱 용량이 갑자기 커졌다면 어떤 파일이 공간을 차지하는지, 예상하지 못한 권한이 보인다면 최종 설치 파일에도 들어갔는지 확인할 수 있죠. 다른 사람의 앱을 살펴볼 때는 분석 권한과 이용 조건을 먼저 확인하는 게 좋습니다. 화면이나 동작을 공부하는 일과 코드를 복제해 배포하는 일은 다릅니다.

APK는 여러 파일을 담은 압축 파일 형태입니다. 안에는 앱의 기본 정보가 담긴 AndroidManifest.xml, 이미지와 문구 같은 리소스, 실행 코드가 담긴 classes.dex 등이 들어갑니다. 다만 설치 파일이 늘 APK 하나로 끝나는 것은 아닙니다. 배포 방식에 따라 기기별로 나뉜 파일이 함께 쓰일 수 있어서, 손에 든 파일 하나만 보고 앱 전체를 판단하면 놓치는 부분이 생깁니다.

APK Analyzer로 전체 모습부터 보기

Android Studio가 있다면 메뉴에서 Build, Analyze APK 순서로 들어가 파일을 열 수 있습니다. APK Analyzer는 파일별 크기와 폴더 구성을 보여 줍니다. 예를 들어 설치 파일이 40MB인데 이미지가 25MB를 차지한다면, 코드를 보기 전에 큰 이미지부터 확인할 이유가 생기죠. AndroidManifest.xml을 선택하면 읽을 수 있는 형태로 표시된 최종 설정도 볼 수 있습니다.

여기서 앱 이름과 버전, 최소 지원 안드로이드 버전, 요청 권한을 확인해 보세요. 프로젝트 원본의 설정과 설치 파일의 설정이 다를 수도 있습니다. 빌드 과정에서 라이브러리의 설정이 합쳐지기 때문입니다. 권한 목록에 카메라가 보인다고 해서 앱이 지금 카메라를 사용하고 있다는 뜻은 아닙니다. 어떤 기능이 그 권한을 요청했는지, 실제 실행 중에도 필요한지는 따로 살펴야 합니다.

파일 크기를 볼 때는 classes.dex, res, assets, lib 폴더를 차례로 열어 보면 흐름이 잡힙니다. classes.dex는 코드, res는 안드로이드가 관리하는 화면 자원, assets는 앱이 직접 읽는 파일, lib는 기기 구조에 맞춘 네이티브 라이브러리가 들어갈 수 있는 곳입니다. 폴더 이름만으로 용도를 단정하기보다 실제 파일 목록과 크기를 함께 보는 게 정확합니다.

코드 흐름이 궁금하면 JADX 열기

화면 버튼을 눌렀을 때 어떤 처리가 이어지는지 궁금하다면 JADX가 편합니다. APK를 열면 DEX 코드를 자바와 비슷한 형태로 보여 주고, 클래스 이름이나 문구를 검색할 수 있습니다. 처음부터 모든 코드를 읽으려 하면 금방 길을 잃습니다. 화면에 보이는 짧고 특징적인 문구 하나를 찾아 관련 화면으로 이동하거나, 직접 만든 클래스 이름을 검색하는 식으로 시작해 보세요.

다만 보이는 코드를 원래 소스 코드와 똑같다고 생각하면 곤란합니다. 빌드 과정에서 코드가 줄어들거나 이름이 바뀔 수 있고, JADX도 모든 코드를 완벽하게 되살리지는 못합니다. a, b처럼 짧은 이름이 잔뜩 보여도 파일이 망가졌다는 뜻은 아닐 수 있어요. 특히 보안이나 개인정보와 관련된 동작을 판단할 때는 화면에 나온 코드 한 부분만 보고 단정하지 않는 편이 안전합니다.

이미지와 설정 파일을 자세히 보고 싶다면

리소스를 폴더 형태로 펼쳐 보고 싶을 때는 Apktool이 쓰입니다. 명령줄에서 APK를 디코딩하면 이미지, 화면 구성 파일, 앱 설정 등을 확인하기 쉬운 구조로 꺼낼 수 있습니다. JADX가 코드 흐름을 읽는 데 편하다면, Apktool은 리소스와 낮은 수준의 코드 표현을 살피는 데 쓸 만합니다. 두 도구가 보여 주는 결과가 서로 달라 보일 때도 있으니 한쪽 화면만 믿고 판단하지 마세요.

예를 들어 앱에서 특정 버튼의 글씨가 잘못 보인다면 문자열 리소스에서 해당 문구를 찾고, 언어별 파일에 값이 각각 있는지 확인할 수 있습니다. 아이콘이 흐릿하다면 해상도별 이미지가 어떻게 들어갔는지도 볼 수 있죠. 이렇게 하나의 증상을 정해 따라가면 낯선 폴더 이름을 모두 외우지 않아도 됩니다.

처음 연습할 때는 직접 만든 작은 앱 하나로 시작하는 게 가장 재미있었습니다. 버튼과 이미지 하나씩 넣어 빌드한 다음 APK Analyzer에서 크기를 보고, JADX에서 버튼 동작을 찾고, Apktool에서 이미지 파일을 확인하는 식입니다. 같은 앱을 세 가지 시선으로 보면 설치 파일 안의 낯선 이름들도 조금씩 익숙해집니다.

안드로이드 앱 뜯기 처음이라면 이렇게 시작하세요 - 요약
안드로이드 앱 뜯기 처음이라면 이렇게 시작하세요 | 코리아앱 | 앱·IT 서비스 리뷰 : https://koreaapp.net/17564
코리아앱 © koreaapp.net All rights reserved. powered by modoo.io