
[달고나] 정리: 12p~53p
2021. 1. 8. 18:14
Study/System Hacking
프로그램 구동 시 segment에서 일어나는 일 프로그램 구동 시 메모리와 레지스터가 어떻게 동작하는지 살펴보기 위해 다음과 같은 프로그램을 이용하겠다. void function(int a, int b, int c){ char buffer1[15]; char buffer2[10]; } void main(){ function(1, 2, 3); } 이제 위 C 프로그램을 어셈블리 코드로 변환하겠다. (리눅스 gcc 사용) 어셈블리 프로그램은 다음과 같이 simple.asm이라는 파일 이름으로 생성되었다. 이제 simple.c 프로그램이 컴파일 되고, 실제 메모리 어느 위치에 자리하게 될지 알아보기 위해 gdb를 이용할 것이다. gdb를 이용해서 segment의 logical address를 알아보자. 위 사..

[BOJ] 10809/10773
2021. 1. 7. 18:07
알고리즘
#10809: 알파벳 찾기 [문제] 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오. [코드] #include int main() { char word[101]; char* wp = &word; int check[26]; for (int i = 0; i < 26; i++) check[i] = -1; scanf("%s", &word); for (int i = 0; *wp != '\0'; wp++, i++) { if (check[*wp - 'a'] != -1) continue; check[*wp - 'a'] = i; } for (int i = 0; i < 26; i..
[XSS] 기초 정리
2021. 1. 6. 13:33
Study/Web Hacking
XSS란? XSS(Cross-site Scripting)는 웹상에서 가장 기초적인 취약점 공격 방법이다. 공격자가 악의적인 목적으로 공격 대상 사이트에 스크립트를 삽입하여 사이트에 방문한 사용자가 의도하지 않은 동작이 수행된다. 이를 통해 쿠키나 세션 토큰 등 민감한 정보를 탈취당 할 수 있다. CSRF와 혼동하는 경우가 있지만 XSS는 자바스크립트를 실행시키는 것이고, CSRF는 특정한 행동을 시킨다는 점에서 차이가 있다. 공격기법 -스크립트 태크 예제 스크립트 태그로 스크립트를 실행시키는 방법이다. 이는 매우 정직한 방법이라 대부분의 사이트에서 막고 있다. 브라우저 단계에서 필터링해주는 경우도 있다. -자바스크립트 링크 예제 XSS 링크 태그로 자바스크립트를 실행하는 방법이다. 브라우저에서 about..

[달고나]: 1~3장 레지스터 구조
2021. 1. 3. 20:25
Study/System Hacking
[Pre_시스템] 8086 Memory Architecture 시스템이 시작되면 커널(Kernal)이 가용 메모리에 적재된다. 시스템은 운영에 필요한 기본적인 명령어 집합을 커널에서 찾기 때문에 사진과 같은 위치에 적재시켜야 한다. 프로세스 실행 운영체제는 하나의 프로세스를 처리할 때 segment단위로 묶어서 처리한다. segment는 code segment, data segment, stack segment로 이루어져 있고 가용 메모리 영역에 저장된다. code segment code segment에는 시스템이 인지할 수 있는 명령어 instruction이 들이 있다. 컴퓨터가 instrcution을 실행하려면 메모리 상의 특정 위치에 있는 명령을 지정해야 한다. 그러나 segment는 자신이 현재 ..

[2020-2 리눅스 이론] 9주차
2020. 11. 28. 16:27
Study/LINUX
[ 2020 2학기 / 9주차 ] 1. 프로세스 이미지 1.1 프로세스 프로세스는 실행중인 프로그램이다. 프로그램 실행을 위해서는 프로그램의 코드, 데이터, 스택, 힙, U-영역 등이 필요하다. 프로세스 이미지(구조)는 메모리 내의 프로세스 레이아웃이다. 프로그램 자체가 프로세스는 아니다. [프로세스 이미지] 텍스트(코드) 프로세스가 실행하는 실행 코드를 저장하는 영역 데이터 프로그램 내에 선언된 전역 변수 및 정적 변수 등을 위한 영역 힙 동적 메모리 할당을 위한 영역 스택 함수 호출을 구현하기 위한 실행시간 스택을 위한 여역 U-영역 열린 파일의 파일 디스크립터, 현재 작업 디렉터리 등과 같은 프로세스의 내부 정보 1.2 size 명령어 $ size [실행파일] 실행파일의 각 영역의 크기를 알려준다...

