๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’š ๊ฐœ๋ฐœ/์•ˆ๋“œ๋กœ์ด๋“œ

[์•ˆ๋“œ๋กœ์ด๋“œ] Dex ํŒŒ์ผ ๊ตฌ์กฐ๋Š” ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ๋Š”๊ฐ€ / Smali Code

by devshin.kr 2021. 7. 22.
728x90

์ถœ์ฒ˜: 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 ๋Š” ๋‹ค์‹œ ์ปดํŒŒ์ผ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ๋‹ค์‹œ ์ปดํŒŒ์ผ ํ•จ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋Œ“๊ธ€