앵하니의 더 나은 보안
Android 11 버전 이상에서의 apk 사이닝 본문
기존에 apk 사이닝 하던 것처럼 해서 밀어 넣으려니 아래와 같은 에러가 발생
adb: failed to install RT_zip.apk: Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary
그래서 찾아봤더니, android 11 이상 부터는 사이닝할때 v2의 포맷을 따라야한다고 한다.
그래서 사이닝할 때 쓰던 기존 signapk.jar는 쓸모가 없어졌음
apksign.jar 파일을 써서 사이닝 할 수 있는데, 그럴려면 jks 파일 만들어야 하고, 그럴려면 또 그 전에 zipalign으로 4-byte boundary 작업을 해줘야한다.
4-byte boundary 작업은 아래 명령어를 통해 진행할 수 있다.(zipalign은 보통 android sdk가 설치돼있다면, 찾을 수 있다.
C:\Users\[유저명]\AppData\Local\Android\Sdk\build-tools\34.0.0\zipalign.exe)
C:\Users\[유저명]\AppData\Local\Android\Sdk\build-tools\34.0.0\zipalign.exe)
zipalign -f -p 4 test.apk test_zip.apk
그리고 keytool을 사용해 test.keystore 파일 생성(keytool도 jdk가 설치 돼 있는 환경이면 바로 찾을 수 있다.)
이때 test.keystore 생성하면서 작성한 패스워드는 기억해뒀다가 마지막으로 사이닝을 수행할 때 한번 더 입력해야 한다.
"C:\Program Files\Java\jdk-11.0.12\bin\keytool.exe" -genkeypair -v -keystore test.keystore -alias test -keyalg RSA -keysize 4096 -validity 10000
생성한 test.keystore 파일 및 apksigner.exe 파일을 사용해 apk파일 사이닝
java -jar C:\Users\[유저명]\AppData\Local\Android\Sdk\build-tools\32.0.0\lib\apksigner.jar sign --ks test.keystore -v2-signing-enabled true --ks-key-alias test --in test_zip.apk --out test_signed.apk
위 과정을 따라오면 리패키징한 apk파일을 사이닝한 상태의 apk가 test_signed.apk라는 이름을 가지고 떨어진다.
근데 또 테스트하는 우리 입장에서는 매번 저 과정을 진행하는건 번거롭고, 명령어도 길어서 외우기 힘드니, 그냥 android 11버전 이상에서도 사용할 수 있는 사이닝 batch 툴을 만들었다.
위 zip 파일 안에, zipalign이든 apksigner든 keystore든 다 있으니 리패키징 후 사이닝을 하고자 한다면 단순히 apk파일을 같은 경로에 두고 해당 apk 파일을 batch파일에 드래그 앤 드롭하면 사이닝이 수행 된 apk 파일이 떨어진다.
물론 커맨드로도 사이닝을 수행할 수 있다.
signer_aos_v11+.bat test_repackage.apk
'보안 기술 > Android' 카테고리의 다른 글
base.apk에 lib폴더가(so파일이) 없을 때 (0) | 2022.07.25 |
---|---|
Android Studio 단말기 메모리 내 이미지 확인(5.1 ~ 7) (0) | 2022.07.18 |
Frida Encryption/Socket Viewer (0) | 2022.07.18 |
Android ADB 무선 연결 (0) | 2022.07.18 |
Android 취약점 진단 팁 (0) | 2022.07.18 |
Comments