반응형
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 |