# APK 변조
APK 파일을 변조하는 과정은 아래와 같습니다.
1. 사이닝 키 생성 (alias 에 "app" 말고 다른 값을 넣어도 됩니다)
```
keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
```
2. APK Tool 다운로드 (최신 버전 apktool_2.9.1.jar 다운)
https://github.com/iBotPeaches/Apktool?tab=readme-ov-file
3. APK Tool로 apk extract
```
java -jar apktool_2.9.1.jar d 앱이름.apk -o extracted_apk
```
4. 파일 수정
5. APK Tool로 다시 apk 생성
```
java -jar apktool_2.9.1.jar b extracted_apk -o 변경앱이름.apk
```
6. zipalign 을 통해 apk 파일 정렬 (android tool에 위치)
```
./zipalign -p 4 변경앱이름.apk 정렬변경앱.apk
```
7. APK 새로만든 키로 사이닝 (android tool에 위치)
```
./apksigner sign --ks-key-alias app --ks my.keystore 정렬변경앱.apk
```
이와 같은 방법으로 악의적으로 APK 파일을 조작하여 배포를 할 수 있습니다.
## 앱 변조 방지 및 예방 방법
<개발자>
1. 앱 시그니처 및 해시 값 검증
- 앱이 실행될 때 앱의 디지털 서명을 검증하고, 앱 파일의 해시 값을 계산하여 무결성을 확인합니다.
2. 루팅 및 디바이스 상태 확인
- 앱이 루팅된 기기에서 실행되는지 여부를 확인합니다.
3. 보안 라이브러리 사용
- 서드파티 보안 라이브러리를 사용하여 앱의 보안 강화합니다.
<사용자>
1. 공식 스토어 앱 다운
- 공식 스토어에서 받은 앱 파일이 아닌경우 실행하지 않는게 좋습니다.
2. 루팅 디바이스 사용 금지
## 참고
https://gist.github.com/avoidik/a34e7864d6a267102acf6111b66b213chttps://stackoverflow.com/questions/10930331/how-to-sign-an-already-compiled-apk