728x90
๋ฆฌ๋ฒ์ฑ ์์ง๋์ด๋ง(Reverse Engineering)
- ๋ฆฌ๋ฒ์ฑ ์์ง๋์ด๋ง(Reverse Engineering)์ ๊ธฐ์กด์ ์ํํธ์จ์ด๋ ํ๋์จ์ด๋ฅผ ๋ถ์ํ์ฌ ์๋ ์ค๊ณ, ๊ตฌ์กฐ, ์ฝ๋, ๋์ ์๋ฆฌ๋ฅผ ํ์ ํ๋ ๊ธฐ์ ์ ๊ณผ์ ์ผ๋ก ๋ณดํต ์ํํธ์จ์ด ๋ฆฌ๋ฒ์ฑ์ ๊ฒฝ์ฐ, ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ(์คํ ํ์ผ)์ ์ญ๋ถ์ํ์ฌ ์์ค ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ , ํ๋ก๊ทธ๋จ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง๋ฅผ ๋ถ์ํ๋๋ฐ ์ด์ ์ ๋๋ค.
ํ๋ก๊ทธ๋จ์ด๋?
- ์ฐ์ฐ์ฅ์น๊ฐ ์ํํด์ผ ํ๋ ๋์์ ์ ์ํ ์ผ์ข ์ ๋ฌธ์๋ก binary๋ผ๊ณ ๋งํ๋ค.
๊ณ ๊ธ์ธ์ด๊ฐ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญ๋๋ ๊ณผ์
์ ์ฒ๋ฆฌ → ์ปดํ์ผ → ์ด์ ๋ธ → ๋งํฌ → EXE ํ์ผ
1. ์ ์ฒ๋ฆฌ(Preprocess)
- ์ปดํ์ผ๋ฌ๊ฐ ์์ค์ฝ๋๋ฅผ ์ด์ ๋ธ๋ฆฌ์ด๋ก ์ปดํ์ผํ๊ธฐ ์ ์ ํ์ํ ํ์์ผ๋ก ๊ฐ๊ณตํ๋ ๊ณผ์
- ์ฃผ์ ๊ธฐ๋ฅ
- ์ฃผ์ ์ ๊ฑฐ
- ๋งคํฌ๋ก ์นํ
- ํ์ผ ๋ณํฉ
2. ์ปดํ์ผ(Compile)
- C๋ก ์์ฑ๋ ์์ค์ฝ๋๋ฅผ ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ฒ์ญํ๋ ๊ฒ.
- ์ด ๊ณผ์ ์์ ๋ฌธ๋ฒ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์๋ฌ๋ฅผ ์ถ๋ ฅ
- ์ต์ ๊ธฐ์ ์ ์ฉ(์ต์ )
3. ์ด์ ๋ธ(Assemble)
- ์ปดํ์ผ๋ก ์์ฑ๋ ์ด์ ๋ธ๋ฆฌ์ด ์ฝ๋๋ฅผ ELF ํ์์ Object file๋ก ๋ณํํ๋ ๊ณผ์
- Object file๋ก ๋ณํ์ด ๋๋ฉด ์ด์ ๋ธ๋ฆฌ ์ฝ๋๊ฐ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญ๋จ.
- Gcc์์ -c ์ต์ ์ ํตํด add.S๋ฅผ ๋ชฉ์ ํ์ผ๋ก ๋ณํ๊ฐ๋ฅ.
4. ๋งํฌ(Link)
- ์ฌ๋ฌ ๋ชฉ์ ํ์ผ๋ค์ ์ฐ๊ฒฐํ์ฌ ์คํ๊ฐ๋ฅํ ๋ฐ์ด๋๋ฆฌ๋ก ๋ง๋๋ ๊ณผ์
- ๋งํฌ๋ฅผ ํ๋ฉด ์คํํ ์ ์๋ exe ํ์ผ, ์ฆ ํ๋ก๊ทธ๋จ์ด ์์ฑ๋จ.
๋์ค์ด์ ๋ธ(Disassemble)
- ๊ธฐ๊ณ์ด๋ก ์์ฑ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ณํํ๋ ์์
- ์ปดํจํฐ๊ฐ ์ง์ ์คํํ ์ ์๋ ๊ธฐ๊ณ์ด๋ ์ธ๊ฐ์๊ฒ ์ฝ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์, ๋์ค์ด์ ๋ธ ๊ณผ์ ์ ๊ฑฐ์ณ ์ฌ๋์ด ์ดํดํ ์ ์๋ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค.
๋์ปดํ์ผ(Decompile)
- ๋์ปดํ์ผ์ ๋์ค์ด์ ๋ธ๋ณด๋ค ํ ๋จ๊ณ ๋ ๋์๊ฐ, ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ณํ๋ ์ฝ๋๋ฅผ ๊ณ ๊ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ณํํ๋ ์์
- ์ด๋ฅผ ํตํด ์๋์ ์์ค ์ฝ๋์ ์ ์ฌํ ํํ๋ก ํ๋ก๊ทธ๋จ์ ๋ถ์ํ ์ ์๋ค.
๋์ค์ด์ ๋ธ ๋ฐ ๋์ปดํ์ผ ์ดํ ๋ถ์ ๋ฐฉ๋ฒ
์ ์ ๋ถ์(Static Analysis)
- ํ๋ก๊ทธ๋จ์ ์ค์ ๋ก ์คํํ์ง ์๊ณ , ์ฝ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๋ ๋ฐฉ๋ฒ
- ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ์ ์งํ ์ฑ๋ก ๋ถ์์ด ๊ฐ๋ฅํ๋ฉฐ, ์ ์ฑ ์ฝ๋๋ ์ํํ ์ฝ๋์ ์คํ์ ๋ฐฉ์งํ ์ ์๋ค.
๋์ ๋ถ์(Dynamic Analysis)
- ํ๋ก๊ทธ๋จ์ ์ค์ ๋ก ์คํํ๋ฉด์, ํ๋ก๊ทธ๋จ์ ๋์์ ์ถ์ ํ๊ณ ๋ถ์ํ๋ ๋ฐฉ๋ฒ
- ํ๋ก๊ทธ๋จ์ด ์ค์ ๋ก ์ด๋ค ํ๋์ ํ๋์ง ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์์ผ๋ฉฐ, ์คํ ์์ ์ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ ํจ์ ํธ์ถ ๊ณผ์ ๋ฑ์ ๋ถ์ํ ์ ์๋ค.
์ปดํจํฐ ๊ตฌ์กฐ(Computer Architecture)
- ์ปดํจํฐ๊ฐ ํจ์จ์ ์ผ๋ก ์๋ํ ์ ์๋๋ก ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด ๊ธฐ๋ฅ์ ๊ณ ์ํ๊ณ , ์ด๋ค์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ
- CPU์ ๋ํ ์ค๊ณ = ๋ช
๋ น์ด ์งํฉ ๊ตฌ์กฐ
- ARM, x86 or x86-64, x64๋ฑ
- x86-64 ๋ฐ x64์ ์ํคํ
์ฒ : ๋ ์ง์คํฐ
- ๋ฒ์ฉ ๋ ์ง์คํฐ - eax, ebx, ecx, edx
- ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ
- ๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ
- ํ๋๊ทธ ๋ ์ง์คํฐ
๋ฒ์ฉ ๋ ์ง์คํฐ
- eax: ๊ณฑ์ ๊ณผ ๋๋์ ๋ช ๋ น์์ ์๋์ผ๋ก ์ฌ์ฉ, ํจ์์ ๋ฆฌํด๊ฐ์ด ์ ์ฅ
- ebx: ESI๋ EDI์ ๊ฒฐํฉํ์ฌ ์ธ๋ฑ์ค์ ์ฌ์ฉ
- ecx: ๋ฐ๋ณต ๋ช ๋ น์ด ์ฌ์ฉ ์ ์นด์ดํฐ๋ก ์ฌ์ฉ
- edx: eax์ ๊ฐ์ด ์ฌ์ฉ, ๋ถํธํ์ฅ ๋ช ๋ น
- esp: stack point(์คํ์ผ๋ก๋ง ๋ชจ๋ ๊ฒ๋ค์ ๊ตฌ๋ณ)
- ESI: ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ฑฐ๋, ๋ณต์ฌ ์์ ์์ค ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ ์ ์ฅ
- EDI: ๋ณต์ฌ ์์ ๋ชฉ์ ์ง์ ์ฃผ์๊ฐ ์ ์ฅ
Q) AX์ E21F๋ฅผ ๋์ ํ๋ฉด
A) AH = E2, AL = 1F
Q) EAX์ 1234 0000์ ๋์ ํ๋ฉด? ๊ทธ ํ AL์ 12๋ฅผ ๋์ ?
A) AX = 0000, AH = 00, AL = 00
AL = 12, AX = 0012, EAX = 12340012
์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ
- 6๊ฐ์ง ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ ์กด์ฌ - CS, DS, ES, FS, GS
- ๊ฐ ๋ ์ง์คํฐ์ ํฌ๊ธฐ๋ 16๋นํธ
- X64๋ก ์ํคํ ์ฒ๊ฐ ํ์ฅ๋๋ฉด์ ์ฉ๋์ ํฐ ๋ณํ๊ฐ ์๊น
๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ
- ํ๋ก๊ทธ๋จ์ ์ฝ๋๋ ๊ธฐ๊ณ์ด๋ก ์์ฑ๋์ด ์์
- ์ด ์ค์์ CPU๊ฐ ์ด๋ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์คํํ ์ง ๊ฐ๋ฆฌํค๋ ๊ฒ
- x64์์๋ rip
ํ๋๊ทธ ๋ ์ง์คํฐ
- ํ๋ก์ธ์์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์๋ ๋ ์ง์คํฐ
- CF(Carry Flag): ๋ถํธ ์๋ ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋นํธ์ ๋ฒ์๋ฅผ ๋์ ๊ฒฝ์ฐ ์ค์
- ZF(Zero Flag): ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ 0์ผ ๊ฒฝ์ฐ ์ค์
- SF(Sign Flag): ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ์์์ผ ๊ฒฝ์ฐ ์ค์
- OF(Overflow Flag): ๋ถํธ ์๋ ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋นํธ ๋ฒ์๋ฅผ ๋์ ๊ฒฝ์ฐ ์ค์
์ด์ ๋ธ๋ฆฌ์ด
์ด์ ๋ธ๋ฆฌ์ด ๊ตฌ์กฐ
ํผ์ฐ์ฐ์
- ์์
- ๋ ์ง์คํฐ
- ๋ฉ๋ชจ๋ฆฌ
- BYTE(1byte)
- WORD(2byte)
- DWORD(4byte)
- QWORD(8byte)
ex) QWORD PTR[0x8048000]: 0x8048000์ ๋ฐ์ดํฐ๋ฅผ 8๋ฐ์ดํธ๋งํผ ์ฐธ์กฐํ๋ผ.
๋ช ๋ น์ด
๋ฐ์ดํฐ ์ด๋
- mov dest, src
์ฐ์ ์ฐ์ฐ
- INC reg
- INC: ํผ์ฐ์ฐ์์ 1์ ๋ํจ
- DEC reg
- DEC: ํผ์ฐ์ฐ์์ 1์ ๋นผ๊ธฐ
- ADD dsst, src
- ADD: dest์ src๊ฐ์ ๋ํด์ dest์ ์ ์ฅ
- ์ฐ์ฐ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ZF, OF, CF๊ฐ ์ค์ ๋จ
- SUB dest, src
- SUB: dest์ src๊ฐ์ ๋นผ์ dest์ ์ ์ฅ
- ์ฐ์ฐ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ZF, CF๊ฐ ์ค์ ๋จ
- MUL reg
- MUL: ๋ถํธ ์๋ AL, AX, EAX์ ๊ฐ์ ํผ์ฐ์ฐ์์ ๊ณฑ์
- ๊ฒฐ๊ณผ์ ๋ฐ๋ผ OF, ZF ํ๋๊ทธ๊ฐ ์ค์
- DIV reg
- DIV: 8, 16, 32๋นํธ ๋ถํธ์๋ ์ ์์ ๋๋์ ์ํ
- ๊ฒฐ๊ณผ์ ๋ฐ๋ผ CF, OF, ZF ํ๋๊ทธ๊ฐ ์ค์
- ๋๋จธ์ง = DX, ๋ชซ = AX
๋น๊ต ์ฐ์ฐ
- CMP dest, src
- CMP: ๋ ํผ์ฐ์ฐ์์ ๊ฐ์ ๋น๊ตํ๊ณ , ํ๋๊ทธ ์ค์
- dest - src ํด์ ๋น๊ต
- dest = src => ZF = 1
- dest != src => ZF = 0
- ZF ์ด๊น๊ฐ = 0
๋ถ๊ธฐ ์ฐ์ฐ
: rip๋ฅผ ์ด๋์์ผ์ ์คํํ๋ฆ์ ๋ฐ๊ฟ
- jmp addr: addr๋ก rip ์ด๋
- je addr: ์ง์ ์ ๋น๊ตํ ๋ ํผ์ฐ์ฐ์๊ฐ ๊ฐ์ผ๋ฉด ์ ํ
- je ๋ฐ๋ = jne
ํจ์ ํธ์ถ ๋ช ๋ น์ด
- CALL reg
- CALL: ํจ์ ํธ์ถ ์ ์ฌ์ฉ๋๋ ๋ช ๋ น์ด
- jmp์ ๊ฐ์ด ํ๋ก๊ทธ๋จ ์คํ ํ๋ฆ์ด ๋ณ๊ฒฝ๋์ง๋ง return ์ฃผ์๋ฅผ ์คํ์ ์ ์ฅ
'EVI$ION > 7th' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[EVI$ION] Pwnable (2) | 2024.11.21 |
---|---|
[EVI$ION] #3 - Digital Forensic Assignment (5) | 2024.10.06 |
[EVI$ION] #2 - Web Hacking Assignment (1) | 2024.09.26 |
[EVI$ION] #1 - Web Hacking Assignment (1) | 2024.09.19 |