์ถ์ฒ: Dex ํ์ผ ๊ตฌ์กฐ๋ ์ด๋ป๊ฒ ๋์ด ์๋๊ฐ
์ผ๋จ 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 ํ์ผ ๊ตฌ์กฐ๋ ์ด๋ป๊ฒ ๋์ด ์๋๊ฐ
[ Smali Code ๋? ]
Smali๋ dalvik ์์ ์ฌ์ฉํ๋ dex ํ์์ ์ด์ ๋ธ๋ฌ์ด๋ค.
Dex ํ์ผ์ ๊ธฐ๊ณ์ด๋ก ๋์ด ์์ผ๋, ์ด๊ฑธ ์ฝ๊ธฐ ์ฝ๊ฒ ํด์ฃผ๋ ๊ฒ์ด Smali code ์ด๋ค.
Smali code ๋ ๋ค์ ์ปดํ์ผ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ์์ ํ๊ณ , ๋ค์ ์ปดํ์ผ ํจ์ผ๋ก์จ ํ๋ก๊ทธ๋จ ์์ ์ด ๊ฐ๋ฅํ๋ค.
๋๊ธ