설치하기 전에 APK 안에 무엇이 있는지
APK는 선언이 붙은 zip 파일입니다. 안드로이드가 그 코드를 한 줄도 실행하기 전에, 패키지는 이미 자신이 누구라고 주장하는지, 어떤 안드로이드 버전을 지원하는지, 무엇을 할 권한을 원하는지, 자신의 어떤 부분을 다른 앱이 호출할 수 있는지, 그리고 누가 서명했는지를 밝힙니다. 이 중 어느 것도 설치가 필요 없습니다. 먼저 읽으면 맹목적인 믿음이 10분짜리 점검으로 바뀝니다. 그리고 그 점검만으로 대개 결정할 수 있습니다.
사이드로딩하는 APK를 먼저 살펴봐야 하는 이유
공식 스토어의 앱은 상품 페이지, 리뷰 기록, 게시자 페이지와 함께 옵니다. 공급업체 사이트, 미러, 포럼 게시물, 채팅 메시지, 오래된 백업에서 내려받은 사이드로딩 APK는 그런 맥락이 전혀 없고, 설치 안내가 이를 대신하지도 않습니다. 안드로이드 설치 프로그램은 앱 이름과 아이콘을 보여 주고, 권한은 늦게, 그룹화되고 단순화된 형태로, 당신이 멈춰 생각할 가능성이 가장 낮은 순간에 나타납니다. 앱이 한 번 설치되고 실행되면 이미 부여된 권한을 갖고 네트워크를 썼을 수 있습니다. 질문하기 가장 저렴한 순간은 그 전, 파일이 아직 그냥 파일일 때입니다.
이것은 사이드로딩 자체에 대한 반론이 아닙니다. 공급업체는 정당한 앱을 직접 배포하고, 기업은 내부 도구를 이런 방식으로 배포하며, 오래된 버전이 실제 문제를 해결하기도 합니다. 여기서 말하는 것은 건네받은 것을 읽으라는 것입니다. 이 사이트의 APK 분석기는 브라우저 안에서 패키지를 파싱합니다. 파일은 업로드되지도 실행되지도 않으며, 매니페스트, 권한, 구성 요소, 서명 인증서가 한 화면에 나옵니다. 어떤 도구를 쓰든 순서를 지키세요. 먼저 점검하고, 나중에 설치하세요. 점검을 견디지 못하는 앱은 그 자체가 답입니다.
매니페스트는 앱 자신의 선언
모든 APK에는 바이너리 XML로 저장된 AndroidManifest.xml이 들어 있고, 이것은 앱이 자신에 대해 하는 선언입니다. 패키지 이름(예: com.example.app 같은, 안드로이드가 사용하는 고유한 신원)과 숫자 versionCode, 사람이 읽는 versionName을 적습니다. 앱이 포함하는 구성 요소, 요청하는 권한, 기대하는 하드웨어와 소프트웨어 기능도 선언합니다. 안드로이드가 이 파일의 상당 부분을 강제하기 때문에 스토어 페이지나 다운로드 페이지보다 가볍게 위조하기 어렵습니다. 앱은 선언한 적 없는 권한을 몰래 쓸 수 없고, 이름이 다른 패키지의 업데이트인 척할 수도 없습니다.
매니페스트의 두 숫자는 유지보수 상태에 대해 놀라울 만큼 많은 것을 말해 줍니다. minSdkVersion은 앱이 실행될 가장 오래된 안드로이드입니다. 하한이 매우 낮다는 것은 수년 전 기기와 보안 모델을 지원한다는 뜻이며, 필요할 때도 있고 단순히 물려받아 잊힌 때도 있습니다. targetSdkVersion은 앱이 따르겠다고 주장하는 안드로이드 동작 수준입니다. Google은 스토어 업데이트에 필요한 목표를 매년 올립니다. 더 높은 목표는 앱이 더 새로운 개인정보와 보안 규칙을 적용받게 하기 때문입니다. 목표가 몇 년 전 수준에 머문 사이드로딩 앱이 자동으로 악성인 것은 아니지만, 그 새로운 규칙들을 피했거나 한 번도 충족한 적이 없다고 말하고 있는 셈이며, 이유를 물어야 합니다.
권한을 제대로 읽기
안드로이드는 권한을 등급으로 나누며, 등급이 이름보다 중요합니다. 일반 권한은 설치할 때 자동으로 부여됩니다. 네트워크 접근이 익숙한 예이며, 시스템이 위험이 낮다고 판단하기 때문입니다. 위험 권한은 연락처, 메시지, 정확한 위치, 마이크, 카메라 같은 민감한 데이터와 동작을 다루며, 사용자가 거부할 수 있는 실행 중 안내가 필요합니다. 서명 권한은 같은 인증서로 서명한 앱이나 시스템 자체에만 부여되므로, 제3자 앱이 이를 선언해도 아무것도 얻지 못합니다. 권한 목록을 읽을 때는 개별 줄을 판단하기 전에 머릿속으로 이 등급들로 나눠 보세요.
판결을 내리는 것은 개수가 아니라 맥락입니다. 손전등이 SMS 읽기를 요청할 정직한 이유는 없습니다. 반면 메신저가 같은 권한을 요청하면 적어도 설명할 수 있습니다. 인증 코드를 읽거나 기본 메시지 앱이 되겠다는 제안입니다. 은행 앱은 정당하게 많은 권한을 요청할 수 있고, 단순한 게임은 몇 개만 요청하면서도 맞지 않는 바로 그 하나를 포함할 수 있습니다. 그러니 권한 개수만으로 앱을 점수 매기지 마세요. 위험 권한마다, 그 권한이 없으면 깨지는 이 앱의 기능이 무엇인지 물어보세요. 기능에 연결할 수 없는 요청이 발견 사항이며, 설치 요약이 숨기는 것이 바로 그것입니다.
내보낸 구성 요소와 그것이 만드는 공격 표면
앱은 구성 요소—액티비티(화면), 서비스, 방송 수신자, 콘텐츠 제공자—로 이루어져 있고, 매니페스트는 그 중 어떤 것이 내보내졌는지, 즉 기기의 다른 앱이 도달할 수 있는지를 밝힙니다. 내보낸 구성 요소는 기본적으로 실수가 아닙니다. 공유 대상, 파일 열기, 딥 링크는 구성 요소가 의도적으로 내보내지고 보호되며, 현대 안드로이드에서는 명시적으로 선언되기 때문에 동작합니다. 위험은 공공의 문이 되어서는 안 될 내보낸 구성 요소에 있습니다. 어떤 앱이든 시작할 수 있는 서비스, 어떤 앱이든 작동시킬 수 있는 수신자, 앞에 권한 검사가 없이 앱의 데이터를 달라는 이에게 건네는 제공자입니다.
운영 앱에서는 매니페스트 플래그 두 가지를 직접 볼 가치가 있습니다. 디버깅 가능으로 표시된 애플리케이션은 연결된 기기의 도구로 붙여 검사할 수 있습니다. 이것은 개발 설정이며, 활성화한 채 출고하는 것은 그 릴리스가 어떻게 만들어졌는지에 대한 위험 신호입니다. 백업을 허용하면 앱의 비공개 데이터가 기기 백업에 포함될 수 있습니다. 편리할 수 있지만, 앱 안에 머문다고 생각한 데이터가 훨씬 덜 통제되는 곳으로 옮겨갈 수도 있습니다. 두 플래그 모두 앱이 해롭다는 증거는 아닙니다. 둘 다 확인 비용이 싸고, 완성품에서는 정당화하기 어렵고, 다운로드 페이지에는 절대 나타나지 않는 종류의 세부 사항입니다.
서명 인증서: 안드로이드의 신원 체계
모든 APK는 서명되어 있고, 서명 인증서는 안드로이드가 가진 가장 신분증에 가까운 것입니다. 안드로이드는 새 버전과 기존 버전 두 사본이 같은 패키지 이름과 같은 서명자를 공유할 때만 기존 앱 위에 업데이트를 설치합니다. 이 하나의 규칙이 많은 조용한 일을 합니다. 이미 신뢰하는 앱의 트로이목마화된 업데이트를 낯선 이가 보낼 수 없는 것은 그 사람이 원래 키를 갖고 있지 않기 때문이며, 인증서 지문(보통 SHA-256 다이제스트로 표시)이 연속성을 확인하는 실용적인 방법이라는 뜻이기도 합니다. 공급업체가 예상 지문을 공개했다면 대조하세요. 이 사이트의 인증서 및 키 매처는 인증서와 키 전반에 대해 같은 지문 논리를 다룹니다.
지문이 무엇을 증명하고 무엇을 증명하지 않는지 분명히 하세요. 지문은 이 파일이 특정 개인 키의 소유자에 의해 서명되었음과, 같은 키로 서명된 다른 파일과 일치하는지를 증명합니다. 키 소유자가 정직하다거나, 유능하다거나, 심지어 인증서 주체 필드에 적힌 회사라는 것조차 증명하지 않습니다. 그 필드는 서명자 본인이 채우기 때문입니다. 다시 패키징된 앱은 보통 원본과 다른 인증서로 서명되어 있습니다. 그래서 지문 불일치는 강한 중단 신호이고, 일치는 연속성의 신호에 불과합니다. 안드로이드에서 신원은 키의 연속성이며 그 이상도 이하도 아닙니다. 그에 맞게 다루세요.
설치 전 점검 목록
조각들을 고정된 순서로 모으면 점검은 몇 분이면 끝납니다. 첫째, 신원: 패키지 이름이 예상한 앱과 일치하고, 버전 코드와 이름이 내려받으려던 릴리스에 그럴듯합니까? 둘째, 유지보수: 최소 및 목표 SDK 수준이 얼마나 오래됐고, 아직 관리받는 앱에 어울립니까? 셋째, 권한: 위험 권한을 나열해 각각을 기능에 연결하고, 설명할 수 없는 것이 있으면 멈추세요. 넷째, 표면: 어떤 구성 요소가 내보내졌고, 디버깅과 백업이 켜져 있습니까? 다섯째, 서명: 인증서 지문이 게시자가 밝힌 값과, 또는 최소한 이미 신뢰하는 사본과 일치합니까? 파일을 APK 분석기에 넣고 한 화면에서 이 목록을 차례로 확인하세요.
그런 다음 두 가지가 아니라 세 가지로 결정하세요. 모든 것이 기능에 연결되고 지문이 맞으면 설치하세요. 대부분 맞지만 한 항목에 주의가 필요하면 신중히 설치하세요—테스트 기기에서, 업무 프로필에서, 또는 의문스러운 권한을 부여하지 않고. 패키지 이름이 틀렸거나, 지문이 일치하지 않거나, 위험 권한 뒤에 상상할 수 있는 기능이 없으면 물러나세요. 물러나는 비용은 다운로드 한 번이고, 반대 방향은 계정을 잃을 수 있습니다. 그리고 이 습관을 과장하지 마세요. 이것은 패킷 캡처 분석기의 첫 10분과 같은 선별입니다. 어디든 들고 다니는 기기에 자리를 내주기 전에, 파일이 자신에 대해 선언하는 바를 빠르고 정직하게 읽는 일입니다.
자주 묻는 질문
매니페스트가 깨끗하게 읽히면 APK가 안전하다는 뜻인가요?
아닙니다. 매니페스트는 선언이지 행동 보고서가 아닙니다. 앱은 소박하고 전적으로 그럴듯해 보이는 권한과 구성 요소의 집합을 선언하면서도 코드 안에서는 나쁘게 행동할 수 있습니다. 본거지로 접속하거나, 정당하게 부여받은 권한을 남용하거나, 설치 후 새로운 행동을 내려받는 식입니다. 매니페스트를 읽는 것은 선별입니다. 어긋난 신원, 설명되지 않는 권한, 노출된 구성 요소, 잘못된 서명 인증서를 빠르고 싸게 잡아냅니다. 악성코드 판정이 아니며, 매니페스트 읽기를 초록색 '안전' 도장으로 바꾸는 도구는 증거가 뒷받침하는 것 이상을 주장하는 것입니다.
왜 같은 앱인데 도구마다 권한이 다르게 보이나요?
보통 세 가지 정당한 이유 때문입니다. 첫째, 버전 제한: 권한에는 maxSdkVersion이 붙을 수 있어 특정 안드로이드 수준까지만 적용되며, 도구마다 그런 항목을 보여 줄지가 다릅니다. 둘째, 그룹화: 안드로이드는 물을 때 권한을 그룹으로 제시하지만 매니페스트는 개별 권한을 나열하므로, 그룹 보기가 전체 목록보다 짧아 보입니다. 셋째, 병합: 앱에 묶인 라이브러리는 자체 매니페스트 항목을 가져오고, 빌드가 이를 최종 파일에 합칩니다. 그래서 설치된 매니페스트에는 앱 자체 코드의 어느 부분도 선언한 적 없는 권한이 들어 있을 수 있습니다. 차이는 어떤 이유가 해당되는지 살펴볼 계기이지, 변조의 자동 증거는 아닙니다.
아무것도 설치하지 않고 APK를 확인할 수 있나요?
네—그것이 브라우저 로컬 분석기의 요점입니다. APK는 파일로 파싱됩니다. 바이너리 매니페스트가 디코딩되고, 리소스가 라벨과 문자열을 위해 읽히며, 서명 인증서가 추출되어 지문이 매겨집니다. 앱의 코드는 절대 실행되지 않고, 어떤 기기에도 아무것도 설치되지 않으며, 이 사이트의 분석기를 쓰면 파일이 업로드되지도 않습니다. 파싱은 브라우저 탭 안에서 일어납니다. 확인 서비스가 APK를 서버에 업로드하라고 요구한다면, 그 파일—내부 빌드일 수도 있는—이 애초에 남의 기기에 올라가야 할 것인지 스스로 물어보세요.