본문 바로가기

system

[protostar]stack1.c

반응형
This level looks at the concept of modifying variables to specific values in the program, and how the variables are laid out in memory.

이 레벨은 프로그램에서 특정 변수로 변경하는 개념으로 보인다.

그리고 어떻게 변수들이 메모리에 배치되는지를 살펴본다.

 

This level is at /opt/protostar/bin/stack1

이 위치에서 문제를 풀면 된다.

 

이제 코드를 살펴본다.

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
  volatile int modified;
  char buffer[64];

  if(argc == 1) {
      errx(1, "please specify an argument\n");
  }

  modified = 0;
  strcpy(buffer, argv[1]);

  if(modified == 0x61626364) {
      printf("you have correctly got the variable to the right value\n");
  } else {
      printf("Try again, you got 0x%08x\n", modified);
  }
}

앞의 문제와 비슷해보인다.

argc가 1이면 '인자를 구체화해라'라고 하고

buffer에 argv[1]을 복사한다.

 

modified가 0x61626364면 맞았다고 하고, 아니면 다시하라는 메시지가 나온다.

 

stack1에서 "A"*65를 넣어보니 "Try again, you got 0x%08x"문자가 출력된다.

buffer변수 64byte를 넘쳐 modified에 A값 0x41이 들어갔다.

 

이렇게 64byte를 채우고 0x61626364를 리틀 엔디언 방식으로 입력해주면 될 것이다.

modified에 0x61626364가 들어가는 걸로 문제풀이를 완료했다!

반응형

'system' 카테고리의 다른 글

[protostar]stack6.c  (0) 2020.11.02
[protostar]stack4.c  (0) 2020.09.24
[protostar]stack3.c  (0) 2020.09.22
[protostar]stack0  (0) 2020.09.22
[protostar]stack2  (0) 2020.09.17