[μλλ‘μ΄λ] Dex νμΌ κ΅¬μ‘°λ μ΄λ»κ² λμ΄ μλκ° / Smali Code
μΆμ²: Dex νμΌ κ΅¬μ‘°λ μ΄λ»κ² λμ΄ μλκ°
Dex νμΌ κ΅¬μ‘°λ μ΄λ»κ² λμ΄ μλκ°
μΌλ¨ Dex νμΌμ΄λ 무μμΌκΉμ λν΄ μμ λ΄ μλ€. 1.Dex λ? Dexμλ Android λ°νμμμ κΆκ·Ήμ μΌλ‘ μ€νλλ μ½λκ° ν¬ν¨ λμ΄ μμ΅λλ€. μ¦ κΈ°κ³μ΄λ‘ λμ΄μμ΅λλ€. μ΄κ²μ λμ»΄νμΌ νλ©΄ smail μ½λ
r-ever-scp.tistory.com
μΌλ¨ Dex νμΌμ΄λ 무μμΌκΉμ λν΄ μμ λ΄ μλ€.
1.Dex λ?
Dexμλ Android λ°νμμμ κΆκ·Ήμ μΌλ‘ μ€νλλ μ½λκ° ν¬ν¨ λμ΄ μμ΅λλ€.
μ¦ κΈ°κ³μ΄λ‘ λμ΄μμ΅λλ€. μ΄κ²μ λμ»΄νμΌ νλ©΄ smail μ½λκ° λλ κ²μ λλ€.
νΌμ½λ μλ£λ€μ λ§μ΄ μ 곡ν©λλ€
2. Dex νμΌμ ꡬ쑰
νμν¬μΈνΈκ° μ’λ€μ
μ΄λ νμΌμ΄λ λΉμ·νκ² μ§λ§ dex νμΌμ ν€λμ μΉμ μΌλ‘ λλ©λλ€. (μ΄λ¬κ³ 보면 ole νμΌ κ΅¬μ‘°μλ λΉμ·ν΄λ³΄μ΄λ€)
2-1) File Magic Number
κ³ λ§μμ νΌμ½
μ νμΌμ΄ λ¬΄μ¨ νμΌμΈμ§ μλ €μ£Όλ λΆλΆμ΄λ€. μ²μμ dexλΌλ ν μ€νΈμ λ²μ λ²νΈκ° μμ΅λλ€.
2-2) Checksum - uint
체ν¬μ¬μ μ΄ νμΌμ΄ λ³μ‘° λμλμ§ νμΈνλ λΆλΆμ λλ€. νμΌμ λ°μ΄νΈ κ°μ΄ μμ λ κ²½μ° μ²΄ν¬μ¬ κ°μ΄ λ§μ§ μμ Android Frameworkμμ Apk μ€μΉλ₯Ό κ±°λΆ νκ² λ©λλ€.
2-3) signature - ubyte[20]
μμ 1,2 λ²κ³Ό 3λ²μ μ μΈν λΆλΆμ SHA-1 ν΄μ κ°μ΄λ©° νμΌμ κ³ μ νκ² μλ³νλ λ° μ¬μ©λλ©° Multidexμ κ°μ κΈ°λ₯μ μ¬μ© λ©λλ€.
μ΄κ±΄ λ
Ό μΈμ μ΄μΌκΈ° μ§λ§ ν΄μκ°μ μ¬μ© νλ μ΄μ λ νμΌμ λ¬΄κ²°μ± λλ¬Έμ΄λ€.
2-4) file_size - uint
μ΄ κ²μ νμΌμ ν¬κΈ°λ₯Ό μλ €μ£Όλ λΆλΆμ λλ€. μ λ΄μ©μ 리ν μλμ λ°©μμΌλ‘ κ΅¬μ± λμ΄μμΌλ©° λ³νν΄ λ³΄λ©΄ 0x0021181c μ λλ€. μ΄κ²μ 10μ§μλ‘ λ³νν΄λ³΄λ©΄ 2,168,860 byteλΌκ³ ν©λλ€ λ§λμ§ νμΈν΄λ³΄λ©΄
μ§μ§ λ§λ€
λ§μ΅λλ€!!
2-5) header_size - uint
ν€λμ ν¬κΈ°λ₯Ό 보μ¬μ€λλ€. κ°μ 0x70μΌλ‘ μ ν΄μ Έ μμ΅λλ€.
2-6) endian_tag - uint
μκΉ ν¬κΈ°λ₯Ό ꡬν λ 리ν μλμ λ°©μμΌλ‘ λμ΄μλ€κ³ νλλ° μ νν μλ €λ©΄ μ΄ λΆλΆμ 보면 λ©λλ€.
12345678λ‘ λμ΄ μλ€λ©΄ λΉ μλμ
78563412λ‘ λμ΄μμΌλ©΄ 리ν μλμ μ λλ€.
2-7) link_size , link_off - uint
link_sizeλ μ²μ 4 byteλ‘ μ°κ²° μΉμ μ ν¬κΈ°λ₯Ό λνλ λλ€. νμΌμ΄ μ μ μΌλ‘ μ°κ²° λμ§ μμ κ²½μ° 0μ κ°μ΅λλ€.
link_offλ λ€μ 4 byte μ λλ€. νμΌμ μμ λΆλΆμμ μ°κ²° μΉμ κΉμ§μ μ€νμ μ΄λ©° link_sizeκ° 0μΈ κ²½μ° 0μ λλ€.
2-8) map_off - uint
map_offλ νμΌμ μμ λΆλΆμμ λ§΅ νλͺ©κΉμ§μ μ€νμ μ λλ€.
μ€νμ μ 0μ΄ μλμ¬μΌ νκ³ , data μΉμ μΌλ‘μ μ€νμ μ΄μ΄μΌ ν©λλ€.
2-9) string_ids_size, string_ids_off - uint & String_ids
string_ids_sizeλ λ¬Έμμ΄ μλ³μ λͺ©λ‘μ λ¬Έμμ΄ μ μ λλ€.
string_ids_offλ νμΌμ μμ λΆλΆμμ λ¬Έμμ΄ μλ³μ λͺ©λ‘κΉμ§μ μ€νμ μ λλ€.
κ·Έλ λ€λ©΄ String_ids λ 무μμΌκΉμ?
Dex νμΌμλ κ° νΉμ§λ§λ€ κ³ μ ν μΉμ μ κ°μ§κ³ μμ΅λλ€.
String_ids μΉμ μ dex νμΌ λ΄μμ μ¬μ©νλ λͺ¨λ λ¬Έμμ΄μ μ μ₯νλ μμμ λλ€ .
string_ids_size : 0x0000530C
string_ids_off : 0x00000007
2-10) type_ids_size, type_ids_off - uint
type_ids_sizeλ νμ μλ³μ λͺ©λ‘μ μμ κ°μμ λλ€.
type_ids_offλ νμΌμ μμ λΆλΆμμ νμ μλ³μ λͺ©λ‘κΉμ§μ μ€νμ μ λλ€.
μ€νμ μ΄ 0μ΄ μλ κ²½μ° type_ids μΉμ μ μμ λΆλΆκΉμ§μ¬μΌ ν©λλ€.
type_ids_size : 0x00000867
type_ids_off : 0x00014CA0
Type_ids μΉμ μ string_ids μμμ μ μ₯λ λ¬Έμμ΄μ μ±κ²©μ μ μ₯νκ³ μλ μμμ λλ€.
2-11) proto_ids_size, proto_ids_off - uint
proto_ids_sizeλ νλ‘ν νμ μλ³μ λͺ©λ‘μ μμ κ°μ μ λλ€.
proto_ids_offλ νμΌμ μμ λΆλΆμμ νλ‘ν νμ μλ³μ λͺ©λ‘κΉμ§μ μ€νμ μ λλ€.
μ€νμ μ΄ 0μ΄ μλ κ²½μ° proto_ids μΉμ μ μμ λΆλΆκΉμ§μ¬μΌ ν©λλ€.
proto_ids_size : 0x00000D46
proto_ids_off : 0x00016E3C
proto_ids μΉμ μ dex νμΌ λ΄μμ ν¨μμ ꡬ쑰λ₯Ό μ μ₯νκ³ μλ μμμ λλ€.
2-12) field_ids_size, field_ids_off - uint
field_ids_sizeλ νλ μλ³μ λͺ©λ‘μ μμ κ°μ μ λλ€.
field_ids_offλ νμΌμ μμ λΆλΆμμ νλ μλ³μ λͺ©λ‘κΉμ§μ μ€νμ μ λλ€.
μ€νμ μ΄ 0μ΄ μλ κ²½μ° field_ids μΉμ μ μμ λΆλΆμ μμ΄μΌ ν©λλ€
field_ids_size : 0x00002C98
field_ids_off : 0x00020D84
field_ids μΉμ μ ν΄λμ€μ μ΄λ¦, type, class , package μ΄λ¦μ μ 곡νλ μμμ λλ€.
13) method_ids_size, method_ids_off - uint
method_ids_sizeλ λ©μλ μλ³μ λͺ©λ‘μ μμ κ°μμ λλ€.
method_ids_offλ νμΌμ μμ λΆλΆμμ λ©μλ μλ³μ λͺ©λ‘κΉμ§μ μ€νμ μ λλ€.
μ€νμ μ΄ 0μ΄ μλ κ²½μ° method_ids μΉμ μ μμ λΆλΆμ μμ΄μΌ ν©λλ€.
method_ids_size : 0x00003EB0
method_ids_off : 0x00037244
method_ids μΉμ μ methodμ μ΄λ¦, type, μμ class μ΄λ¦μ μ μ₯νλ μμμ λλ€.
14) class_defs_size, class_defs_off - uint
class_defs_sizeλ ν΄λμ€ μ μ λͺ©λ‘μ μμ κ°μμ λλ€.
class_defs_offλ νμΌμ μμ λΆλΆμμ ν΄λμ€ μ μ λͺ©λ‘κΉμ§μ μ€νμ μ λλ€ .
μ€νμ μ΄ 0μ΄ μλ κ²½μ° class_defs μΉμ μ μμ λΆλΆκΉμ§μ¬μΌ ν©λλ€.
class_defs_size : 0x00000570
class_defs_off : 0x000567C4
class_defs μΉμ μ classμ λν μ 체μ μΈ μ 보μ λ°μ΄ν°μ λν κΈ°μ΄ μ 보λ₯Ό μ μ₯νλ μμμ λλ€.
15) data_size, data_off - uint
data_sizeλ λ°μ΄νΈ λ¨μλ‘ λνλΈ data μΉμ μ ν¬κΈ° μ λλ€. sizeof(unit)μ μ§μ λ°°μμ¬μΌ ν©λλ€.
data_offλ νμΌμ μμ λΆλΆμμ data μΉμ μμ λΆλΆκΉμ§μ μ€νμ μ λλ€.
data_size : 0x001B0258
data_off : 0x000615C4
ν΄ λλμ΄ λ€μΌλ€. dexμ λν΄ μμ λ΄€μ΅λλ€. λ€μ smail μ½λλ₯Ό λΆμ ν΄ λ³΄κ² μ΅λλ€.
μΆμ²: Dex νμΌ κ΅¬μ‘°λ μ΄λ»κ² λμ΄ μλκ°
Dex νμΌ κ΅¬μ‘°λ μ΄λ»κ² λμ΄ μλκ°
μΌλ¨ Dex νμΌμ΄λ 무μμΌκΉμ λν΄ μμ λ΄ μλ€. 1.Dex λ? Dexμλ Android λ°νμμμ κΆκ·Ήμ μΌλ‘ μ€νλλ μ½λκ° ν¬ν¨ λμ΄ μμ΅λλ€. μ¦ κΈ°κ³μ΄λ‘ λμ΄μμ΅λλ€. μ΄κ²μ λμ»΄νμΌ νλ©΄ smail μ½λ
r-ever-scp.tistory.com
[ Smali Code λ? ]
Smaliλ dalvik μμ μ¬μ©νλ dex νμμ μ΄μ λΈλ¬μ΄λ€.
Dex νμΌμ κΈ°κ³μ΄λ‘ λμ΄ μμΌλ, μ΄κ±Έ μ½κΈ° μ½κ² ν΄μ£Όλ κ²μ΄ Smali code μ΄λ€.
Smali code λ λ€μ μ»΄νμΌμ ν μ μκΈ° λλ¬Έμ μ½λλ₯Ό μμ νκ³ , λ€μ μ»΄νμΌ ν¨μΌλ‘μ¨ νλ‘κ·Έλ¨ μμ μ΄ κ°λ₯νλ€.