[SWEA] 8821/8741
2020. 11. 28. 02:10
알고리즘
#8821 : 적고 지우기 [코드] [코드설명] ① main 0과 9의 개수를 저장하기 위해 num_list 배열, 문자열을 받기 위해 str 배열을 선언했다. num_list 배열은 숫자의 개수를 저장해야 하기 때문에 값을 0으로 바꿨다. str[i]의 값을 c에 하나씩 받고, 문자를 숫자로 바꾸기 위해 c의 값에서 48을 뺐다. 그리고 조건 연산자를 사용해서 num_list[c]의 값이 0일 경우 1을 1일 경우 0을 반환하도록 하고, 그 값을 num_list[c]에 저장했다. while문이 끝나면 num_list의 합을 sum에 저장하고, t와 sum을 출력하도록 했다. [실행결과] #8741 : 두문자어 [코드] [코드설명] ① main scanf는 공백을 받아들이지 않기 때문에 gets함수로 문..

[2020-2 리눅스 실습] 8주차
2020. 11. 22. 17:21
Study/LINUX
[ 2020 2학기 / 8주차 ] 1. 파일 상태 정보 1) test.txt 파일을 만들어 이 파일에 대해 ls -sl 명령어를 사용하고 그 출력 결과를 설명하시오. 2) test.txt 파일에 대해 stat 명령어를 사용하고 그 출력 결과를 설명하시오. 3) test.txt 파일에 대해 ls -i 명령어를 사용하고 i-노드 번호를 확인한다. 4) test.txt 파일에 대해서 touch 명령어를 사용하고 사용 전 후의 파일 속성을 비교하여 설명하시오. • 파일 크기는 0이고 파일종류는 일반 파일, 사용자에게 rwr권한이 있으며 링크수는 1이다. 그리고 사용자 ID, 그룹 ID, 파일크기, 최종 수정 시간, 파일이름이 순서대로 나열돼있다. • i-노드와 링크수 등 파일의 자세한 내용이 출력됐다. • 79..

[2020-2 리눅스 이론] 8주차
2020. 11. 22. 17:11
Study/LINUX
[ 2020 2학기 / 8주차 ] 1. 파일 시스템 1.1 파일 시스템 보기 $ df 파일시스템* 파일 시스템에 대한 디스크 사용 정보를 보여준다. 1.2 디스크 사용량 보기 $ du [-s] 파일명* 파일 혹은 디렉터리의 사용량을 보여준다. 파일을 명시하지 않으면 현재 디렉터리 내 의 모든 파일들의 사용 공간을 보여준다. 1.3 파일 시스템 구조 2. 파일 상태 정보와 i노드 2.1 파일 상태 • 파일에 대한 모든 정보 블록수, 파일 타입, 사용 권한, 링크수, 파일 소유자의 사용자 ID, 그룹 ID, 파일 크기, 최종 수정 시간 등 예) $ ls -ls hello.c 2 -rw-r--r-- 1 chang cs 617 11월 17일 15:53 hello.c 블록수 파일타입/사용권한 링크수 사용자ID 그..

[SWEA] 8888/8840
2020. 11. 20. 02:15
알고리즘
#8888 : 시험 [코드] [코드설명] ① main 문제의 배점, 맞힌 문제의 개수를 표현하기 위해 point와 num배열을 만들었다. score배열은 N명의 점수를 저장하기 위해, test는 N명의 테스트 결과를 저장하기 위해 만들었다. N, T, P의 값을 입력 받았고, 나중에 getchar()를 쓸 일이 있기 때문에 getchar()를 써서 버퍼를 비웠다. memset을 사용해서 point와 num배열을 모두 0으로 채웠다. 그리고 test는 2차원 배열로 나타내야 하는데 2차원 배열을 사용하니 Stack Overflow가 발생해서 대신 이중 포인터를 사용했다. 24번째 줄의 for문 안에서 i의 값이 증가할 때마다 test[i]에 메모리를 할당해서 2차원 배열을 표현했고, 안쪽 for문에서 ge..