본문 바로가기
728x90
반응형

2022-2/시스템 프로그래밍13

백도어 트로이 목마: 사용자가 의도치 않은 코드를 정상적인 프로그램에 삽입한 프로그램 스파이웨어: 설치된 시스템의 정보를 주기적으로 원격지의 특정한 서버에 보내는 프로그램 백도어: 운영체제나 프로그램을 생성할 때 정상적인 인증 과정을 거치지 않고 접근할 수 있도록 만든 일종의 통로 로컬 백도어: 로컬에서 서버의 셸을 얻어내 관리자로 권한을 상승할 때 사용. 공격자는 일반 계정이 하나 필요 함(일반계정에서 루트 계정으로 권한 상승) 원격 백도어: 원격으로 관리자 권한을 획득해 시스템에 접근. 시스템 계정이 필요 없음 백도어 생성 #include main(int argc, char *argv[]) { char exec[100]; setuid(0); setgid(0); sprintf(exec, "%s 2>/dev/n.. 2022. 12. 6.
계정과 권한/패스워드 크래킹 리눅스/유닉스의 계정과 권한 체계 리눅스/유닉스의 권한 상승 윈도우의 계정과 권한 체계 윈도우의 권한 상승 리눅스/유닉스의 계정과 권한 리눅스 시스템의 계정과 권한 체계 root라고 불리는 관리자와 일반 사용자 계정만 있음 계정 목록을 /etc/passwd 파일에 저장 /etc/passwd 파일 내용 1)root : 2)x : 3)0 : 4)0 : 5)root : 6)/root : 7)/bin/bash 1)id : 2)패스워드(암호화됨) : 3)UID : 4)GID : 5)이름 : 6)홈 디렉터리 : 7)사용자 셸 파일정보 drwxrwxrwx, 1 root rot 접근권한,링크수,소유자,그룹 소유자변경(chown/chgrp 새 소유자 파일명) ,권한변경(chmod 644 파일명),umask등 이전에 배운.. 2022. 11. 22.
9장 프로세스 제어 9.1 프로세스 생성 fork()시스템 호출 #include #include pid_t fork(void); 새로운 프로세스를 생성하는 유일한 방법이다. fork()시스템 호출 시 부모 프로세스를 똑같이 복제하여 새로운 자식 프로세스를 생성한다. 자식 프로세스는 pid를 제외하고 모든 것(코드,데이터,스택,힙 등)이 똑같다. fork()는 pid를 반환하는데, 부모 프로세스는 자식 프로세스의 id를 반환하고 자식 프로세스에서는 0을 리턴한다 (부모, 자식 총 2번 리턴함) fork()이후 부모와 자식은 병행적으로 각각 실행을 계속한다. #include #include int main() { int pid; pid=fork(); if(pid==0)//자식 프로세스 { printf("난 자식임 pid=%d".. 2022. 11. 16.
10장 메모리 관리 10.2 동적 할당 필요할 때 필요한 만큼만 메모리를 요청해서 사용하여 메모리를 절약할 수 있다. 사용 후 더 이상 필요가 없을 경우, 해당 영역을 반납한다ㅣ malloc() calloc() realloc() free() malloc을 사용한 동적 메모리 할당 #include void *malloc(size_t size); void free(void *ptr); malloc()은 void*타입이므로 사용시 형변환이 필수이다. #include void *calloc(size_t n, size_t size); //크기가 size인 메모리 공간을 n개 할당한다. 값을 모두 0으로 초기화한다. calloc의 경우 모든 바이트를 0으로 초기화한다. #include void *realloc(void *ptr,siz.. 2022. 11. 11.
8장 프로세스 8.1 프로그램 시작 사용자가 프로그램을 실행하면 내부적으로(shell 내에서) fork(), exec()시스템 호출을 통해 새로운 프로그램이 실행 됨 C 시작 루틴(start-up routine) 컴파일러가 실행 파일에 C 시작루틴을 포함시킴. 이 루틴은 exec로부터 전달받은 명령줄 인수, 환경 변수를 main함수로 전달함. 프로그램 실행 종료 main함수의 실행이 끝나면 exit( main(argc,argv)); 을 호출 (main에서 return 0-> exit(0)) 명령줄 인수 int main(int argc, char *argv[]); argc: 명령줄 인수의 개수 argv[]: 명령줄 인수 리스트를 나타내는 포인터 배열 더보기 #include #include int main(int argc.. 2022. 11. 8.
5. 파일 시스템 파일 시스템 구조 부트 블록 슈퍼 블록: 전체 파일 시스템에 대한 정보를 저장(총 블록 수, 사용 가능한 i-노드 수 등) i-리스트 : 각 파일을 나타내는 모든 i-노드들의 리스트. 한 블록은 약 40개 정도의 i-노드를 포함함.(i-노드 하나가 하나의 파일을 가리킴) 데이터 블록 : 실제 파일의 내용(데이터)을 저장하기 위한 블록들 i-노드 하나의 파일은 하나의 i-노드를 갖는다. i-노드는 파일에 대한 모든 정보를 가지고 있음.(ls-l명령어의 출력에서 나오는 것들이 i-node에 저장되어있음) 데이터 블록 포인터 i-node 내부에 위치함. 파일의 내용을 저장하기 위해 할당된 데이터 블록의 주소. 하나의 i-node 내의 블록 포인터는 직접 블록 포인터 12개 간접 블록 포인터 1개 이중 간접 블.. 2022. 11. 2.
4장 파일 입출력 4.1 시스템 호출 시스템 호출(system call) 커널에 서비스 요청을 위한 프로그래밍 인터페이스. 응용 프로그램은 시스템 호출을 통해 커널에 서비스를 요청한다. 운영체제가 지원하는 라이브러리 함수라고 보면 이해하기 쉽다. 주요 시스템 호출 파일: open(), close(), read(), write(), dup(), lseek() 등 프로세스: fork(), exec(), exit(), wait(), getpid(), getppid() 등 메모리: malloc(), calloc(), free() 등 시그널: signal(), alarm(), kill(), sleep() 등 프로세스 간 통신: pipe(), socket() 등 4.2 파일 파일 입출력 파일 열고->읽기/쓰기 등->파일닫기 파일 열.. 2022. 10. 30.
gdb 디버거 gdb 주요기능 정지점(breakpoint)설정 한 줄씩 실행 변수 접근 및 수정 함수 탐색 추적 gdb를 사용하기 위해 컴파일 시 -g옵션을 사용해야 함. $ gcc -g -o longest longest.c gdb 실행 $ gdb [실행파일] (소스 파일이 아닌 ./a.out 같은 실행파일 이어야함!) gdb 기능 소스보기: l(list) b [n]: n번 줄에 정지점을 설정 p [변수명]: 해당 변수 값 프린트 run : 현재의 인수를 사용하여 프로그램을 실행 run : 새로운 를 가지고 프로그램을 실행 continue: 현재 위치에서 프로그램을 계속 실행(약자 c) n: 한 줄씩 실행시킴(next) step: 한 줄씩 실행시킴. 함수 포함시 함수 내부로 들어가서 한 줄씩 실행함 break : 라인.. 2022. 10. 14.
make 시스템 대규모 프로그램의 경우에는 헤더, 소스파일, 목적파일, 실행파일의 모든 관계를 기억하고 체계적으로 관리하는것이 필요함. make 시스템을 이용하여 효과적으로 작업. Makefile의 구성 형식 대상리스트: 의존리스트 (tab)명령리스트 예시) main: main.o copy.o gcc -o main main.o copy.o main.o: main.c copy.h gcc -c main.c copy.o: copy.c copy.h gcc -c copy.c make 실행 $ make 혹은 $ make main 여기서부터 다시 씀 파일이 많아지면 컴파일 하는데 시간도 오래걸리고, 파일 관리하기가 힘들어지는데, make 시스템을 이용하면 파일관리, 컴파일을 효과적으로 할 수 있다. $ vi Makefile 해서 m.. 2022. 10. 11.
3장 - C프로그래밍 환경 문서 편집: vi편집기 vi의 동작모드 명령모드: (ESC,ENTER) 커서이동,페이지이동,글자삭제,줄 삭제 등 입력모드: i,I,a,A,o,O 마지막행 모드: (/,?,:) 검색, 저장, 바꾸기,줄 이동 등 저장 및 종료명령 :w [파일명] : 저장, 파일명을 지정할 시 지정한 파일명으로 저장 :q! 저장하지 않고 종료 :wq! 저장하고 종료 ZZ 저장하고 종료 내용 삭제 및 취소 x 문자삭제 D 커서 위치부터 줄 끝까지 삭제 u 방금 수행한 명령 취소 dd 현재 줄 잘라내기 복사, 잘라내기, 붙이기 yy 현재 행 복사 p 붙여넣기 범위지정 방법 % 모든 줄 1,$ 첫 줄에서 마지막 줄까지 .,$ 현재 줄에서 마지막 줄까지 10,20 뭐 요런식.. 검색 기능 /문자열 : 현재 위치부터 파일의 아래 방향.. 2022. 10. 7.
2장 - 리눅스 사용 기본 명령어 date hostname: 호스트 이름 확인 uname: 운영체제 확인 whoami: 사용자 정보 확인 whatis 명령어 : 명렁어에 대한 간단한 설명 2.2 파일 및 디렉토리 파일의 종류 일반 파일 디렉토리 파일: 디렉토리 파일의 내용은 디렉토리가 가지고있는 파일,디렉토리인가봄 특수 파일: 물리적인 장치에 대한 내부적인 표현(프린터 출력 -> 프린터 파일에 쓰기 연산 수행) 디렉토리 계층구조 리눅스 디렉토리는 루트로부터 시작, Tree형태의 계층구조를 이룬다. 디렉토리 관련 명령 pwd cd which 명령어: 명령어의 절대경로를 보여준다. mkdir 디렉토리 mkdir -p 디렉토리: 필요한 경우 중간 디렉토리를 자동으로 만들어준다. mkdir ~p ~/dest/dir1 => dest디.. 2022. 10. 7.
1장 - 유닉스 리눅스 소개 유닉스 운영체제 구조 하드웨어)커널)쉘)유틸리티 파일시스템) 커널 하드웨어를 운영 관리. 프로세스, 메모리, 파일, 주변장치, 통신 등을 관리하는 서비스 제공 -프로세스 관리: 여러 프로그램이 실행될 수 있는 환경 제공. CPU 스케줄링을 통해 여러 프로세스들이 동시에 수행되도록 함 -메모리 관리: 메인 메모리가 효과적으로 사용될 수 있도록 관리 -주변장치 관리: 모니터,키보드,마우스와 같은 장치를 사용할 수 있도록 관리 쉘 -사용자와 커널 사이의 중간자 역할 담당(사용자 인터페이스) -명령어 처리: 사용자가 입력한 명령을 이해하여 실행. (명령어 해석기) 쉘의 종류: 본쉘(sh), C쉘(csh), 콘쉘(ksh), 배시쉘(bash) 파일 시스템 및 유틸리티 유틸리티/명령어: 사용자가 사용하는 여러 응용 .. 2022. 10. 7.
리눅스 여러가지 명령어들 공부 필기용이므로 정확하지 않을 수 있음 date : 날짜 출력 uname [옵션]: 운영체제 확인 -v: 커널 버전 확인 ls [옵션]:디렉토리 내부의 파일 목록 확인 -a : 숨겨진 파일까지 모두 표시 -s : 파일의 크기를 K바이트 단위로 출력 -l : 파일의 상세 정보 출력 -F: 파일의 종류를 표시(*:실행파일, /:디렉토리, @:심볼릭 링크) -R: 모든 하위 디렉토리들을 리스트함 mkdir 디렉토리+ :디렉토리 생성 -p : 중간 디렉토리 자동 생성 옵션 rmdir 디렉토리+ :디렉토리 삭제. 빈 디렉토리만 삭제가능) cat 파일명+ : 파일 내용 출력 출력 재지정(화면으로 출력 대신 파일에 저장할 수도있음)을 통해 파일 내용을 합치거나 이동시킬수도. cat text1 text2 > text.. 2022. 9. 18.
728x90
반응형