새소식

모의해킹/Android

분할 APK(Split APKs) 병합

  • -
반응형

일반적으로 APK 파일 내부에 lib 폴더를 보면 호환성을 위해 ABI 별로 동적 라이브러리 파일이 각각 생성되어 있는 것을 볼 수 있다.

하지만 이 뚱뚱한 라이브러리들을 본인이 쓰지도 않을 버전까지 모두 포함하여 다운로드 하는 것은 Cost 낭비라고 볼 수 있다. 그리고 실제로 APK 파일들의 용량도 점점 증가하고 있다고 한다.
 
그래서 구글에서는 Android App Bundle 과  Dynamic Delivery 라는 기능을 추가했는데 이를 통해 비용문제를 해결하고 있다. 

기존(그림 왼쪽) APK에서는 모든 언어셋 및 화면 크기, 하드웨어 아키텍처에 해당하는 리소스들을 하나의 APK 에 포함시켰던 반면에, Dynamic Delivery(그림 오른쪽) 은 Play Store에 접속한 단말기에 해당하는 리소스들만 쏙쏙 골라서 다운로드 할 수 있게 되었다.
 
 이 분할된 APK 를 설치하면 단말기 내에 base.apk 외에 split_config.~apk 파일들이 추가로 설치된다. 

 
하지만 모의해킹 하는 입장에서는 무결성 탐지 로직을 체크할 때 base.apk 파일만 수정하면 오류가 날 뿐더러, 
시나리오적으로 봐도 변조된 APK 를 배포할때는 하나의 APK로 묶어서 배포하는 것이 공격 성공 확률이 올라갈 것으로 판단되어 여러모로  봐도 APK 파일들을 하나로 묶어서 작업하는게 낫겠다고 생각했다.

수동으로도 분할 APK를 병합할 수 있지만 AndroidManifest.xml의 분할 관련 옵션과 apktool.yml 내에 압축관련 리소스들을 하나하나 빠짐없이 작성해줘야 하기 때문에 매우 번거롭다.
좀 찾아보니 이 과정을 자동으로 진행할 수 있도록 몇 가지 도구들이 존재했다.
 

 1. Apktool M

모바일 단말기 내에서 분할 APK 를 병합하는 방식이다.
Apktool의 모바일 버전이라고 보면 된다. https://maximoff.su/apktool/?lang=en 에서 다운로드 가능하다.
 
위 링크에서 Apktool M에 해당하는 APK 파일을 다운로드하고 기기에 설치하면 된다.

 
Apktool M 을 실행하고 Applications 탭을 열어보면 분할된 앱은 'Split' 이라고 표시 되어 있는데, 대상 앱을 선택하고 'AntiSplit'을 클릭하면 된다.

병합 작업이 완료되고 나면 Complete 로그에 생성된 APK 파일 경로가 표시되므로, 해당 파일을 PC로 꺼내 작업을 시작하면 된다.

2. SAP(Split APKs Packer)

분할된 APK들을 PC로 꺼낸 뒤 PC에서 병합하는 방식의 도구다.
아래의 파일을 다운로드 하면 된다.

Split_APKs_Packer.zip
15.49MB

 

우선 PC에서 병합 작업을 진행할 것이기 때문에 분할 APK들을 모두 PC 로 꺼낸다.

그 후 SAP 실행 파일에서 분할 APK가 존재하는 디렉토리를 선택하고 'Start'를 클릭하면 병합 작업이 진행된다.

작업이 완료되면 작업 디렉토리 밑  'build' 디렉토리에서 병합된 apk 파일을 확인할 수 있다.
jar signer, apkeasytool 등 각자 사용하는 사이닝 도구로 사이닝해서 쓰면 된다.

 

Reference

https://developers-kr.googleblog.com/2018/05/google-io-2018-whats-new-in-android.html
https://medium.com/daangn/%EB%8D%94-%EC%9E%91%EC%9D%80-apk%EB%A5%BC-%EC%9C%84%ED%95%9C-android-app-bundle%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-345a656eee85

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.