본문 바로가기

스택5

[Algorithm][파이썬] 백준 10773번: 제로 https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 문제 나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다. 재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다. 재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다. 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알.. 2023. 5. 16.
[소프트웨어보안] Stack buffer overflow 이론 Stack buffer overflow 이론 Stack 변수들의 악용 - 지역 변수들은 스택에 연속하여 위치 - 만약 특정 변수의 크기를 넘어서는 값이 쓰여지면 다른 영역에 corruption 발생 가능 다른 영역 ex) 다른 지역 변수, 이전 함수의 FP, 리턴 주소, Arguments 값, 다른 함수의 영역 지역 변수의 corruption - 지역 변수를 오염(corruption)시키는 상황은 변수의 위치가 알려지지 않고 효과가 응용코드의 동작에 의존적이라서 난해하다. 즉, 공격자가 원하는 목표를 달성하는 것이 쉽지 않다. - 좀 더 예측 가능하고 보편적인 공격을 위해서는 스택 프레임의 고정된 정보를 corrupt시키는 것이 좋다. - 해당 코드에서 authenticate()의 sprintf() 함수.. 2022. 11. 6.
[Dreamhack] System Hacking STAGE 2 - Linux Memory Layout 리눅스 프로세스의 메모리 구조 세그먼트 - 리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트(segment)로 구분 - 세그먼트란 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것 - 세그먼트는 크게 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 그리고 스택 세그먼트로 구분 - 운영체제가 메모리를 용도별로 나누면, 각 용도에 맞게 적절한 권한을 부여할 수 있다는 장점이 있다. - 권한은 읽기, 쓰기, 실행이 존재하며, CPU는 메모리에 대해 권한이 부여된 행위만 할 수 있다. 코드 세그먼트 - 코드 세그먼트(Code Segment) = 텍스트 세그먼트 (Text Segment) - 코드 세그먼트란 실행 가능한 기계 코드가 위치하는 영역 - 프로그램이 동작하려면 코드를 실행할 수.. 2022. 10. 5.
[소프트웨어보안] SW 보안의 5 요소 1. 소프트웨어보안 실무와 이론의 차이점 실무 - 안전하게 프로그래밍, 보안 이슈 진단 - 언어 사용의 실수, API 내 문제, 암호기술 및 통신 방법의 문제 - 매우 실무적이고 자세히 기술해야 하는 문제 이론 - 프로그램 실행 중단의 이유와 이의 해결 방법의 이해 - 자동화 도구를 포함한 최신 기술의 이해 - 개념과 방법론 2. 소프트웨어 보안의 일반적인 요소들 1) 위협 (Threats) - 공격자가 원하고 할 수 있는 것 - 악성코드의 종류: malware, spyware, worm - 어떻게 악성코드의 감염이 발생하나? (-> 접촉이 있어야 감염 발생!) - 취약점과 약점(weaknesses)의 분류 필요 (CVE and CWEs) 2) 취약점 (Vulnerabilities) - Overflows.. 2022. 9. 28.
[Algorithm][JAVA] 백준 1874번: 스택 수열 https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수.. 2022. 5. 11.