분류 전체보기 106

3D CAD 1차시: Fusion 360 간단한 기초 동작

경희대학교 중앙동아리 쿠러그의 3D CAD 강의를 기반으로 정리한 글입니다. Fusion 360이란?치수 기반의 3D CAD 프로그램으로기구, 기계, 건축 등 설계 및 실제 제품 제작에 적합한 프로그램이다. ※ blender: 그래픽 작업을 위한 3D 프로그램으로 캐릭터, 애니메이션, 조형물 등 비정형 형상 모델링에 적합한 프로그램이다. 0. 환경 설정Pan, Zoom, Orbit shortcuts는 특별히 사용하는 3D tool이 있는 게 아니라면, Tinkercad로 설정하는 걸 추천한다. ※ Reverse zoom direction 체크 이유: 마우스 휠 위로 올릴 때 확대, 아래로 하면 축소 등 우리가 기본적으로 아는 방식으로 사용하기 위함이다. 1. 스케치 생성 2. 화면 조작 3. 스케치 인터..

3D CAD/Fusion 360 2026.05.14

Chapter 9: Heaps, Priority Queues, and Graphs

경희대학교 박제만 교수님의 자료구조 수업을 기반으로 정리한 글입니다.HeapA heap is a binary tree that satisfies these special SHAPE and ORDER properties:Shape: Heaps' shape must be a complete binary tree. (위쪽, 왼쪽부터 채움)Order: Parents value > Child values (MAX heap)▶ Heap ExampleLargest (Smallest) Value in a Heap -> root BST와 Heap은 비슷한 듯 다르니, 구분할 수 있어야 한다.Heap: 부모 >= 자식BST: 왼쪽 서브트리 ※ MAX heap MIN heap ▶ Array Representation o..

CS/자료구조 2025.12.14

9-1. 소프트웨어 퍼징의 개념과 기술

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. 1. 기본 개념Bug소프트웨어 개발자의 실수Software "Bug" e.g., 버퍼오버플로우 퍼징은 기본적으로 버그를 자동으로 찾고 싶은 것을 말한다. 이때 말하는 버그는 런타임 버그이다.버그는 컴파일 버그와 런타임 버그가 있는데, 컴파일 버그는 소스 코드 작성 시 문법같은 거 틀렸을 때 발생하는 버그로, 애당초 이 버그로 인해 프로그램이 만들어지지도 않기에 문제가 되지 않음런타임 버그: 소프트웨어 사용하는 시점에서 문제가 되는 버그 또한, 버그는 메모리 버그, 로직 버그 등 종류가 다양한데, 퍼저가 타겟하여 찾고자 하는 버그는 메모리 버그이다. (e.g. ,BOF)물론, 고도화된 연구를 통해 로직 버그도 퍼징하는 게 존재하긴 ..

7-2. BoF Exploit 2

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. 보호 기법 3가지 (보호 옵션)1. ASLRAddress Space Layout Randomization의 약자로, 실행 파일과 관련된 공유 라이브러리, 스택, 힙이 매핑되는 메모리 영역의 주소를 랜덤으로 배치하는 것을 말한다. ('영역' 단위로 랜덤화, e.g., stack, heap, libc) ASLR이 활성화되어 있으면 7-1의 실습 2 처럼 점프할 주소를 직접 입력하는 행위는 불가능하다.주소 leak을 통해 점프할 주소를 알아와야 하는 번거로움 발생리눅스 설치시 자동으로 켜지는 보호 기법브루트 포싱을 한다고 하더라도 같은 프로세스 안에서 계속해서 브루트 포싱을 하는 게 쉽지가 않음 11~15행: main, secret ..

