본문 바로가기

워게임/protostar

stack1


인자로 받아들인 값을 주소값처럼 활용하나보네요


이런식으로 생겼어요


0x08048464 <main+0>: push   ebp

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

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

0x0804846a <main+6>: sub    esp,0x60 //0x60byte 할당

0x0804846d <main+9>: cmp    DWORD PTR [ebp+0x8],0x1 //첫번째 파라미터

0x08048471 <main+13>: jne    0x8048487 <main+35>

//0x1이랑 다르면 점프. 인자 없으면 0x1임

0x08048473 <main+15>: mov    DWORD PTR [esp+0x4],0x80485a0

0x0804847b <main+23>: mov    DWORD PTR [esp],0x1

0x08048482 <main+30>: call   0x8048388 <errx@plt>

0x08048487 <main+35>: mov    DWORD PTR [esp+0x5c],0x0 //값이 다르면 esp+0x5c에 0 넣음

0x0804848f <main+43>: mov    eax,DWORD PTR [ebp+0xc]

//ebp+0xc 값을 eax에 넣음

0x08048492 <main+46>: add    eax,0x4 //왜인지 4 더함

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

//그 값을 eax에 넣음. 이 eax가 유저가 입력한 값이 저장되는 주소..즉 argv[1]

0x08048497 <main+51>: mov    DWORD PTR [esp+0x4],eax

//그걸 esp+0x4에 복사(인자 2)

0x0804849b <main+55>: lea    eax,[esp+0x1c]

//이젠 버퍼가 저장된 공간임(인자 1)

0x0804849f <main+59>: mov    DWORD PTR [esp],eax //그 값을 esp에 위치

0x080484a2 <main+62>: call   0x8048368 <strcpy@plt> //strcpy(buffer, argv[1])

0x080484a7 <main+67>: mov    eax,DWORD PTR [esp+0x5c]

0x080484ab <main+71>: cmp    eax,0x61626364 //eax랑 "dcba"랑 비교

0x080484b0 <main+76>: jne    0x80484c0 <main+92> //다르면 점프

0x080484b2 <main+78>: mov    DWORD PTR [esp],0x80485bc

//you have correctly got the variable to the right value

0x080484b9 <main+85>: call   0x8048398 <puts@plt> //출력

0x080484be <main+90>: jmp    0x80484d5 <main+113>

0x080484c0 <main+92>: mov    edx,DWORD PTR [esp+0x5c]

0x080484c4 <main+96>: mov    eax,0x80485f3

0x080484c9 <main+101>: mov    DWORD PTR [esp+0x4],edx

0x080484cd <main+105>: mov    DWORD PTR [esp],eax

0x080484d0 <main+108>: call   0x8048378 <printf@plt>

0x080484d5 <main+113>: leave  

0x080484d6 <main+114>: ret


0x40만큼 A입력하고 4byte dcba 입력하면 통과해요.

뭐 아마 소스코드는 대략

int main(){

             char buffer[64]

             int cmp;

             if(argc == 1){

                           errx(1, "plz spectify 어쩌고");

             }

             int = 0;

             strcpy(buffer, argv[1]);

             if(cmp == "dcba"){

                           printf("you have 어쩌고");

             }

             else{

                           printf("try again 어쩌고");

             }

}

일케 생겨먹었을것같네요


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

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