분류 전체보기 110

[3주차 TIL] KnockOn Bootcamp Pre.Rev : 아키텍쳐

개요아키텍쳐를 본격적으로 공부하기 이전에 컴퓨터는 어떻게 발전되어 왔는지 알아보자.폰 노이만의 컴퓨터 구조를 고안해내기 이전에는 애니악(ENIAC, Electronic Numerical Integrator and Computer)이라는 컴퓨터가 운용되어 있었는데, 이 애니악은 프로그램 외장 방식으로 동작되어왔다.천공 카드라는 것을 통해 데이터를 입력하고, 결과를 출력했는데, 천공카드란 OMR 마킹지와 비슷하게 생긴 카드에 구멍을 뚫어 디지털 자료를 기록하는 저장매체이다.수정소요가 있으면, 종이 테이프로 천공 카드의 구멍을 메웠던 것을 패치(Patch)라 하고, 이는 오늘날 우리가 프로그램 수정하는 것을 뜻하는 말인 패치의 유래이다.버그는 실제로 벌레가 들어가서 프로그램 오류가 나는 것이라고...폰 노이만..

STUDY 2024.12.21

[2주차 TIL] KnockOn Bootcamp Pre.Rev : 탐색 알고리즘

탐색 알고리즘탐색알고리즘이란 데이터 구조에서 특정요소를 찾거나, 조건에 맞는 요소를 검색하기 위해 사용되는 알고리즘이다.순차탐색데이터를 처음부터, 끝까지 하나씩 비교하며, 찾는 방법으로 데이터가 정렬되지 않았거나, 크기가 작을 때 유용하다.시간 복잡도최선 : O(1) (첫번째 요소가 찾고자 하는 데이터일경우)최악 : O(n) (찾고자 하는 데이터가 맨 마지막에 있어 모든 요소를 한번씩 확인해야 하는 경우)이진탐색정렬된 데이터에서 중간 값을 기준으로 검색 범위를 반씩 줄여가며, 탐색하는 것으로 데이터가 정렬되어 있을 때, 빠르게 작동한다.시간 복잡도 : O(log n)Hashing데이터를 해시 테이블에 저장하고, 키를 기반으로 직접 접근하는 것으로, 빠른 탐색이 필요한 경우 사용시간 복잡도최선 : O(1)..

STUDY 2024.12.15

[2주차 TIL] KnockOn Bootcamp Pre.Rev : 정렬 알고리즘

정렬 알고리즘버블 정렬배열의 처음부터 시작하여 인접한 두 요소를 비교두 요소가 정렬이 안되어 있다면, 서로 교환배열의 끝까지 한번 비교와 교환과정을 수행하면 가장 큰 값이 배열의 끝에 위치이 과정을 배열의 크기만큼 반복하여 정렬을 완성선택정렬배열의 첫번째 요소를 기준으로 나머지 요소들과 비교하여 가장 작은 값을 찾음가장 값이 작은 것과 첫번째 요소를 교환첫번째 요소를 제외한 나머지 배열에 대해 위 과정을 반복정렬이 완료될 때까지 이를 반복삽입정렬배열에서 두번째 요소부터 시작하여, 현재 요소를 기준으로 앞쪽에 있는 정렬된 부분과 비교현재 요소가 정렬된 부분의 요소들보다 작다면, 알맞은 위치에 삽입이 과정을 배열의 끝까지 반복하여 정렬을 완성정리구분설명장점버블정렬최악 : O(n^2)최선 : O(n)구현이 간..

STUDY 2024.12.14

[1주차 TIL] KnockOn Bootcamp Pre.Rev : 트리

트리트리란?나뭇가지처럼 노드들이 연결된 비선형적이고 계층적인 자료구조이다.부모노드와 자식노드의 관계로 노드들이 연결되며, 트리구조를 이룬다.트리의 구조구분설명예시Node트리를 구성하는 기본 원소A,B,C,D,E,F,G,H,I,JRootnode부모가 없는 최상위 루트 노드ALeafnode자식이 없는 노드H,I,J,F,GDegree(차수)하위 트리개수 / 각 노드가 지닌 가지의 수(연결된 자식 노드의 수)A의 차수 = 2계수자식 노드들 중 최대 개수2Depth(깊이)루트에서 어떤 노드에 도달하기 위해 거쳐야 하는 간선의 수H 깊이 : 3Level특정 깊이를 가지는 노드의 집합A레벨 : 0Height특정 노드에서 가장 멀리있는 리프노드까지의 간선 개수A 높이 : 3Size특정 노드가 자신을 포함한 자손 수B의..

STUDY 2024.12.09

[1주차 TIL] KnockOn Bootcamp Pre.Rev : 스택 & 큐

스택스택이란?후입선출(LIFO, Last In First Out)의 구조로 이루어진 자료구조로서, 항상 스택의 한 쪽 끝에서만 데이터를 넣고 꺼낼 수 있다.데이터를 넣는 과정을 Push, 꺼내는 과정을 Pop이라 한다.큐큐 란?선입선출(FIFO, First In First Out)의 구조로 이루어진 자료구조로서, 큐의 한쪽 끝에서는 데이터의 삽입만 가능하고, 반대쪽 끝에서는 삭제만 가능하다.데이터를 넣는 과정을 Enqueue, 꺼내는 과정을 Dequeue라고 한다.실습이번 실습 간에는 헤더파일을 이용하여 스택과 큐를 C언어로 구현했다.내용은 주요한 부분에 대해서만 설명하겠다.배열로 만든 스택#include#includeint stack[100];int top = -1;int Empty() { if ..

