본문 바로가기

워게임/protostar

stack3


생김새가 함수 포인터로 점프하나봅니다.

Dump of assembler code for function main:

0x08048438 <main+0>: push   ebp

0x08048439 <main+1>: mov    ebp,esp

0x0804843b <main+3>: and    esp,0xfffffff0

0x0804843e <main+6>: sub    esp,0x60 //60byte 할당

0x08048441 <main+9>: mov    DWORD PTR [esp+0x5c],0x0 //modified = 0

0x08048449 <main+17>: lea    eax,[esp+0x1c] //eax = *buffer

0x0804844d <main+21>: mov    DWORD PTR [esp],eax

0x08048450 <main+24>: call   0x8048330 <gets@plt> //유저 인풋

0x08048455 <main+29>: cmp    DWORD PTR [esp+0x5c],0x0

//cmp(modified == 0)

0x0804845a <main+34>: je     0x8048477 <main+63> //0이면 종료

0x0804845c <main+36>: mov    eax,0x8048560

0x08048461 <main+41>: mov    edx,DWORD PTR [esp+0x5c]

0x08048465 <main+45>: mov    DWORD PTR [esp+0x4],edx

0x08048469 <main+49>: mov    DWORD PTR [esp],eax

0x0804846c <main+52>: call   0x8048350 <printf@plt>

//printf("calling function pointer 어쩌고");

0x08048471 <main+57>: mov    eax,DWORD PTR [esp+0x5c]

//eax에 modified 넣음

0x08048475 <main+61>: call   eax //eax에 있는 값 호출함

0x08048477 <main+63>: leave  

0x08048478 <main+64>: ret    

End of assembler dump.


64byte만큼 더미를 덮어 쓰고 주소값을 4byte입력하면 그게 호출된다는 말인데..

음 그나저나 뭐호출할지 모르겠네요 그런데 gdb의 함수 리스트 기능을 사용해서 보니까 이런게 있더라구요

 

Dump of assembler code for function win:

0x08048424 <win+0>: push   ebp

0x08048425 <win+1>: mov    ebp,esp

0x08048427 <win+3>: sub    esp,0x18

0x0804842a <win+6>: mov    DWORD PTR [esp],0x8048540

0x08048431 <win+13>: call   0x8048360 <puts@plt>

0x08048436 <win+18>: leave  

0x08048437 <win+19>: ret    

End of assembler dump.


따라서 저기로 점프하면 되겠군요

 



'워게임 > protostar' 카테고리의 다른 글

stack5  (0) 2015.10.15
stack4  (0) 2015.10.15
stack2  (0) 2015.10.15
stack1  (0) 2015.10.15
stack0  (0) 2015.10.15