-
[μλλ‘μ΄λ 리λ²μ±] μλλ‘μ΄λ μμ€ν μ΄ν΄ :: μλ² λλ, μν€ν μ², Dalvik, ART, μ€λ§νΈν° 보μ λν₯SECURITY/Android Reversing 2022. 1. 12. 16:17
μλ² λλ μμ€ν μν€ν μ²
μλ² λλ μμ€ν μ΄λ, νλμ¨μ΄μ μννΈμ¨μ΄κ° μ‘°ν©λ μμ€ν μ΄κ³ , λνμ μΌλ‘ μ€λ§νΈν°, TV λ±μ΄ μμ΅λλ€.
μ΅μ νλ₯Ό μν΄ λ³΄ν΅ μ λμ€/리λ μ€ κΈ°λ°μ μ΄μ체μ λ₯Ό μ¬μ©ν©λλ€. (μ€νμμ€, κ²½λν, λ± μ©μ΄)
μλ² λλ μμ€ν μ μν€ν μ²λ ν¬κ² Software, Hardware λ‘ λλ μ μμ΅λλ€.
SW μλ λ² μ΄μ€λΆν° λλ°μ΄μ€ λλΌμ΄λ², μ΄μ체μ , λ―Έλ€μ¨μ΄, μ ν리μΌμ΄μ μΌλ‘ ꡬμ±λ©λλ€.
HW μλ CPU, λ©λͺ¨λ¦¬, μ μΆλ ₯ μ₯μΉ λ±μ΄ μμ΅λλ€.
μ¬κΈ°μ λλ°μ΄μ€ λλΌμ΄λ²κ° SW μ HW κ°μ μμ², μ²λ¦¬λ₯Ό λ΄λΉν©λλ€.
μλλ‘μ΄λ μν€ν μ²
μλ² λλ μμ€ν μν€ν μ²μ κ±°μ λμΌν©λλ€.
λ€λ§ μΌλ°μ μΈ μλ² λλ μμ€ν 보λ€λ 볡μ‘ν κΈ°λ₯μ μ 곡νλ€κ³ λ³Ό μ μμ΅λλ€.
Linux Kernel μ μ¬μ©νκ³ , λ€μν SSL(μΈμ¦μ), SQLite (λ΄μ₯ DB) μ κ°μ library λ₯Ό μ¬μ©νλ κ²μ λ³Ό μ μμ΅λλ€.
κ·Έ μλ‘λ μ΄μ Application μ λ€μν κΈ°λ₯μ μ 곡νκ³ μ μ΄νλ Framework κ° λ€μ΄κ° μλλ°μ,
Activity, Notification, Location λ± μλλ‘μ΄λ κ°λ°ν λ λ³Ό μ μλ κ΅¬μ± μμλ€μ΄ μμ΅λλ€.
μλλ‘μ΄λ κ°λ°μλ Application Framework λΆν°λ₯Ό κ°μ₯ λ§μ΄ μ ν κ²μ΄κ³ , κ·Έ μμλ€μ μ μ ν μ¬μ©νμ¬ Application μ λ§λ€κ² λ©λλ€.
λνμ μΌλ‘ Android κ°λ°ν λ Activity μ Fragment λ₯Ό κ°μ₯ λ¨Όμ μ νκ² λ ν λ°,
κ·Έ μΉκ΅¬λ€μ΄ Android μμ€ν μμ μ 곡ν΄μ£Όλ κ²μ΄κ³ λν κ°λ³ μλͺ μ£ΌκΈ°λ₯Ό κ°μ§λλ€.
μ¦, Android λΌλ μ΄μ체μ κ° κ° μμλ₯Ό μ μ΄νλ κ²μ λλ€.
μ°λ¦¬κ° μ»΄ν¨ν° νλ‘κ·Έλ¨μ λ§λ€ λμλ μ΄μ체μ λ νκ² λλ°μ΄μ€μ μλ§μ λΌμ΄λΈλ¬λ¦¬λ κΈ°λ₯μ νμ©νλ κ²μ²λΌ,
μλλ‘μ΄λ μ± κ°λ°λ Android λΌλ μ΄μ체μ μ νΉμ±μ λ§κ² μΌλ§λ ν¨μ¨μ μΌλ‘ μμ±νλμ§κ° μ€μν΄μ§κ² λ©λλ€.
(ex. νΉμ νλ©΄μμ Activity λ₯Ό μ¬μ©ν μ§, Fragment λ₯Ό μ¬μ©ν μ§ λ±)
λ°λΌμ μλλ‘μ΄λ 리λ²μ±μ νκΈ° μν΄μ λ¨Όμ μμμΌ νλ κ²μ, Android λ linux kernel μ κΈ°λ°μΌλ‘ νλ€λ κ²μ λλ€.
μ¦, μλλ‘μ΄λ 리λ²μ±λ κ²°κ΅μ 리λ μ€λ₯Ό κΈ°λ°μΌλ‘ λΆμν΄μΌ νλ€λ κ²μ μ μ μμ΅λλ€.
(λ¨, μλλ‘μ΄λμμ μ¬μ©νλ Linux Kernel μ μΌλ° 리λ μ€ μ»€λκ³Όλ μ’ λ€λ₯΄κ², κ²½λν λ±μ ν΅μ¬μΌλ‘ μ¬κ΅¬μ±λ κ²μ λλ€.)
Dalvik VM, ART, JVM
Dalvik VM μ λ μ§μ€ν° λ¨Έμ ννμ κ°μ λ¨Έμ μΌλ‘, μλλ‘μ΄λ μ©μΌλ‘ λ§λ€μ΄μ‘λ€κ³ ν μ μμ΅λλ€.
κ°μ λ¨Έμ μΌλ‘λ Dalvik VM λΏλ§ μλλΌ ART, JVM λ±μ΄ μλλ°, Dalvik μ λ μ§μ€ν° ννλ‘ μμ±λμ΄ λͺ λ Ήμ΄ μλ₯Ό μ€μ΄λ κ²μΌλ‘ ν¨μ¨μ λμΈ ννμ λλ€.
java νμΌμ λ°λ‘ μ€νν μλ μκ³ , dex ν¬λ§·μΌλ‘ λ°κΏμΌμ§ Dalvik VM μμ μ¬μ©ν μ μμ΅λλ€.
μΌλ°μ μΌλ‘ λ§μ΄ μ¬μ©νλ μλ°μ JVM μ μ€ν κΈ°λ°μ κ°μ λ¨Έμ μΌλ‘, ν¨μ¨μ±κ³Ό λΌμ΄μ μ€ λ¬Έμ κ° μμ΄μ μ€ν μμ€μΈ Android λ Dalvik VM μ κ°λ°νμ¬ μ¬μ©νμμ΅λλ€.
κ·Έλ°λ° μ΅κ·Όμλ Dalvik VM μ νκ³μ μ 극볡νκΈ° μν΄ ART (Android Runtime) λ₯Ό μλ‘κ² κ°λ°νμμ΅λλ€.
Android 5.0 (Lolipop) μ΄νλΆν°λ ART κ° κΈ°λ³Έ λ°νμμ΄ λμκ³ , μ΄ν λ§μ κ°μ μ΄ μ΄λ£¨μ΄μ§κ³ μμ΅λλ€.
Dalvik VM κ³Ό ART μ κ°μ₯ ν° μ°¨μ΄μ μ Dalvik VM μ JIT Compiler λ₯Ό μ¬μ©νκ³ , ART λ AOT Compiler λ₯Ό μ¬μ©νλ€λ κ²μ λλ€.
- JIT Compiler: νλ‘κ·Έλ¨ μ€ν μ μ»΄νμΌ -> λ°°ν°λ¦¬ μλͺ¨, νλ©΄ μ ν μ λλ¦Ό / μΈν°νλ¦¬ν° λ°©μμ λΉν΄ μ±λ₯ κ°μ
- AOT Compiler: νλ‘κ·Έλ¨ μ€μΉ μ μ»΄νμΌ -> 곡κ°μ λ§μ΄ μ°¨μ§ / μ€ν μκ°μ μ€μ΄λ¦
μ΄μ λ°λΌ λ VM μμμ μ₯λ¨μ λ λ¬λΌμ§λλ°, ART λμ ν κ°μ μμ μ νλ©΄μ AOT μ JIT λ°©μμ μ‘°ν©ν΄μ μ¬μ©νκΈ°λ νμ΅λλ€.
μ΄λ κ² μ΄λ€ VM μ μ¬μ©νλμ§μ λ°λΌ μ½λμ 'μ²λ¦¬' λ°©μκ³Ό μμκ° λ¬λΌμ§κΈ° λλ¬Έμ, μ΄ λ΄μ©μ μκ³ μμ΄μΌ μλλ‘μ΄λ 리λ²μ±μ ν λ νκ² μμ€λ₯Ό νμ νκ³ μ μ ν ν΄μ μ νν μ μμ΅λλ€.
(μ΄λ€ ν΄μ Dalvik λ§ μ§μνκΈ°λ, 32 bit λ§ μ§μνκΈ°λ νκΈ° λλ¬Έμ λλ€)
μλλ‘μ΄λ μ± μ΄ν΄
μλλ‘μ΄λ 4λ μ»΄ν¬λνΈ: Activity, Service, Content Provider, Broadcast Receiver
- Activity: Application μ κΈ°λ³Έ μ€ν λ¨μ, νλμ νλ©΄μ ꡬμ±ν©λλ€. (activity class + layout xml)
- Service: λ°±κ·ΈλΌμ΄λ μμ μ μν μ»΄ν¬λνΈ
- Content Provider: μ± κ°μ λ°μ΄ν° 곡μ λ₯Ό λͺ©μ μΌλ‘ μ¬μ©νλ μ»΄ν¬λνΈ
- Broadcast Receiver: μλλ‘μ΄λ μμ€ν λλ λ€λ₯Έ μ±κ³Όμ λ©μμ§ μ‘μμ
λν, λ€μμ μμλ€λ μ€μνλ μμλλ©΄ μ’μ΅λλ€.
- Fragment: Activity μ²λΌ ν νλ©΄μ ꡬμ±νλ, λ κ°λ²Όμ (fragment class + layout xml)
- Intent: μ± κ΅¬μ± μμ μ¬μ΄μ λ©μμ§ κ°μ²΄. μ£Όλ‘ Activity μμ Activity μ¬μ΄μ λ©μμ§ μ λ¬μ ν©λλ€.
μ¬μ€ κ°μ₯ μ’μ κ²μ μμ λ₯Ό 보λ κ²μ λλ€.
λ§λ‘λ§ μ μλ₯Ό 보면 λͺ νν μ΄ν΄κ° μλκ³ , μ°λ¦¬λ '리λ²μ±', μ¦ μ½λλ₯Ό λλ €μ λ―μ΄λ³Ό κ²μ΄λ―λ‘ Android κ°λ° μ½λμ λν΄ μ΄λμ λ μ΄ν΄νκ³ μμ΄μΌ ν©λλ€.
κ·Έλ μ§λ§ μλλ‘μ΄λ 리λ²μ±μ νκΈ° μν΄μ μλλ‘μ΄λ κ°λ°μ νλ κ²μ 무쑰건 νμν κ²μ μλλλ€.
μ½λλ₯Ό λ³΄κ³ μ΄ν΄ν μ μλ μμ€μ΄λ©΄ μΆ©λΆνκ³ , μλλ‘μ΄λ κ°λ°μ ν μ μλ€λ©΄ νλ¬μ€ μνλ‘ λμμ΄ λ λκΈ΄ ν©λλ€.
μ μ κ²½μ° μλλ‘μ΄λ κ°λ° κ²½νμ΄ μκΈ°μ μ± μ΄ν΄λ μ΄μ λλ‘ μ 리νκ³ λμ΄κ°κ² μ΅λλ€.
μλλ‘μ΄λ κ°λ° μ§μμ΄ λ±ν μμ§λ§ μλλ‘μ΄λ 리λ²μ±μ νκ³ μΆμΌμλ©΄ μμ μ»΄ν¬λνΈ 6κ°μ§λ₯Ό μμ μ ν¨κ» μ΅νμκ³ , μΆκ°λ‘ μλͺ μ£ΌκΈ°, ViewModel, LiveData λ±μ λν κ°λ μ μμλμλ©΄ μ’μ΅λλ€.
λ§μ§λ§μΌλ‘ μλλ‘μ΄λ μ± λΉλ νλ‘μΈμ€μ λν΄ κ°λ¨νλ§ μ§κ³ λμ΄κ°μλ©΄,
1) μΌλ¨ java μ½λμ layout μ ν΄λΉνλ xml μ½λλ₯Ό μμ±ν©λλ€.
2) μ μ½λλ₯Ό μ»΄νμΌνμ¬ DEX νμΌμ λ§λλλ€.
3) DEX νμΌλ‘ APK λ₯Ό μμ±ν©λλ€.
μ΄λ κ² μμ±λ APK λ₯Ό Android μ μ€μΉνμ¬ μ°λ¦¬κ° νΈλν°μΌλ‘ μ¬μ©ν μ μλ κ²μ λλ€.
μ΄λ κ² μλλ‘μ΄λ μμ€ν μ λν μ΄ν΄λ₯Ό μν΄ μν€ν μ²λΆν° μλλ‘μ΄λ μ»΄ν¬λνΈκΉμ§ λ€λ€λ³΄μμ΅λλ€.
APK μ μλͺ λ±μ λν λ΄μ©μ λ€μμ λ€λ€λ³΄λλ‘ νκ² μ΅λλ€.
'SECURITY > Android Reversing' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