-
REVERSING ์์ํ๊ธฐ - ๊ธฐ์ด ๊ฐ๋ 2 :: ๋ ์ง์คํฐ(Register)SECURITY/REVERSING 2020. 7. 8. 17:10
๋ ์ง์คํฐ(Register)
: CPU ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๋ ๋ค๋ชฉ์ ๊ณต๊ฐ์ด๋ค.
๊ทนํ ์๋์ ๋ฐ์ดํฐ๋ ์ฒ๋ฆฌ ์ค์ธ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ผ์์ ์ผ๋ก ๊ธฐ์ตํด ๋๋ ์์ญ์ด๋ค.
RAM ์ ๊ฑฐ์น์ง ์์ผ๋ฏ๋ก ์๋๊ฐ ๋น ๋ฅด๋ค. ๋ง์ผ ๋ ์ง์คํฐ๊ฐ ๋ชจ์๋ผ๋ฉด Stack ์ ์ฌ์ฉํ๋ค.
EAX > EDX > ECX > EBX ์์ผ๋ก ์์ฃผ ์ฌ์ฉํ๋ค
๋ ์ง์คํฐ(32bit) ์ ์ข ๋ฅ
1. ๋ฒ์ฉ ๋ ์ง์คํฐ (EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP ๋ฑ)
: ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ ์ง์คํฐ๋ค.
์์ ๋ฐ์ดํฐ์ ์์ ์ ์ฅ ๊ณต๊ฐ์ผ๋ก, ์ฐ์ฐ ์ฒ๋ฆฌ ๋ฐ ๋ฒ์ง ์ง์ ์ ๋์์ค๋ค.
๊ฐ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ค์ ํฌ๊ธฐ๋ 32 bit ์ด๋ค.
(์ฐธ๊ณ : ๊ฐ ๋ ์ง์คํฐ ์์ E ๋ Extended ๋ฅผ ์๋ฏธํ๊ณ ,
32bit ํ๊ฒฝ์ด ๋๋ฉด์ 16bit ๋ ์ง์คํฐ์ธ AX, BX ๋ฑ์ ํ์ฅํ ๊ฒ์ด๋ค.
AX ๋ 8bit ๋ ๊ฐ๋ก ๊ตฌ์ฑ๋๋๋ฐ, ์ผ์ชฝ 8 bit ๋ฅผ '์์(High)' ๋ผ๊ณ AH, ์ค๋ฅธ์ชฝ 8 bit ๋ฅผ 'ํ์(Low)'๋ผ๊ณ AL ์ด๋ผ ํ๋ค.)
1) EAX (Extended Accumulator Register)
: ์ฐ์ ๊ณ์ฐ & ํจ์์ ๋ฆฌํด๊ฐ ์ ์ฅ
(ex. ๋ํ๊ธฐ, ๋นผ๊ธฐ, return false)
2) EBX (Extended Base Register)
: ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅ
๋ ์ง์คํฐ๊ฐ ๋ ํ์ํ ๋ ํ๋ก๊ทธ๋๋จธ๋ ์ปดํ์ผ๋ฌ๊ฐ ์์์ ๋ง๋ค์ด ์ด๋ค.
3) ECX (Extended Counter Register)
: ๋ฐ๋ณต๋ฌธ์์ ์นด์ดํ .
ECX ์ ์์๊ฐ์ ๋ฃ๊ณ , ๊ฐ์์ํค๋ฉฐ ์นด์ดํฐ๊ฐ 0์ด ๋ ๋๊น์ง ๋ฐ๋ณต๋ฌธ์ ์คํํ๋ค.
์นด์ดํ ํ ํ์๊ฐ ์์ ๋๋ ๋ณ์๋ก ์ฌ์ฉํ๋ค.
4) EDX (Extended Data Register)
: ๊ฐ์ข ์ฐ์ฐ. EAX ์ ๋ฆฌํด๊ฐ ์ ์ธํ๊ณ ๋ ์ญํ ์ด ๊ฐ๋ค.
์ฃผ๋ก ๋ ํฐ ์ฐ์ฐ์ EAX ์ ํจ๊ป ์ฌ์ฉ๋๋ค.
์ด ๋ค ๊ฐ์ง๋ ์ฃผ๋ก ์ฐ์ฐ๊ณผ ๋ฐ์ดํฐ์ ์ฌ์ฉ๋๋ค.
ESI ์ EDI ๋ ๋ฐ์ดํฐ ๋ณต์ฌ, ๊ฐ์ข ๋ฐ๋ณต ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฑ์ ์ฌ์ฉํ๋ค.
5) ESI (Extended Sourse Index Register) : ์์์ง ์ธ๋ฐ์ค
6) EDI (Extended Destination Index Register) : ๋ชฉ์ ์ง ์ธ๋ฑ์ค
ESP ์ EBP ๋ Stack ์ ๊ด๋ฆฌํ๋ ๋ ์ง์คํฐ์ด๋ค.
7) ESP (Extended Stack Point Register)
: ์คํ์ ๋ง์ง๋ง ์ฃผ์๋ฅผ ์ ์ฅ
PUSH, POP ๋ช ๋ น์ ๋ฐ๋ผ ESP ๊ฐ์ด 4 byte ์ฉ ์ด๋
8) EBP(Extended Base Point Register)
: ์คํ์ ์์ ์ฃผ์๋ฅผ ์ ์ฅ
์คํํ๋ ์์ด ์๋ฉธ๋์ง ์๋ ์ด์ EBP ๋ ์ง์คํฐ์ ๊ฐ์ ๋ณํ์ง ์๋๋ค.
ํ์ฌ์ ์คํ ํ๋ ์์ด ์๋ฉธ๋๋ฉด ์ด์ ์ ์ฌ์ฉํ๋ ์คํ ํ๋ ์์ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
ESI, EDI, ESP, EBP ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ ์ฃผ์๋ฅผ ์ ์ฅํ๋ค.
* Stack Frame ์คํ ํ๋ ์
: (ESP ๊ฐ ์๋) EBP ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ๋ด์ ๋ก์ปฌ ๋ณ์, ํ๋ผ๋ฏธํฐ, ๋ณต๊ท ์ฃผ์์ ์ ๊ทผํ๋ ๊ธฐ๋ฒ
์ฆ, ๊ฐ ํจ์๊ฐ ์ฌ์ฉํ๋ ์คํ์ ์์ญ
์ค์ ์ฌ์ฉ ์์๋ EAX, ECX ๋ ์์ ์จ์ง ๊ธฐ๋ฅ์ ์ํํ์ง๋ง, ๋๋จธ์ง ๋ ์ง์คํฐ๋ OS ๊ฐ ์ง์ ํด์ ํ๋ฏ๋ก ์ ๊ธฐ๋ฅ์ ์ํํ์ง ์์ ๋๊ฐ ๋ง๋ค.
2. ์ธ๊ทธ๋จผํธ(Segment) ๋ ์ง์คํฐ (CS, SS, DS ๋ฑ)
์ด 6๊ฐ๊ฐ ์๊ณ , ํฌ๊ธฐ๋ ๊ฐ๊ฐ 16 bit ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ์ ํน์ ์์ญ์ ๊ฐ๋ฆฌํค๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ ๋ ์ง์คํฐ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์์ญ์ ์ฉ๋์ ๋ฐ๋ผ ์ธ๊ทธ๋จผํธ๋ก ๋๋์ด์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
ํ์ด์ง์ด ์๋ ์์ , ๋ฉ๋ชจ๋ฆฌ ์์ญ ๊ด๋ฆฌ/๋ถ๋ฆฌ ๋ฑ์ ์ํด์ ์ฌ์ฉ๋์๊ณ , ์๋ ์์คํ ๊ณผ์ ํธํ์ฑ์ ์ํด ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ๋ค์ ๊ทธ๋๋ก 16 bit ๋ก ๋จ์์๊ฒ ๋์๋ค.
๊ฐ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์ธ๊ทธ๋จผํธ ๋์คํฌ๋ฆฝํฐ์ ๊ฐ์๋ฉ๋ชจ๋ฆฌ๊ฐ ์กฐํฉ๋์ด ์ ํ ์ฃผ์๊ฐ ๋๋ฉฐ, ํ์ด์ง ๊ธฐ๋ฒ์ ์ํด ์ ํ ์ฃผ์๊ฐ ์ต์ข ์ ์ผ๋ก ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํ๋๋ค. (๋ง์ฝ OS ์์ ํ์ด์ง์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ ํ ์ฃผ์๋ฅผ ๊ทธ๋๋ก ๋ฌผ๋ฆฌ ์ฃผ์๊ฐ ๋๋ค)
CS (Code Seagment) ํ๋ก๊ทธ๋จ์ ์ฝ๋ ์ธ๊ทธ๋จผํธ์ ์์ ์ฃผ์๋ฅผ ์ ์ฅ SS (Stack Segment) ์คํ ์๊ทธ๋จผํธ์ ์์ ์ฃผ์๋ฅผ ์ ์ฅ DS (Data Seagment) ๋ฐ์ดํฐ ์์ญ์ ์์ ์ฃผ์๋ฅผ ์ ์ฅ ES (Extra Segment) ๋ฌธ์์ด ๋ช ๋ น์์ ๋ชฉ์ ์ง ์ฐ์ฐ์๊ฐ ์์นํ๋ ์ธ๊ทธ๋จผํธ ์ฃผ์ GS ๊ธฐํ ์ฌ๋ถ FS ๊ธฐํ ์ฌ๋ถ ๊ฐ ์ธ๊ทธ๋จผํธ ์ฃผ์์ ๋ช ๋ น์ด ํฌ์ธํธ ๋ ์ง์คํฐ/์คํ ํฌ์ธํฐ(SP) ๋ ์ง์คํฐ์ ์คํ์ ๊ฐ์ ๋ํ๋ฉด, ์คํํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ก๋ถํฐ ๊ฐ์ ธ์์ผ ํ ๋ช ๋ น์ด์ ์ฃผ์/์ฐธ์กฐํ๊ณ ์๋ ์คํ์ ํ์ฌ ์์น๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ด ๋ ์ง์คํฐ๋ค์ ์ง์ ์ฐธ์กฐํ ํ์๊ฐ ์๋ค.
(16 bit ์ธ๊ทธ๋จผํธ ์์คํ ์์๋ ์ข์ธก์ผ๋ก 4bit ์ํํธ๋ฅผ ํ๊ณ ์คํ์ ๋ ์ง์คํฐ๋ฅผ ์ํํธํ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ์ ํฉํ์ฌ ์์น๋ฅผ ์ ํ๋ค.)
3. ํ๋๊ทธ ๋ ์ง์คํฐ (ZF, OF, SF, CF ๋ฑ)
32bit EFlag ๋ ์ปดํจํฐ ํ๋(์ฐ์ ์ฐ์ฐ ๋ฑ)์ ์ํ๋ฅผ ์๋ ค์ฃผ๋ ํ๋๊ทธ ๋นํธ๋ฅผ ์ ์ฅํ๋ค.
์คํ ์์์ ๋ถ๊ธฐ(์กฐ๊ฑด๋ฌธ ๋ฑ)์ ์ ํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
์ฐ์ฐ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ํด์ง๋ ์ํ ํ๋๊ทธ์ ํ๋ก์ธ์์ ๋์ ์ํ๋ฅผ ์ ์ดํ๋ ์ ์ด ํ๋๊ทธ๋ก ๋๋๋ค.
3.1 ์ํ ํ๋๊ทธ
ZF (Zero Flag) ๋นํธ 6 ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ 0 ์ด๋ฉด 1๋ก ์ธํธ, ์๋๋ฉด 0์ผ๋ก ๋ฆฌ์ OF (Overflow Flag) ๋นํธ 11 overflow/underflow ๋ฐ์ ์ 1๋ก ์ธํธ, ์๋๋ฉด 0์ผ๋ก ๋ฆฌ์ SF (Sign Flag) ๋นํธ 7 ์ต์์ ๋นํธ๊ฐ 1์ผ ๋ 1๋ก ์ธํธ, ์๋๋ฉด 0์ผ๋ก ๋ฆฌ์ CF (Carry Flag) ๋นํธ 0 ์ต์์ ๋นํธ์ ์๋ฆฌ์ฌ๋ฆผ(CARRY) / ๋น๋ฆผ(BORROW) ๋ฐ์ ์ 1๋ก ์ธํธ, ์๋๋ฉด 0์ผ๋ก ๋ฆฌ์ PF (Parity Flag) ๋นํธ 2 1๋ก ๋ ๋นํธ์ ์๊ฐ ์ง์๊ฐ์ผ ๋ 1๋ก ์ธํธ, ํ์๊ฐ์ผ ๋ 0์ผ๋ก ๋ฆฌ์ AF (Auxilary Flag) ๋นํธ 4 ํ์ ๋นํธ๋ก๋ถํฐ ์์ ๋นํธ๋ก ์๋ฆฌ์ฌ๋ฆผ/๋น๋ฆผ์ด ๋ฐ์ํ ๊ฒฝ์ฐ 1๋ก ์ธํธ, ์๋๋ฉด 0์ผ๋ก ๋ฆฌ์ CF, AF ๋ ์์ฑ๋ ์ฌํญ ์ธ์ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค.
3.2 ์ ์ด ํ๋๊ทธ
DF (Direction Flag) ๋นํธ 10 ๋ฌธ์์ด ์ฒ๋ฆฌ์ ๋ฐฉํฅ์ ์ ์ด. 0 ์ด๋ฉด ์ฆ๊ฐ, 1์ด๋ฉด ๊ฐ์ IF (Interrupt enable Flag) ๋นํธ 9 ์ธ๋ถ ์ธํฐ๋ฝํธ ๋ฐ์์ ํ์ฉ์ ์ ์ด. 1์ด๋ฉด ํ์ฉ, 0์ด๋ฉด ๊ธ์ง TF (Trap enable Flag) ๋นํธ 8 ๋ด๋ถ ์ธํฐ๋ฝํธ ๋ฐ์ ์ ์ด. 1์ด๋ฉด ํ๋์ ๋ช ๋ น์ด ๋๋ ๋๋ง๋ค ๋ฐ์ (= trace bit) ๋นํธ ์์น๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF (ํ์ ์นธ์ ์๋ฏธ ์์)
4. ์ธ์คํธ๋ญ์ ํฌ์ธํฐ (IP) = PC (Program Counter)
16 bit ๋ก, ์คํ์ฝ๋์ ์ด๋ ์์น๋ฅผ ์คํํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ ์ง์คํฐ์ด๋ค.
์ฆ, ๋ค์์ ์คํ๋ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์คํํ ๊ธฐ๊ณ์ด ์ฝ๋์ ์์น๋ฅผ ์ง์ ํ๋ค.
์ธํ ์ x86 ๊ณ์ด์ CPU ์์ IP ๋ผ๊ณ ํ๋ค.
'SECURITY > REVERSING' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฆฌ๋ ์ค(Linux) ๊ธฐ์ด - 01 ๋ช ๋ น์ด (0) 2020.07.14 REVERSING ์์ํ๊ธฐ - VMware & Ubuntu Linux 32 bit and 64 bit ์ค์นํ๊ธฐ (1) 2020.07.09 REVERSING ์์ํ๊ธฐ - ๊ธฐ์ด ๊ฐ๋ 4 :: ์ด์ ๋ธ๋ฆฌ ์ธ์ด (0) 2020.07.08 REVERSING ์์ํ๊ธฐ - ๊ธฐ์ด ๊ฐ๋ 3 :: Endian (0) 2020.07.08 REVERSING ์์ํ๊ธฐ - ๊ธฐ์ด ๊ฐ๋ 1 :: ๋ฉ๋ชจ๋ฆฌ ์์ญ(RAM) (0) 2020.07.08