손상된 APK 파일을 수정하고 자산을 추출하는 방법
2GB 게임 번들을 다운로드하는 데 몇 시간을 보냈는데 브라우저에 99%에서 "다운로드 실패"라고 표시되거나 Android에서 "구문 분석 오류: 패키지를 구문 분석하는 동안 문제가 발생했습니다."라고 비명을 지르는 경우에만 손상된 APK가 반드시 죽은 파일인 것은 아닙니다. APK는 ZIP 압축 표준을 기반으로 구축되었으므로 최소한 내부의 귀중한 자산을 추출할 수 있을 만큼 복구가 가능한 경우가 많습니다.
아래에서는 APK 내부에서 실제로 손상된 부분, 접근할 가치가 있는 복구 도구, 손상된 번들을 처리할 때 XAPK 변환기가 어떻게 도움이 될 수 있는지 알아봅니다.
APK 손상 분석
APK는 본질적으로 특정 구조를 가진 ZIP 아카이브입니다. 부패는 일반적으로 다음 세 곳 중 하나에서 발생합니다.
- 헤더: 파일 맨 처음 부분의 바이트가 누락되었거나 변경되었습니다.
- 매니페스트(XML): AndroidManifest.xml의 형식이 잘못되었거나 지원되지 않는 인코딩을 사용합니다.
- DEX 코드: 실제 Java/Kotlin 바이트코드가 잘려서 앱을 실행할 수 없게 됩니다.
방법 1: 헤드리스 ZIP 복구(가장 쉬움)
파일을 "읽을 수" 있지만 열리지 않으면 무료와 같은 도구를 사용하거나 Linux/macOS에서 명령줄 zip -FF 명령을 사용하세요. 이러한 도구는 파일의 "서명"을 검색하고 중앙 디렉터리를 처음부터 다시 빌드합니다. DiskInternals ZIP 복구
터미널 사용자를 위한 코드: zip -FF corrupt_app.apk --out fixed_app.apk
방법 2: Zipalign/Alignment 수정
APK가 4바이트 경계에 정렬되지 않았기 때문에 APK가 '손상'되는 경우도 있습니다. Android의 메모리 관리에는 이것이 필요합니다. Android SDK의 집정렬 도구를 사용하여 이 문제를 해결할 수 있습니다.
zipalign -v 4 input.apk output.apk
비트 부패 경고
DEX(classes.dex) 파일 자체에 데이터가 누락된 경우 ZIP 복구를 아무리 해도 앱이 작동하지 않습니다. 이 경우 유일한 목표는 자산/자원를 추출하고 앱의 새 복사본을 찾는 것입니다.
실제로 무엇이 잘못되었는지 확인하는 방법
수리 도구를 선택하기 전에 오류를 식별하십시오. Android(또는 보관 도구)가 표시하는 오류 메시지는 일반적으로 단서입니다.
| 당신이 보는 증상 | 일반적으로 의미하는 것 | 가장 먼저 시도해 볼 사항 |
|---|---|---|
| "패키지 구문 분석" 실패(Android) | ZIP 중앙 디렉터리를 읽을 수 없거나 매니페스트 버전이 일치하지 않습니다. | ZIP 헤더 복구(방법 1) |
| "패키지를 파싱하는 중에 문제가 발생했습니다." + APK가 예상보다 약간 작습니다. | 잘린 다운로드: 마지막 몇 KB가 도착하지 않았습니다. | 동일한 소스에서 다시 다운로드하세요. 다시 다운로드할 수 없는 경우 ZIP 복구 |
| 7-Zip/WinRAR이 파일을 열었지만 개별 파일에 대해 "CRC 오류"를 보고합니다. | ZIP 내부의 개별 파일이 손상되었습니다. | 손상된 멤버의 모든 제외하고를 추출한 다음 누락된 내용을 살펴보세요. |
| 추가 세부정보 없이 '앱이 설치되지 않음' | 실제 손상이 아닌 서명 불일치 또는 정렬 문제가 자주 발생함 | zipalign + 서명 재확인 (방법 2) |
| java.lang.VerifyError 설치 직후 충돌이 발생합니다. | classes.dex 바이트코드가 손상되었거나 버전이 호환되지 않습니다. | 수리로 복구할 수 없습니다. 깨끗한 사본을 다시 얻으십시오. |
구체적인 연습
다운로드가 대략 99% 중단된 320MB APK가 있다고 가정해 보세요. 휴대폰에서 "패키지 구문 분석에 실패했습니다."라는 메시지와 함께 설치를 거부합니다. Windows 또는 macOS 워크스테이션에서 실제로 시도하는 순서대로 공격하는 방법은 다음과 같습니다.
1단계. 파일이 적어도 대부분 거기에 있는지 확인
소스가 광고하는 것과 비교하여 파일 크기를 확인하십시오. 파일이 매우 작은 경우(예: 320MB가 아닌 220MB) 다운로드가 심하게 잘린 것이므로 래퍼를 복구할 필요가 거의 없습니다. classes.dex의 큰 부분이나 자산이 단순히 누락된 것입니다. 이 경우 다운로드를 다시 시작하세요.
2단계. ZIP 구조 테스트
APK가 포함된 폴더에서 터미널을 열고 macOS 또는 Linux에서 실행합니다.
unzip -t broken.apk
이 도구는 아카이브 내의 각 파일과 CRC 오류를 보고합니다. 소수의 항목에서만 오류가 발생하고 해당 항목이 classes*.dex 또는 resources.arsc가 아닌 경우 제대로 작동하는 설치를 생성할 가능성이 높습니다.
3단계. 중앙 디렉터리 재구축
unzip -t가 중앙 디렉터리 자체에 대해 불만을 표시하는 경우("중앙 디렉터리 끝 서명을 찾을 수 없음", "EOCD 1개 누락") "수정" 모드를 사용하세요.
zip -FF broken.apk --out fixed.apk
-FF 플래그는 zip에게 파일에서 로컬 파일 헤더 서명을 검색하고 항목별로 디렉터리를 다시 작성하도록 지시합니다. 출력 fixed.apk는 실제로 설치하려고 하는 것입니다.
4단계. 필요한 경우 재정렬하고 다시 서명하세요.
구조적 변경 후에는 APK의 서명이 더 이상 유효하지 않습니다. 1바이트라도 수정하면 v2/v3 서명 블록이 무효화되기 때문입니다. 자체 서명 키가 있는 경우(자신이 소유한 빌드에 적합) 다음을 정렬하고 다시 서명하세요.
zipalign -v 4 fixed.apk aligned.apk
apksigner sign --ks my.keystore aligned.apk
자체 키가 없으면 파일을 설치하는 유일한 방법은 동일한 서명 인증서를 사용하여 기존의를 설치하는 것입니다. 즉, 서명 체인이 변경되었기 때문에 타사에서 복구한 APK가 기존 Play 스토어 설치 위에 설치되지 않습니다.
수리가 잘못된 목표인 경우
"수정"이 무엇을 할 수 있고 무엇을 할 수 없는지에 대해 솔직하게 말할 가치가 있습니다.
- 도착하지 않은 바이트는 복구할 수 없습니다. 다운로드가 잘린 경우 헤더 복구를 통해 누락된 데이터가 재구성되지 않습니다. 다시 다운로드하세요.
- 비트 부패는 영구적입니다. 파일이 classes.dex 내부에서 몇 비트 뒤집힌 저장소에 있는 경우 설치 시 바이트 코드 확인 단계에서 이를 거부하며 원래 바이트가 무엇인지 알 수 있는 방법이 없습니다.
- 복구된 파일에는 새로운 서명이 있습니다. 완벽하게 수정된 APK라도 더 이상 원래 게시자가 서명하지 않습니다. 이는 버그가 아닌 기능입니다. 공격자가 인기 있는 앱에 악성 코드를 삽입하고 원래 게시자인 것처럼 다시 서명하는 것을 방지합니다.
다운로드가 99%로 중단된 게임을 플레이하는 것이 목표라면 거의 대부분 저항이 가장 적은 경로는 부분 파일을 지우고 디스크 공간을 확보한 다음 안정적인 연결에서 다시 다운로드하는 것입니다. 재다운로드가 불가능할 때 복구 도구가 빛을 발합니다. 오래된 보관된 APK, 불안정한 LAN 전송을 통해 수신된 파일, 원본 소스가 사라진 백업 등입니다.
자주 묻는 질문 (FAQ)
손상된 APK에서 아이콘과 스크린샷을 추출할 수 있나요?
보통 그렇습니다. 아이콘 파일은 res/mipmap-* 아래에 있으며 스크린샷 데이터는 APK에서 처음부터 드물습니다. 중앙 디렉터리가 손상된 경우에도 개별 파일 헤더는 손상되지 않아 7-Zip의 "오류를 무시한 압축 풀기" 옵션을 사용하면 대부분의 이미지가 추출될 수 있습니다.
수리된 APK가 설치된 앱을 업데이트하나요?
수리를 통해 원래의 서명이 보존된 경우에만 가능하며 구조적 수정 후에는 일반적으로 불가능합니다. 수리된 APK를 새로 설치한 것으로 간주합니다. 먼저 이전 버전을 제거하거나(데이터가 손실됨) 아직 앱이 없는 기기에 설치하세요.
이 모든 작업을 수행하는 온라인 도구가 있습니까?
브라우저 기반 도구는 APK의 구조를 읽고 무엇이 손상되었는지 알려줄 수 있지만(APK 정보 도구가 정확히 그렇게 합니다) 실제로 ZIP을 다시 작성하고 다시 서명하려면 데스크톱 도구나 서버가 필요합니다. 재서명 단계는 귀하의 파일 업로드를 의미하기 때문에 의도적으로 서버에서 재서명 단계를 실행하지 않습니다. 이 사이트의 개인정보 보호 약속은 귀하의 브라우저에 아무것도 남지 않는다는 것입니다.
추출에 실패한 XAPK 파일은 어떻게 되나요?
XAPK는 단지 ZIP이므로 동일한 기술이 적용됩니다. zip -FF를 실행하여 내부 APK와 OBB 파일을 복구한 다음 손상된 APK와 별도의 OBB가 있는 것처럼 진행하세요.
실패한 다운로드에서 그래픽, 사운드 또는 OBB 데이터를 얻는 것이 목표라면 7-Zip를 사용하세요. 7-Zip은 Windows 탐색기 ZIP 도구보다 더 공격적이며 종종 "오류 무시"를 통해 부분적으로만 다운로드된 파일을 추출할 수 있습니다.
결론
"파싱 오류"는 OS가 포기하는 것입니다. 위에서 언급한 도구를 사용하면 제어권을 다시 얻을 수 있습니다. 손상된 앱을 항상 "수정"하여 실행할 수는 없지만 거의 항상 내부에서 데이터를 복구하다를 실행할 수 있습니다. 대용량 파일 관리에 대한 자세한 내용은 분할 APK 병합 또는 OBB 게임 데이터 추출에 대한 가이드를 확인하세요.