1. APK 파일 인증서 등록이란?
- "코드사인(Code Sign)" 또는 "앱 서명"이라고도 부르며, APK파일에 인증서를 등록하는 과정을 말한다.
- 인증서를 등록하지 않으면 리패키징한 APK 파일이 정상적으로 설치 또는 실행이 되지 않는다.
※ APK 파일 리패키징 과정에 대한 설명은 아래의 링크 참고.
2. APK 파일 인증서 등록
- APK 파일 인증서 등록은 signapk.jar을 이용한 방법과 jarsigner.exe를 이용한 방법이 있다.
※ signapk.jar는 2015년 이후 더 이상 업데이트가 되고 있지 않아 최신 앱들은 잘 먹히지 않는다.
2.1. signapk.jar 을 이용한 인증서 등록 방법
- 아래의 링크에 접속하여 인증서 등록에 필요한 파일을 다운로드한다.
https://github.com/techexpertize/SignApk
- 아래의 명령어를 입력하여 컴파일한 apk 파일에 인증서를 씌워준다.
java -jar signapk.jar certificate.pem key.pk8 "인증할APK파일경로" "저장할APK파일경로"
2.2. jarsigner.exe을 이용한 재서명 방법
- JAVA(JDK)를 설치하였다면 기본적으로 설치되어 있다.
※ 자바가 설치되어있지 않다면 아래의 링크를 클릭해 설치한다.
https://www.oracle.com/kr/java/technologies/downloads/#jdk20-windows
- 관리자 권한으로 명령프롬프트(cmd) 실행 → [자바설치경로]\bin 경로로 이동.
#예시
cd "C:\Program Files\Java\jdk-20\bin"
- [자바설치경로]\bin 폴더 내에 존재하는 keytool을 이용하여 keystore를 생성한다.
keytool -genkey -v -keystore <임의파일명.keystore> -alias <임의별칭> -keyalg RSA -keysize 2048
*genkey : 키(비밀키, 공개키) 생성
*verbose : 진행 표시
*keyalg : 키를 생성하는 알고리즘 지정(DSA/RSA)
실행 예시 |
C:\Windows\system32>cd C:\Program Files\Java\jdk-20\bin C:\Program Files\Java\jdk-20\bin>keytool.exe -genkey -v -keystore newkey.keystore -alias hyunwoo -keyalg RSA -keysize 2048 Enter keystore password: 패스워드입력 Re-enter new password: 패스워드입력 Enter the distinguished name. Provide a single dot (.) to leave a sub-component empty or press ENTER to use the default value in braces. What is your first and last name? [Unknown]: hagsig What is the name of your organizational unit? [Unknown]: android What is the name of your organization? [Unknown]: hagsig What is the name of your City or Locality? [Unknown]: seoul What is the name of your State or Province? [Unknown]: What is the two-letter country code for this unit? [Unknown]: KO Is CN=hyunwoo, OU=android, O=hyunwoo, L=seoul, ST=Unknown, C=KO correct? [no]: y Generating 2,048 bit RSA key pair and self-signed certificate (SHA384withRSA) with a validity of 90 days for: CN=hyunwoo, OU=android, O=hyunwoo, L=seoul, ST=Unknown, C=KO [Storing newkey.keystore] |
- keystore를 생성한 후 jarsigner을 이용하여 APK 파일에 인증서를 등록한다.
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <생성한keystore파일경로> <리패키징할APK경로> -signedjar <인증서등록한APK저장경로> <지정한별칭>
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <생성한keystore파일경로> -storepass <keystore패스워드> <리패키징할APK경로> -signedjar <인증서등록한APK저장경로> <지정한별칭>
실행 예시 |
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore newkey.keystore target.apk -signedjar sign.apk hagsig Enter Passphrase for keystore: 패스워드입력 >>> Signer X.509, CN=hyunwoo, OU=android, O=hyunwoo, L=seoul, ST=Unknown, C=KO Signature algorithm: SHA384withRSA, 2048-bit key [trusted certificate] jar signed. |
4. 인증서를 등록한 APK 파일 설치
- 위 과정을 거친 인증서를 등록한 APK 파일을 설치 및 실행하면 정상적으로 동작하는 것을 확인할 수 있다.
- 만약 "패키지가 잘못되어 앱이 설치되지 않았습니다.", "어플설치 실패", "Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]" 등의 오류 메시지가 출력되며 설치가 되지 않는다면, 아래와 같이 AndroidManifest.xml 내용을 수정한다.
- AndroidManifest.xml 파일의 설정정보 중 android:extractNativeLibs="false"를 "true"로 변경한 다음, 다시 리패키징 및 인증서 등록 과정을 수행한 뒤 설치해 본다.
'Mobile App 취약점 진단 · 모의해킹 > AOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글
녹스(Nox) 개발자 옵션 및 USB 디버깅 활성화 방법 (0) | 2023.08.08 |
---|---|
녹스(Nox) 버프슈트 프록시 연결 및 인증서 설치 방법 (0) | 2023.08.08 |
안드로이드 APK 파일 디컴파일/리패키징 방법 (0) | 2023.04.11 |
안드로이드 앱(app)으로부터 apk 파일 추출 방법 정리 (0) | 2023.04.11 |
인시큐어뱅크 앱 설치 및 실행 방법 정리(InsecureBankv2) (0) | 2023.04.10 |