Tool: gdb
# ๋๋ฒ๊ฑฐ๋ ๐
- ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋์ ๋ ผ๋ฆฌ๊ตฌ์กฐ๋ฅผ ์ ์คํ๊ฒ ์ค๊ณํ๊ณ , ์ฝ๋๋ฅผ ์์ฑํด๋๊ฐ
- ๊ฐ๋ฐ ์ด๊ธฐ์ ์๋ฌด๋ฆฌ ์ ์คํ๊ฒ ์ค๊ณํด๋, ์ฝ๋์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ค ๋ณด๋ฉด ์ค์๊ฐ ๋ฐ์ํ๊ธฐ ๋ง๋ จ
- ์ปดํจํฐ๊ณผํ์์๋ ์ด๋ ๊ฒ ์ค์๋ก ๋ฐ์ํ ํ๋ก๊ทธ๋จ์ ๊ฒฐํจ์ ๋ฒ๊ทธ(bug)๋ผ๊ณ ํจ
- ์ด๋ฏธ ์์ฑ๋ ์ฝ๋์์ ๋ฒ๊ทธ๋ฅผ ์ฐพ๋ ๊ฒ์ ์ด๋ ค์ ๋ฐ๋ผ์ ์ด๋ ค์์ ํด์ํ๊ณ ์ ๋๋ฒ๊ฑฐ(Debugger)๋ผ๋ ๋๊ตฌ๊ฐ ๊ฐ๋ฐ ๋จ
- ๋๋ฒ๊ฑฐ๋ ๋ฌธ์ ๊ทธ๋๋ก ๋ฒ๊ทธ๋ฅผ ์์ ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋๊ตฌ
- ํ๋ก๊ทธ๋จ์ ์ด์ ๋ธ๋ฆฌ ์ฝ๋ ๋จ์๋ก ์คํํ๋ฉด์, ์คํ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค
- ์์ ์ด ์ถ์์ ์ผ๋ก ์๊ฐํ ์์ด๋์ด์ ๊ฒฐ๊ณผ๋ฅผ ์ง๊ด์ ์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ์๋ ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ด ์์ฑํ ์ฝ๋์ ๋ฌธ์ ์ ์ ๋์ฑ ๋ช ํํ๊ฒ ์ฐพ์ ์ ์๊ฒ ๋จ
- ๊ทธ๋ฌ๋ ์ด๋ฐ ๋๋ฒ๊ฑฐ์ ์ด์ ์ ๊ฐ๋ฐ์๋ง ์ป๋ ๊ฒ์ ์๋
> ํด์ปค, ๋ฆฌ๋ฒ์ค ์์ง๋์ด ๋ฑ์ ๋น๋กฏํ์ฌ ์ํํธ์จ์ด์์ ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ณ ์ ํ๋ ๋ชจ๋๊ฐ ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ
ํ์์ ํจ์จ์ ๋์
# gdb & pwndbg
1. ์ค์ต ์์
- ๊ฐ๋จํ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ๋ถ์ํ๋ฉฐ gdb์ ์ฌ์ฉ๋ฒ์ ์ตํ๋ณผ ๊ฒ
- ์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ปดํ์ผ ํจ
// Name: debugee.c
// Compile: gcc -o debugee debugee.c -no-pie
#include <stdio.h>
int main(void) {
int sum = 0;
int val1 = 1;
int val2 = 2;
sum = val1 + val2;
printf("1 + 2 = %d\\n", sum);
return 0;
}
- gdb debugee๋ก ๋๋ฒ๊น ์ ์์
2. Start ๐ช
- ๋ฆฌ๋ ์ค๋ ์คํํ์ผ์ ํ์์ผ๋ก ELF(Executable and Linkable Format)๋ฅผ ๊ท์ ํ๊ณ ์์
- ELF๋ ํฌ๊ฒ ํค๋์ ์ฌ๋ฌ ์น์ ๋ค๋ก ๊ตฌ์ฑ๋์ด ์์
- ํค๋ฐ์๋ ์คํ์ ํ์ํ ์ฌ๋ฌ ์ ๋ณด๊ฐ ์ ํ ์๊ณ , ์น์ ๋ค์๋ ์ปดํ์ผ๋ ๊ธฐ๊ณ์ด ์ฝ๋, ํ๋ก๊ทธ๋จ ๋ฌธ์์ด์ ๋น๋กฏํ ์ฌ๋ฌ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์
- ELF์ ํค๋ ์ค์ ์ง์ ์ (Entry Point, EP)์ด๋ผ๋ ํ๋๊ฐ ์๋๋ฐ, ์ด์์ฒด์ ๋ ELF๋ฅผ ์คํํ ๋, ์ง์ ์ ์ ๊ฐ๋ถํฐ ํ๋ก๊ทธ๋จ์ ์คํ
readelf๋ก ํ์ธํด๋ณธ ๊ฒฐ๊ณผ, debugee์ ์ง์ ์ ์ 0x400400์
- gdb์ start ๋ช ๋ น์ด๋ ์ง์ ์ ๋ถํฐ ํ๋ก๊ทธ๋จ์ ๋ถ์ํ ์ ์๊ฒ ํด์ฃผ๋ gdb์ ๋ช ๋ น์ด์
DISASM ์์ญ์ ํ์ดํ(โถ)๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๋ ํ์ฌ rip์ ๊ฐ์ธ๋ฐ,
start๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ ๋ณด๋ฉด 0x400400์ ๊ฐ๋ฆฌํค๊ณ ์์
์ด๋ ์์ ์ดํด๋ณธ ํ๋ก๊ทธ๋จ ์ง์ ์ ์ ์ฃผ์์ ์ผ์น
ํ์ง๋ง Dreamhack ๊ฐ์์์ "0x400400 <_start>"๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ,
"0x4004eb<main+4>"๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์์
์ฐจ์ด์ ์ ์์๋ณด๋ _start๊ฐ main ์ด์ ์ ์คํ๋๋ค๊ณ ํจ
readelf๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด์ ์ธ ์ง์ ์ ์ ์ฐพ์ ๋๋ _start์ ์ฃผ์๊ฐ ๋์ด
ํ์ง๋ง ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ฌ start ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๋ ์ง์ ์ ์ด ์๋ main ํจ์๋ก ์ด๋ํ๋ ๊ฒ ๊ฐ์
์ฆ, ๋๋ฒ๊ฑฐ์์์ start ๋ช ๋ น์ด๋ C์ธ์ด๋ก ์์ฑ๋ ์์ค ํ์ผ์์, main ํจ์์ ์ค๋จ์ ์ ๊ฑธ๊ณ ์คํํ๋ ๊ฒ์ผ๋ก ๋ณด์
์ด๋ฅผ ๊ณ ๋ คํ์ฌ Dreamhack๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด๋ณผ ๊ฒ์
- start: gdb์ ๋ช ๋ น์ด๋ก, ์ง์ ์ (_start)๋ถํฐ ํ๋ก๊ทธ๋จ์ ๋ถ์ํ ์ ์๊ฒ ํด์ค
* ๊ทธ๋ฌ๋ C์ธ์ด๋ก ์์ฑ๋ ์์คํ์ผ์์๋, _start๊ฐ ์๋ main ํจ์์์๋ถํฐ ํ๋ก๊ทธ๋จ์ ๋ถ์ํ ์ ์๊ฒ ํด ์ค
- Dreamhack๊ณผ ๊ฐ์ ์ง์ ์ ์์๋ถํฐ ํ๋ก๊ทธ๋จ์ ๋ถ์ํ๊ณ ์ถ์ผ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ค๋จ์ ์ _start์ ๊ฑธ๊ณ ์คํํ๋ฉด ๋จ
3. context ๐ฝ๏ธ
- ํ๋ก๊ทธ๋จ์ ์คํ๋๋ฉด์ ๋ ์ง์คํฐ๋ฅผ ๋น๋กฏํ ์ฌ๋ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ
- ๋๋ฒ๊ฑฐ๋ฅผ ์ด์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ์คํ ๊ณผ์ ์ ์์ธํ ๊ด์ฐฐํ๋ ค๋ฉด ์ปดํจํฐ์ ๊ฐ์ข ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋์ ํ์ ํ ์ ์๋ ๊ฒ์ด ์ข์
- ๋งฅ๋ฝ(context): pwndbg์์ ์ฃผ์ ๋ฉ๋ชจ๋ฆฌ๋ค์ ์ํ๋ฅผ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ณ ์๋ ๋งฅ๋ฝ์ด๋ผ๊ณ ํจ
> ๋ํ ์ด๋ฅผ ๊ฐ๋ ์ฑ ์๊ฒ ํํํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ถ๊ณ ์์
- context๋ ํฌ๊ฒ 4๊ฐ์ ์์ญ์ผ๋ก ๊ตฌ๋ถ
- registers: ๋ ์ง์คํฐ์ ์ํ๋ฅผ ๋ณด์ฌ์ค
- disasm: rip๋ถํฐ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ๋์ค์ด์ ๋ธ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค
- stack: rsp๋ถํฐ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ์คํ์ ๊ฐ๋ค์ ๋ณด์ฌ์ค
- backtrace: ํ์ฌ rip์ ๋๋ฌํ ๋๊น์ง ์ด๋ค ํจ์๋ค์ด ์ค์ฒฉ๋์ด ํธ์ถ๋๋์ง ๋ณด์ฌ์ค
- ์ด๋ค์ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์คํํ ๋๋ง๋ค ๊ฐฑ์ ๋์ด ๋ฐฉ๊ธ ์คํํ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ค ์ํฅ์ ์คฌ๋์ง ์ฝ๊ฒ ํ์ ํ ์ ์์
4. break & continue ๐ฅ
- main ํจ์๊ฐ ๋ถ์์ ๋์์ด๋ผ๊ณ ๊ฐ์
- break: ํน์ ์ฃผ์์ ์ค๋จ์ (breakpoint)์ ์ค์ ํ๋ ๊ธฐ๋ฅ
- continue: ์ค๋จ๋ ํ๋ก๊ทธ๋จ์ ๊ณ์ ์คํ์ํค๋ ๊ธฐ๋ฅ
> break๋ก ์ํ๋ ํจ์์ ์ค๋จ์ ์ ์ค์ ํ๊ณ , ํ๋ก๊ทธ๋จ์ ๊ณ์ ์คํํ๋ฉด ํด๋น ํจ์๊น์ง ๋ฉ์ถ์ง ์๊ณ
์คํํ ๋ค์ ์ค๋จ๋จ
- ์ด๋ฅผ ํ์ฉํ์ฌ ์ค๋จ๋ startํจ์๋ถํฐ mainํจ์๊น์ง ์คํ์ํฌ ๊ฒ
5. run ๐โ๏ธ
- ์์ start๊ฐ ์ง์ ์ ๋ถํฐ ํ๋ก๊ทธ๋จ์ ๋ถ์ํ ์ ์๋๋ก ์๋์ผ๋ก ์ค๋จ์ ์ ์ค์ ํด์คฌ๋ค๋ฉด, run์ ๋จ์ํ ์คํ๋ง ์ํด
- ๋ฐ๋ผ์ ์ค๋จ์ ์ ์ค์ ํด๋์ง ์์๋ค๋ฉด ํ๋ก๊ทธ๋จ์ด ๋๊น์ง ๋ฉ์ถ์ง ์๊ณ ์คํ๋จ
์ง๊ธ์ mainํจ์์ ์ค๋จ์ ์ ์ค์ ํด๋จ๊ธฐ ๋๋ฌธ์ run๋ช ๋ น์ด๋ฅผ ์คํํด๋, mainํจ์์์ ์คํ์ด ๋ฉ์ถค
6. ๐ก gdb์ ๋ช ๋ น์ด ์ถ์ฝ
- b: break
- c: continue
- r: run
- si: step into
- ni: next instruction
- i: info
- k: kill
- pd: pdisas
7. disassembly ๐๏ธ
- gdb: ํ๋ก๊ทธ๋จ์ ์ด์ ๋ธ๋ฆฌ ์ฝ๋ ๋จ์๋ก ์คํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค
- ํ๋ก๊ทธ๋จ์ ์ฝ๋๋ ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฏ๋ก, gdb๋ ๊ธฐ๊ณ์ด๋ฅผ ๋์ค์ด์ ๋ธ(disassemble)ํ๋ ๊ธฐ๋ฅ์ ํ์ฌ
- disassemble: gdb๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋์ค์ด์ ๋ธ ๋ช ๋ น์ด
> ํจ์ ์ด๋ฆ์ ์ธ์๋ก ์ ๋ฌํ๋ฉด ํด๋น ํจ์๊ฐ ๋ฐํ๋ ๋ ๊น์ง ์ ๋ถ ๋์ค์ด์ ๋ธํ์ฌ ๋ณด์ฌ์ค
+ u, nearpc, pdisassemble๋ pwndbg์์ ์ ๊ณตํ๋ ๋์ค์ด์ ๋ธ ๋ช ๋ น์ด๋ก ์ฝ๋๋ฅผ ๊ฐ๋ ์ฑ ์ข๊ฒ ์ถ๋ ฅํด์ค
8. navigate โญ
- ๊ด์ฐฐํ๊ณ ์ ํ๋ ํจ์์ ์ค๋จ์ ์ ๋๋ฌํ์ผ๋ฉด, ๊ทธ ์ง์ ๋ถํฐ๋ ๋ช ๋ น์ด๋ฅผ ํ ์ค์ฉ ์์ธํ ๋ถ์ํด์ผ ํจ
> ์ด๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด๊ฐ ni์ si
- ni์ si๋ ๋ชจ๋ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๋ฅผ ํ ์ค ์คํํ๋ค๋ ๊ณตํต์ ์ด ์์
> ๊ทธ๋ฌ๋ call ๋ฑ์ ํตํด ์๋ธ๋ฃจํด์ ํธ์ถํ๋ ๊ฒฝ์ฐ ni๋ ์๋ธ๋ฃจํด์ ๋ด๋ถ๋ก ๋ค์ด๊ฐ์ง ์์ง๋ง,
si๋ ์๋ธ๋ฃจํด์ ๋ด๋ถ๋ก ๋ค์ด๊ฐ๋ค๋ ์ฐจ์ด์ ์ด ์์
- ์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด mainํจ์์์ printfํจ์๋ฅผ ํธ์ถํ๋ ์ง์ ๊น์ง ์คํํด ๋ณผ ๊ฒ์
next instruction
- ni๋ฅผ ์ ๋ ฅํ๋ฉด, ์๋์ ๊ฐ์ด printfํจ์ ๋ฐ๋ก ๋ค์์ผ๋ก rip๊ฐ ์ด๋ํ ๊ฒ์ ํ์ธํ ์ ์์
๐ก ์ printf๋ฅผ ์คํํ๋๋ฐ ์๋ฌด ๋ฌธ์์ด๋ ์ถ๋ ฅ๋์ง ์๋์?
- printf๊ฐ ์ถ๋ ฅํ๊ณ ์ ํ๋ ๋ฌธ์์ด์ stdout์ ๋ฒํผ์์ ์ ์ ๋๊ธฐํ ๋ค ์ถ๋ ฅ๋จ
- ๋ฒํผ: ๋ฐ์ดํฐ๊ฐ ๋ชฉ์ ์ง๋ก ์ด๋ํ๊ธฐ ์ ์ ์ ์ ์ ์ฅ๋๋ ์ฅ์
- stdout ๋ฒํผ๋ ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋์ ๋๋ง ๋ฐ์ดํฐ๋ฅผ ๋ชฉ์ ์ง๋ก ์ด๋์ํค๋๋ฐ, ๊ทธ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ์
- ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋
- ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐผ์ ๋
- fllush์ ๊ฐ์ ํจ์๋ก ๋ฒํผ๋ฅผ ๋น์ฐ๋๋ก ๋ช ์ํ์ ๋
- ๊ฐํ๋ฌธ์๊ฐ ๋ฒํผ์ ๋ค์ด์์ ๋
- ์์ ์์๋ ์ ์กฐ๊ฑด์ ํ๋๋ ๋ง์กฑํ์ง ์๊ธฐ ๋๋ฌธ์, ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋๊น์ง ๋ฌธ์์ด์ ์ถ๋ ฅํ์ง ์์
step into
- printfํจ์๋ฅผ ํธ์ถํ๋ ์ง์ ๊น์ง ๋ค์ ํ๋ก๊ทธ๋จ์ ์คํ์ํจ ๋ค, si๋ฅผ ์ ๋ ฅ
- printfํจ์ ๋ด๋ถ๋ก rip๊ฐ ์ด๋ํ ๊ฒ์ ํ์ธํ ์ ์์
- contextํ๋จ์ Backtrace๋ฅผ ๋ณด๋ฉด, mainํจ์์์ printf๋ฅผ ํธ์ถํ์ผ๋ฏ๋ก mainํจ์ ์์ printfํจ์๊ฐ ์์ธ ๊ฒ์ ๋ณผ ์ ์์
finish
- step into๋ก ํจ์ ๋ด๋ถ์ ๋ค์ด๊ฐ์ ํ์ํ ๋ถ๋ถ์ ๋ชจ๋ ๋ถ์ํ๋๋ฐ, ํจ์์ ๊ท๋ชจ๊ฐ ์ปค์ ni๋ก๋ ์๋ ์คํ ํ๋ฆ์ผ๋ก ๋์๊ฐ๊ธฐ ์ด๋ ค์ธ ์ ์์
- finsh: ํจ์์ ๋๊น์ง ํ ๋ฒ์ ์คํ ๊ฐ๋ฅํ์ฌ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
9. examine ๐จ๏ธ
- ํ๋ก๊ทธ๋จ์ ๋ถ์ํ๋ค ๋ณด๋ฉด ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ ์์ ์ฃผ์์ ๊ฐ์ ๊ด์ฐฐํด์ผ ํ ๋๊ฐ ์์
> ์ด๋ฅผ ์ํด gdb์์๋ x๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์ ๊ณต
- x: ํน์ ์ฃผ์์์ ์ํ๋ ๊ธธ์ด๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ์ํ๋ ํ์์ผ๋ก ์ธ์ฝ๋ฉํ์ฌ ๋ณผ ์ ์์
- format letters
- o(octal)
- x(hex)
- d(decimal)
- u(unsigned decimal)
- t(binary)
- f(float)
- a(address)
- i(instruction)
- c(char)
- s(string)
- z(hex, zero padded on the left)
- size letters
- b(byte)
- h(halfword)
- w(word)
- h(giant, 8 byte)
โ rsp๋ถํฐ 80๋ฐ์ดํธ๋ฅผ 8๋ฐ์ดํธ์ฉ hexํ์์ผ๋ก ์ถ๋ ฅ
rsp๋ถํฐ 80๋ฐ์ดํธ๋ฅผ 8๋ฐ์ดํธ์ฉ ์ถ๋ ฅํด๋ด
"x/10gx $rsp": g๋ 8๋ฐ์ดํธ๋ฅผ ์๋ฏธํ๊ณ , ์์ 10์ ์ ์์ผ๋ฏ๋ก 8๋ฐ์ดํธ์ฉ 10๋ฒ ์ถ๋ ฅ.
x๋ hexํ์์ ์๋ฏธํ๋ฉฐ $rsp๋ rsp๋ถํฐ ์ถ๋ ฅํ๋ค๋ ์๋ฏธ
โก rip๋ถํฐ 10์ค์ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด ์ถ๋ ฅ
rip๋ถํฐ 5์ค์ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๋ฅผ ์ถ๋ ฅ
"x/5i $rip": i๋ instruction์ ์๋ฏธํ๊ณ ์์ 5๊ฐ ์ ํ์์ผ๋ฏ๋ก ๋ค์ฏ ์ค์ ์ด์ ๋ธํ์ฌ ๋ณด์ฌ์ค
$rip๋ rip๋ถํฐ ์ถ๋ ฅํ๋ค๋ ์๋ฏธ
โข ํน์ ์ฃผ์์ ๋ฌธ์์ด ์ถ๋ ฅ
ํน์ ์ฃผ์, 0x400000์์์ ๋ฌธ์์ด์ ์ถ๋ ฅํด ๋ด
10. telescope ๐ญ
- telescope: pwndbg๊ฐ ์ ๊ณตํ๋ ๋ฉ๋ชจ๋ฆฌ ๋คํ ๊ธฐ๋ฅ
- ํน์ ์ฃผ์์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ๋ค์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์์ ๊ทธ์น์ง ์๊ณ , ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ์ฃผ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํ์ํ์ฌ ๊ฐ์ ๋ณด์ฌ์ค
11. vmmap ๐บ๏ธ
- vmmap: ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ๋ณด์ฌ์ค
- ์ด๋ค ํ์ผ์ ๋งคํ๋ ์์ญ์ผ ๊ฒฝ์ฐ ํด๋น ํ์ผ์ ๊ฒฝ๋ก๊น์ง ๋ณด์ฌ์ค
12. gdb / python
- gdb๋ฅผ ํตํด ๋๋ฒ๊น ํ ๋ ์ง์ ์ ๋ ฅํ ์ ์์ ๋๊ฐ ์์
ex) ์ํ๋ฒณ์ด ์๋ ๊ฐ์ ์ ๋ ฅํ๋ ์ํฉ์์ ์ด๋ฌํ ๊ฐ์ ์ด์ฉ์๊ฐ ์ง์ ์ ๋ ฅํ ์ ์๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ํ์ด์ฌ์ผ๋ก
์ ๋ ฅ๊ฐ์ ์์ฑํ๊ณ , ์ด๋ฅผ ์ฌ์ฉํด์ผ ํจ
- ์์ ์ฝ๋
// Name: debugee2.c
// Compile: gcc -o debugee2 debugee2.c -no-pie
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char name[20];
if( argc < 2 ) {
printf("Give me the argv[2]!\n");
exit(0);
}
memset(name, 0, sizeof(name));
printf("argv[1] %s\n", argv[1]);
read(0, name, sizeof(name)-1);
printf("Name: %s\n", name);
return 0;
}
ํ๋ก๊ทธ๋จ์ ์ธ์๋ก ์ ๋ฌ๋ ๊ฐ๊ณผ ์ด์ฉ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ ๊ฐ์ ์ถ๋ ฅํ๋ ์์
- ๋๋ฒ๊น
13. gdb / python argv
- run ๋ช ๋ น์ด์ ์ธ์๋ก $()์ ํจ๊ป ํ์ด์ฌ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ฉด ๊ฐ์ ์ ๋ฌํ ์ ์์
- ๋ค์์ ํ์ด์ฌ์์ printํจ์๋ฅผ ํตํด ์ถ๋ ฅํ ๊ฐ์ run ๋ช ๋ น์ด์ ์ธ์๋ก ์ ๋ฌํ๋ ๋ช ๋ น์ด
14. gdb / python input
- $()์ ํจ๊ป ํ์ด์ฌ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ฉด ๊ฐ์ ์ ๋ ฅํ ์ ์์
- ์ ๋ ฅ๊ฐ์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํด์๋ '<<<' ๋ฌธ์๋ฅผ ์ฌ์ฉ
- ๋ค์์ ์์ ๋ฐฐ์ด argv[1]์ ์์์ ๊ฐ์ ์ ๋ฌํ๊ณ , ๊ฐ์ ์ ๋ ฅํ๋ ๋ช ๋ น์ด
# ๋ง์น๋ฉฐ
- ์ฝ์ค ์์ฝ ๐
- start: ์ง์ ์ ์ ์ค๋จ์ ์ ์ค์ ํ๊ณ , ์คํ
- break(b): ์ค๋จ์ ์คํ
- continue(c): ๊ณ์ ์คํ
- disassemble: ๋์ค์ด์ ๋ธ ๊ฒฐ๊ณผ ์ถ๋ ฅ
- u, nearpc, pd: ๋์ค์ด์ ๋ธ ๊ฒฐ๊ณผ ๊ฐ๋ ์ฑ ์ข๊ฒ ์ฒ๋ฆฌ
- x: ๋ฉ๋ชจ๋ฆฌ ์กฐํ
- run(r): ํ๋ก๊ทธ๋จ ์ฒ์๋ถํฐ ์คํ
- context: ๋ ์ง์คํฐ, ์ฝ๋, ์คํ, ๋ฐฑํธ๋ ์ด์ค์ ์ํ ์ถ๋ ฅ
- next(ni): ๋ช ๋ น์ด ์คํ, ํจ์ ๋ด๋ถ๋ก๋ ๋ค์ด๊ฐ์ง ์์
- step into(si): ๋ช ๋ น์ด ์คํ, ํจ์ ๋ด๋ถ๋ก ๋ค์ด๊ฐ
- telescope(tele): ๋ฉ๋ชจ๋ฆฌ ์กฐํ, ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ด ํฌ์ธํฐ์ผ ๊ฒฝ์ฐ ์ฌ๊ท์ ์ผ๋ก ๋ฐ๋ผ๊ฐ๋ฉฐ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถ๋ ฅ
- vmmap: ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์ ์ถ๋ ฅ
'Hacking Tech > System Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dreamhack] Exploit Tech: Shellcode (0) | 2022.04.03 |
---|---|
[Dreamhack] Tool: pwntools (0) | 2022.03.28 |
[Dreamhack] x86 Assembly๐ค: Essential Part(2) (0) | 2022.03.27 |
[Dreamhack] x86 Assembly๐ค: Essential Part(1) (0) | 2022.03.26 |
[Dreamhack] Background: Linux Memory Layout (0) | 2022.03.25 |