일반적으로 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 내에 압축관련 리소스들을 하나하나 빠짐없이 작성해줘야 하기 때문에 매우 번거롭다. 좀 찾아보니 이 과정을 자동으로 진행할 수 있도록 몇 가지 도구들이 존재했다.