ν‹°μŠ€ν† λ¦¬ λ·°

μ•ˆλ“œλ‘œμ΄λ“œ 앱을 μ§„λ‹¨ν•˜λ©΄μ„œ 무결성 검증을 ν™•μΈν•˜κ²Œ λ˜λŠ”λ° μ΄λ•Œ λ³€μ‘°λœ 앱에 μ‹ λ’°ν•  수 μžˆλŠ” μ„œλͺ…이 듀어가지 μ•ŠμœΌλ©΄ μ„€μΉ˜ 쀑간에 "install fail" 같은 μ‹€νŒ¨ 문ꡬ가 λ‚˜νƒ€λ‚˜ 앱이 무결성 검증을 μˆ˜ν–‰ν•˜κ³  μžˆλŠ”μ§€ 확인이 λΆˆκ°€λŠ₯ν•˜λŠ”λ° μ΄λ•Œ λ³€μ‘°λœ 앱에 재 μ„œλͺ… μž‘μ—…μ„ κ±°μ³μ£Όμ‹œλ©΄ μ—λŸ¬ 없이 μ„€μΉ˜κ°€ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

 

μ„œλͺ…ν•  수 μžˆλŠ” 방법은 JAVA의 "keytool"κ³Ό "jarsigner"을 μ΄μš©ν•΄ μ„œλͺ… 파일(keystore)을 생성해주고 λ¦¬νŒ¨ν‚€μ§•ν•œ 앱에 μž¬μ„œλͺ… μž‘μ—…μ„ ν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.

 

<JDK>

www.oracle.com/java/technologies/javase-downloads.html

<JRE>

www.java.com/ko/download/

 

제 PCν™˜κ²½μ—μ„œλŠ” "JDK" 와 "JRE"κ°€ μ„€μΉ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.(λ‘˜ λ‹€ keytool이 μ„€μΉ˜λ˜μ–΄ 있긴 ν•œλ° 2κ°œλ‹€ μ„€μΉ˜ν•΄μ•Ό λ˜λŠ” μ΄μœ λŠ” 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.) μƒλ‹¨μ˜ 링크λ₯Ό μ ‘μ†ν•˜μ—¬ μ΅œμ‹  λ²„μ „μœΌλ‘œ λ‹€μš΄λ‘œλ“œν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.

*JDK(Java Development Kit)

*JRE(Jaba Runtime Enviroment)

 

기본적으둜 Program Files > Java κ²½λ‘œμ— λ“€μ–΄κ°€ μžˆμŠ΅λ‹ˆλ‹€. JDK의 /bin 디렉터리 λ‚΄λΆ€μ—λŠ” μš°λ¦¬κ°€ μƒˆλ‘œμš΄ ν‚€ μ €μž₯μ†Œλ₯Ό λ§Œλ“€κΈ° μœ„ν•œ "keytool"이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

 

제 PC의 ν™˜κ²½λ³€μˆ˜ μ—λŠ” μœ„ 와 같이 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. % JAVA_HOME%\bin으둜 μ„€μ •ν•˜μ§€ μ•Šκ³  μ•„λž˜μ²˜λŸΌ λ™μΌν•˜κ²Œ /binκΉŒμ§€ 경둜λ₯Ό μž‘μ•„μ„œ 좔가해주셔도 λ©λ‹ˆλ‹€.(μ„€μ • λλ‚œ ν›„ CMD μž¬μ‹œμž‘)

 

cmdλ₯Ό μž¬μ‹œμž‘ ν›„ "keytool"κ³Ό "jarsigner" λͺ…λ Ήμ–΄κ°€ μ‹€ν–‰λ˜λŠ”μ§€ ν™•μΈν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€. λ§Œμ•½ μ•Œ 수 μ—†λŠ” λͺ…령이라고 λ‚˜νƒ€λ‚œλ‹€λ©΄ ν™˜κ²½λ³€μˆ˜λ₯Ό λ‹€μ‹œ ν™•μΈν•΄λ³΄μ„Έμš”

 

이제 μž„μ˜μ˜ κ³΅κ°œν‚€λ₯Ό 생성해 주도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. 생성 μ‹œ (이름, νŒ¨μŠ€μ›Œλ“œ, λ„μ‹œλͺ… 등을 μž…λ ₯) μ§ˆμ˜μ‘λ‹΅μ„ ν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€. μƒμ„±λœ ν‚€λŠ” 지정해둔 keystore(newkey.store)에 λ³΄κ΄€ν•˜κ²Œ λ©λ‹ˆλ‹€.

keytool -genkey -v -keystore <μž„μ˜νŒŒμΌλͺ….keystore> -alias <μž„μ˜λ³„μΉ­> -keyalg RSA -keysize 2048
-genkey: ν‚€(λΉ„λ°€ν‚€, κ³΅κ°œν‚€) 생성
-verbose: 진행 ν‘œμ‹œ
-keyalg: ν‚€λ₯Ό μƒμ„±ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ 지정(DSA/RSA)

 

μƒμ„±λœ keystore 파일 ν™•μΈν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€. 이제 μ„œλͺ…이 λ“€μ–΄κ°„ keystoreνŒŒμΌμ„ μš°λ¦¬κ°€ μˆ˜μ •ν•˜κ³  λ¦¬νŒ¨ν‚€μ§•ν•œ apkνŒŒμΌμ— λ‹€μ‹œ μž¬μ„œλͺ…을 ν•΄μ€˜μ•Ό λ©λ‹ˆλ‹€.

 

repack.apk λŠ” 기쑴의 앱을 λ””μ»΄νŒŒμΌ ν›„ λ³€μ‘°ν•˜μ—¬ λ‹€μ‹œ λ¦¬νŒ¨ν‚€μ§•ν•œ 파일이라고 κ°€μ •ν•˜κ³ . ν•΄λ‹Ή λͺ…λ Ήμ–΄λ₯Ό 톡해 쑰금 전에 생성해둔 keystoreνŒŒμΌμ„ -> repack.apk에 μž…ν˜€μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <μƒμ„±ν•œ keystore파일> <λ¦¬νŒ¨ν‚€μ§•ν•œ μ•±> <μ§€μ •ν•œ 별칭>

λ§Œμ•½ keystoreνŒŒμΌμ΄λ‚˜ λ¦¬νŒ¨ν‚€μ§• ν•œ μ•±μ˜ μœ„μΉ˜κ°€ ν˜„μž¬ κ²½λ‘œμ— μ—†λ‹€λ©΄ κ²½λ‘œκΉŒμ§€ λͺ¨λ‘ μž‘μ„±ν•΄ μ£Όμ…”μ•Ό λ©λ‹ˆλ‹€.

 

κΈ°λ‹€λ € μ£Όμ‹œλ©΄ "jar signed" λͺ…λ Ήκ³Ό ν•¨κ»˜ μ„±κ³΅μ μœΌλ‘œ μ„œλͺ…이 된 것을 ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ“œλž˜κ·Έ μ•€ λ“œλ‘­ λ˜λŠ” adbλ₯Ό 톡해 λ‹€μ‹œ μž¬μ„€μΉ˜ν•΄μ£Όμ‹œκ³  μ‹€ν–‰λ˜λŠ”μ§€ 확인해 λ³΄μ‹œλ©΄ λ©λ‹ˆλ‹€.

κ³΅μœ ν•˜κΈ° 링크
Comment