Union Find
·
CS/Data Structure
합집합 찾기Minimum Spanning TreeGiven a Graph, find Subset of Edges so that a Connected Graph results with Minimum sum of edge costsWeighted (비용이 있는)그래프연결된 그래프가 주어지고 edge의 일부를 골라서 그 edge로 갔을 때 connected이고 edge의 최소 비용이면 tree ▶ tree connected Acyclic Graph (연결되어 있고 사이클이 없는 그래프) 만약 사이클이 있다면 한 edge를 버려도 됨 - 연결되어있으며 비용을 줄일 수 있기 때문임 (사이클이면 minimum이 아님) Kruskal AlgorithmKeep adding EdgeFrom smaller weights ..
Tree Traversal & Parsing
·
CS/Data Structure
tree에는 단순한 1차원 데이터가 아닌 복잡한 구조를 넣을 수도 있음 ex)수식Traversal트리 전체를 돌아다니면서 전체 구조를 파악함Traversal means to visit all nodes in some ordervisit does not mean being at a node 방문한다는 것은 노드에 있다는 것이 아니라visit means doing something at a node 어떤 작업을 한다는 것Traverse(Node *D){ if(D == NULL) return; Visit(D); Traverse(D->Left); Visit(D); Traverse(D->Right); Visit(D);} 노드 D에는 세번 위치함 → 맨 처음 방문 / 왼쪽에 갔다 오는 경우 / 오른쪽에 갔다가 오는..
Priority Queue
·
CS/Data Structure
Queue but items in it have prioritiesSimplest of Priorityno change of priority 우선순위가 바뀌지 않음highest proirity comes out first 가장 높은 우선순위가 제일 먼저 나옴 (작은 값)Possible Array ImplementationsSorting → Delete는 빠르지만, insert의 경우 들어오면 하나씩 밀어줘야함Unsorting → insert는 빠르지만, delete할 때 우선순위를 찾아야함Binary Tree ImplementationFind Minimum in the Trees : go down left until you cannot 맨 왼쪽 아래가 첫번째 우선순위임* AVL, 2-3, 2-3-4 or..
AVL Tree Variation(2-3 Tree, 2-3-4 Tree, Red-Black Tree, skip list)
·
CS/Data Structure
2-3 TreeDefinitionEach Node has 2 or 3 Children, Not allowed to have a single child모든 노드는 2개 혹은 3개의 자식 노드를 가진다. 한개의 자식 노드를 허용하지 않음All leaves at the same level 모든 leaf는 같은 레벨을 가짐. 즉, 루트에서부터 leaf까지의 거리가 항상 같음N개의 key가 있다면, O(log N)이다 ex) 만약, 다 자식 노드가 2개씩 있다면, 높이가 3일때 \(2^3 -1\)개       자식노드가 3개씩 있다면 최대 \(\frac{3^3-1}{3-1}\)2 트리일 때는 안됐던 (AVL) 모든 트리의 높이가 똑같이 유지할 수 있도록 할 수 있음2 트리일 때는 1차이까지는 허용하여 주어야 하는..
AVL Tree
·
CS/Data Structure
BST : 최악의 경우는 여전히 좋지 않음 -> AVL Tree로 이를 해결하고자 함같은 데이터를 가지고 있어도 다른 모양의 트리가 나올 수 있음오른쪽 경우가 생기는 것을 막아보자AVL Tree IdeaRoot가 어떤 수인지에 따라서, 왼쪽과 오른쪽의 균형이 맞지 않을 수 있음 양쪽의 노드의 개수가 비슷한 것을 선호 : 균형잡힌 트리→ :  균형 잡힌 트리를 만들기 위해 root의 숫자를 바꿔주고, 트리의 모양을 바꿔줌Root 뿐만 아니라 서브 트리의 root에서도 보정이 일어날 수 있음 AVL Tree Definition기본 BST 정의에 추가되는 것 Each Node has Two Labels : L & R - 각각의 서브트리의 높이Condition : |L - R| → 모든 노드에서 양쪽 서브트리..
[ Domato ] 사용법
·
Hacking/Window
https://github.com/googleprojectzero/domato GitHub - googleprojectzero/domato: DOM fuzzerDOM fuzzer. Contribute to googleprojectzero/domato development by creating an account on GitHub.github.com 문법 퍼징문맥 자유 문법(Context-Free Grammar, CFG)을 사용하여 테스트 데이터를 자동으로 생성하고, 이를 통해 소프트웨어의 결함을 찾아내는 기법 대상으로 하는 것domainprograminputwhat needs to be tested문법 퍼징의 과정Grammer Definitionspecify a languageExpansion rule ..
PE(Portable Executable) file format
·
Hacking/Window
Definition | 정의윈도우 운영체제에서 사용되는 실행 파일 형식을 의미함 ex) exe 파일PE format : 윈도우 로더가 실행 가능한 코더를 관리하는데 필요한 정보를 캡슐화한 데이터 구조체Portable Executable File Format : 옮겨지더라도 파일이 실행가능하도록 만들어진 포맷→ 프로그램을 빌드할 때 파일 실행시 필요한 정보들을 PE헤더에 명시해주곤 함 종류실행계열 : exe, scr라이브러리 계열 : DLL, OCX, CPL, DRV드라이버 계열 : SYS, VSD오브젝트 계열 : OBJ PE파일의 구조 Dos Headere_magic값 : 해당 파일이 PE 파일인지 아닌지 확인해주는 영역 →시작 부분이 4D 5A여야함--> Dos Signature 값이 존재함[IMAGE..
[Fuzzing] WinAFL을 이용한 개념정리
·
Hacking/Window
Definition | 정의Fuzz testing or fuzzing is an automated software testing method that injects invalid, malformed, or unexpected inputs into a system to reveal software defects and vulnerabilities. A fuzzing tool injects these inputs into the system and then monitors for exceptions such as crashes or information leakage. Put more simply, fuzzing introduces unexpected inputs into a system and watche..
Limited Direct Execution
·
CS/OS
Direct Execution응용프로그램이 실행할 때 모든 권한을 다 주는 것문제점 : 프로세스가 여러개가 돌면 불가능함OSProgram[프로그램이 실행되기 위한 기본 환경 세팅]Create entry for process list - entry = PCB프로세스를 제어하기 위해 PCB를 생성한 후 process list에 넣기Allocate memory for program프로세스가 사용할 메모리 영역 할당 Load program into memory 실행을 위한 instructions 로딩( 메모리 적재)complie 한 exe 파일은 storage에 저장되어 있기 때문임Set up stack with argc/argv 응용 프로그램이 실행되기 위한 user stack만들기 (argc/argv를 넣어..
Process
·
CS/OS
Program vs ProcessProgram : 기계어 instructions + 디스크의 static data의 집합컴파일된 exe파일기계어 instruction : cpu가 이해하는 언어 static data : 컴파일 될 때 해당 메모리 영역이 유지되며, 변경된 값이 유지되고, 어디서든 접근 가능 ex) global, staticexe파일이 여러번 실행 >> process 여러개 생성  Process : 실행되고 있는 프로그램메모리 : instructions (메모리에 적재 - code) & data (프로그램 실행에 따라 변경됨)레지스터 : program counter (cpu가 실행해야하는 인스트럭션 위치를 가리키는 레지스터 ) & stack pointer 등오픈한 파일의 list와 상태정보 ..