STUDY 2024.12.09

[1주차 TIL] KnockOn Bootcamp Pre.Rev : 연결리스트

연결리스트란연결리스트추상적 자료형인 리스트를 구현한 자료구조로서, 메모리에 저장될 때 데이터와 그 다음 데이터의 주소를 가리키는 포인터를 가진 노드가 서로 연결되어 있는 리스트이다.배열 VS 연결리스트구분배열연결리스트메모리구조연속적비연속적삽입 / 삭제높음위치탐색 : O(n)낮음위치 탐색 : O(n)삭제 : O(1) 노드 연결 끊음접근속도빠름 O(1)연속된 메모리,인덱스를 활용하여 접근느림 O(n)메모리 효율추가 공간 필요 없음.포인터 메모리 추가 필요특징고정크기, 빠른 접근가변크기, 잦은 삽입, 삭제단일연결리스트단일 연결리스트는 데이터와 다음 노드를 가리키는 포인터만 존재한다.이중연결리스트이중연결리스트는 선행 노드와 후속 노드에 대한 두개의 링크를 가지는 연결리스트로서, 양방향으로 검색이 되고 순회가 가..

STUDY 2024.12.08

[1주차 TIL] KnockOn Bootcamp Pre.Rev : 헤더파일

헤더파일이란헤더파일C언어에서 함수는 먼저 함수의 원형에 대해 선언이 되어 있어야한다.표준함수 역시 선언이 되어야하는데, 이런 표준 함수의 원형 및 관련 정보가 들어간 파일을 헤더파일이라한다.헤더파일은 끝에 .h 확장자가 붙으며, 선언시에는 앞에 #include를 사용해야 적용된다.리눅스 기준으로 헤더파일은 /usr/include 디렉터리 밑에 있다.헤더파일 VS 라이브러리그렇다면 라이브러리처럼 또는 Python 처럼 모듈과 같은 것이 아니냐? 할 수 있지만, 엄연히 차이가 있다.구분헤더파일라이브러리구성사람이 알아들을 수 있는 C언어 문법으로 작성기계어로 번역된 바이너리역할함수선언, 매크로 정의, 데이터 구조 선언함수와 변수의 선언부만 포함, 구현부는 없음.함수 구현부, 동작코드가 포함된 파일프로그램 실행..

STUDY 2024.12.02

리눅스 네트워크 및 프로세스 관련 명령어

netstat은 네트워크 상태를 보여주는 명령어로, 연결된 포트, IP 주소, 송수신 데이터량 등을 확인할 수 있다.주요 옵션netstat -a : 모든 소켓(연결된 것과 대기 중인 것)을 표시netstat -t : TCP 연결만 표시netstat -u : UDP 연결만 표시netstat -l : 현재 수신 대기(listening) 중인 포트만 표시netstat -p : 각 연결에 관련된 프로그램의 PID와 이름을 표시netstat -n : IP 주소와 포트 번호를 숫자로 표시 (호스트 이름과 서비스 이름을 해석하지 않음)netstat -r : 라우팅 테이블 표시netstat -s : 프로토콜별 통계 표시netstat -c : 실시간으로 네트워크 상태를 표시 (1초 간격으로 갱신)예시netstat -an..

STUDY 2024.11.14

vim 명령어 정리

Vim 기본 명령어Vim은 강력한 텍스트 편집기로, 효율적인 코드 편집과 관리에 유용하다. 아래는 Vim 사용에 필요한 주요 기본 명령어다.모드 전환Normal 모드: Esc 키를 누르면 Normal 모드로 돌아옴.Insert 모드: i를 누르면 입력 모드로 전환.Visual 모드: v를 눌러 Visual 모드로 전환하여 블록 선택.Command 모드: :를 눌러 명령 모드로 전환.커서 이동h : 왼쪽으로 이동j : 아래로 이동k : 위로 이동l : 오른쪽으로 이동gg : 파일의 맨 처음으로 이동G : 파일의 맨 끝으로 이동:숫자 : 특정 행으로 이동 (예: :10은 10번째 줄로 이동)편집 명령어i : 현재 커서 위치 앞에서 입력 모드I : 현재 줄의 맨 앞에서 입력 모드a : 현재 커서 위치 뒤에서 ..

STUDY 2024.11.14

[Dreamhack] basic_exploitation_001

문제오랜만에 문제 하나 심심해서 풀었다.분석NX(No-eXecute)로 메모리 상에서 코드 실행이 가능한 메모리 영역과 가능하지 않는 메모리 영역을 분리하는 보호기법이 설정되어 있다. 이에 따라서 쉘코드를 메모리 상에 넣어놓고 실행하는것은 불가능 할 것 같다.함수는 여러개가 있는데 read_flag는 뭔가 flag를 잃어주는 그런 함수인 것 같다.System함수로 cat flag하는 것 맞았다.아무래도 이걸 사용하는 것 같다.프로그램 실행코드 실행을 했을 땐 바로 입력 받는 것 외에는 별다른 건 없다.코드분석: mainpwndbg> disassemble mainDump of assembler code for function main: 0x080485cc : push ebp 0x08048..

Write-up/Wargame 2024.10.03