7-1. BoF Exploit 1

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. BoF (Buffer Overflow)사용자의 입력 값에 대한 길일 검증을 하지 않아, 프로그래머가 할당한 크기의 버퍼보다 큰 데이터를 입력받아 메모리의 다른 영역을 오염시키는 취약점이다.버퍼: 문자열을 입력받거나 특정 스택에서 공간을 할당 받는 곳 ※ 버퍼는 임시 저장 곤간이고, 스택은 그 버퍼가 놓일 수 있는 여러 장소 중 하나이다. 1. 실습 준비예제 코드 작성 gets 함수는 사용자의 입력 값에 대한 길이 제한이 없기에, 사용자는 프로그래머가 지정한 buf의 사이즈인 16 바이트를 넘어, 더 큰 입력을 입력할 수 있게 된다. -> 스택에 할당된 16 바이트를 넘어서 return address까지 바꾸거나, 또는 그 이상의 ..

8. Toyransome

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. Ransomware 소개RansomwareRansom(몸값)과 software(소프트웨어)의 합성어시스템을 잠그거나 데이터를 암호화해 사용할 수 없도록 하고 이를 인질로 금전을 요구하는 악성 프로그램신뢰할 수 없는 사이트, 스팸메일, 파일공유 사이트 등을 통해 유포됨 이렇게 특정한 경로로 피해자 PC에 접근을 한 후, 바이러스를 통해 피해자가 가지고 있는 파일들을 암호화 함 ※ 실습과 달리, 현대의 암호화는 키 없이 복호화가 불가능하다. 랜섬웨어는 위와 같이 고유한 확장자와 함께 감염된 시스템 드라이브의 파일을 암호화한다. 암호화되면서 파일이 손상되어 정상적으로 실행하거나 읽을 수 없게 되고, 해커는 복호화 키에 대해 거액의 돈을..

6. Reversing

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. Reverse Engineering (Reversing, 역공학)Reverse Engineering이란 이미 만들어진 시스템이나 장치에 대한 해체나 분석을 통해 구조, 기능, 디자인 등을 알아내는 과정이다.즉, 완성품의 설계도 없이 구조와 동작 과정을 알아내는 모든 단계를 말한다.e.g., 소스코드가 없는 바이너리 파일(컴파일 된 파일)에 대해 프로그램의 로직을 분석하고 이해함 소프트웨어 분야에서의 Reverse Engineering은 소스코드 없이, 컴파일 된 소프트웨어의 구조를 다양한 방법으로 분석하는 과정을 말하며, 메모리 덤프와 같은 바이너리 분석 결과를 바탕으로 동작 원리와 내부 구조를 파악한 후, 원래의 코드가 어떻게 ..

ForeignKey와 OneToOneField

1. ForeignKey (1:N 관계)ForeignKey는 여러 개가 하나를 참조하는 Many-to-One 관계이다.e.g., 여러 개의 Post가 하나의 User 참조e.g., 여러 개의 Order가 하나의 Customer 참조 Examplefrom django.db import modelsclass User(models.Model): username = models.CharField(max_length=100)class Post(models.Model): title = models.CharField(max_length=200) content = models.TextField() author = models.ForeignKey( User, on_delet..

Web/Django 2025.11.19

Git 필수 명령어

1. GitHub 레포지토리에서 코드 받아오기 (clone)누가 만들어둔 GitHub 프로젝트를 내 PC로 가져와서 편집하려는 경우 사용한다.git clone 레포지토리가 내 PC에 복제되고, 이 안에서 코드 수정 -> commit -> push 가능해진다. 2. 내 로컬 프로젝트를 새 GitHub 레포지토리와 연결하기내가 새 프로젝트를 로컬에서 만들었고, 그걸 GitHub에 올리고 싶을 경우 사용한다.cd git init # 깃 시작git add . # 전체 파일 스테이징git commit -m "first commit" # 첫 커밋git branch -M main # main 브랜치 세팅(기본 master일 수도..

DevOps/Git 2025.11.05

Django로 웹 개발하기: todo_list

권태형 저자님의 '백엔드를 위한 DJANGO REST FRAMEWORK with 파이썬'을 기반으로 정리한 글입니다. Chapter 3: Django로 Todo 목록 웹 서비스 만들기1. Todo 목록 웹 서비스 시작하기프로젝트 생성하기 Todo 프로젝트 설정하기settings.pyINSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'todo',]TIME_ZONE = 'Asia/Seoul' 그리고 이..

Web/Django 2025.10.29