C 언어 4

[C언어] 버퍼 오버플로우(Buffer overflow) 예방법/ 스택 버퍼 오버플로우/ 힙 버퍼 오버플로우

버퍼 오버플로우 개념 버퍼 오버플로우는 버퍼에 할당된 저장 영역보다, 더 많은 자료를 입력하여 데이터를 변경 할 수 있는 조건이다. 공격자는 조건을 이용해 시스템 먹통으로 만들거나 코드를 삽입해서 시스템의 제어를 가진다. 버퍼 오버플로우는 스택 버퍼 오버플로우, 힙 버퍼 오버플로우 두 가지가 있다. 버퍼 오버플로우는 버퍼 오버런(buffer overrun), 버퍼 오버라이트(buffer overwrite)라고도 불린다. 버퍼 오버플로우 예제 아래 c언어 코드를 실행 해보자. strcpy_s(buffer, 20, input); 함수에서 문자열을 복사하는 예제다. #include #include void vulnerableFunction(char* input) { char buffer[10]; strcpy_..

C 언어 2024.02.24

[C언어] scanf 함수 에러 해결하기 (Erorr : C4996)/ scnaf 함수 강제로 사용하기

scanf 에러 발생(C4996) 오류 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Project2 C:\Project2\Project2\FileName.c 8 에러 해결 방법 에러를 읽어보면 scanf 함수는 더 이상 안전성을 보장하지 않아서 scanf_s 함수를 사용하라고 한다. 따라서 scanf 함수 대신 scanf_s 함수를 사용하면 에러가 안뜨게 된다. 만약 scanf 함수를 강제로 사용 하고 싶다면 아래를 읽으면 된다. scanf 함수 예..

C 언어 2024.02.10

[C언어] 문자열 입력 하기(scanf_s, scanf, gets)

문자열 입력, 출력 함수들 문자열 입력 함수는 대표적으로 세 가지가 있다. 1. scanf_s 2. scanf 3. gets 안전성 문제 때문에 scanf_s 함수 사용을 마이크로 소프트에서 적극 권장하고 있다. 따라서 나머지 함수들은 사용을 자제하는게 좋다. scanf_s 함수 사용하여 문자열 입력 1. char를 배열로 선언해주고 %c 대신 %s로 입력 받으면 된다. 2. 주의 할 점은 sizeof(input)처럼 크기를 지정해 줘야 한다. 크기를 지정하지 않으면 에러 발생. #include int main() { char input[16]; printf("문자 입력 : "); scanf_s("%s", input, sizeof(input)); printf("%s\n", input); return 0;..

C 언어 2024.02.10