hint를 배껴와서 tmp폴더에 level9.c를 만들었습니다.
그리고 vi편집기로 한글을 모두 제외한후에
tmp폴더에다가 컴파일햇습니다
자 이렇게 열어버렸습니다 .
이제 위에서부터 해석을 해볼까요
push ebp - 스택의 기준점을 설정해주었다.
mov ebp , esp - esp 값을 ebp에 복사하였다 이로써 base pointer와 stack pointer가 같은 지점을 가르치게 된다
sub esp,0x28 - ESP 에서 28을 빼는 명령이다. ESP는 28바이트 아래 지점을 가리키게 되고 스택에 8바이트의 공간이 생기게 된다 .(스택이 8 바이트 학장되었다.)
and esp,0xfffffff0 - ESP의 주소 값의 맨 뒤 4bit를 0으로 만들기 위한 명령어 큰 의미는 없다.
mov eax,0x0 - EAX 레지스터에 0을 넣는다.
sub esp,eax - ESP에 들어 있는 값에서 EAX에 들어 있는 값만큼 뺀다 stack pointer를 EAX만큼 확장시키는것이다. ( 0이 들어가 있으므로 별 의미는 없음)
sub esp,0xc - 스택을 12바이트 만큼 확장한다.
push 0x8048554 - 0x8048554를 현재 스택에 저장한다 .
call 0x8048350 <printf> - 0x8048350에 있는 명령을 수행하라는 뜻이다 printf가 들어있다.
add esp, 0x10 - 스택을 16바이트 줄입니다.
sub esp, 0x4 - 스택을 4바이트만큼 확장한다
push ds:0x8049698 - 0x08049698라는 (실제로 사용,존재하는) 값을 넣는다
push 0x28 - esp에 40바이트값만큼을 저장하고 스택을 4바이트 확장한다
lea eax, [ebp-40] - eax에 ebp-40에 저장되있는 값을 mov 한다
push eax - eax를 집어넣는다.
call 0x8048320 <fgets> - 0x8048320에 있는 명령을 수행한다 .
add esp,0x10 - 스택을 16바이트 줄입니다.
sub esp,0x4 - 스택을 4바이트 만큼 확장합니다.
push 0x2 - 스택에 2바이트를 집어넣습니다
push 0x804856a - 스택에 0x804856a값을 집어 넣는다
lea eax,[ebp-24] - eax에 ebp-24에 저장되있는 값을 mov한다 .
push eax - eax를 집어넣는다.
우와 이렇게 해석이 다 끝낫네요 초보자인 저에겐 너무나도 어려웠습니다.
lea 부분들을 보시면 40 > 24 이렇게 바뀌죠 ? 즉 16바이트 씩을 할당 받는다는것을 알 수 있습니다!
buf2에 넘어가도록 buf에 16개를 때려박은후에 buf2에 넘어가는 초기 2바이트를 go로 넣어봅시다!
python -c 'print "A"*16+"go"';cat)|/usr/bin/bof 라는 명령어를 입력하여서 풀면됩니다!
'해커스쿨 ftz' 카테고리의 다른 글
FTZ - LEVEL11 (0) | 2016.04.15 |
---|---|
FTZ - LEVEL 10 (0) | 2016.04.15 |
FTZ - LEVEL9 (소스) (0) | 2016.04.10 |
FTZ - LEVEL8 (0) | 2016.04.10 |
FTZ - LEVEL7 (0) | 2016.04.10 |