분류 전체보기
이진 탐색 트리
이진 탐색 트리
2021.07.17개요 얼마 전 백준에서 집합 자료형을 구현하는 문제를 보았습니다. 직접 구현하라고 하면 가물가물하면서 `std::set` 같은 컨테이너를 쓰는 것이 양심에 찔려서, 자료구조 공부도 다시 시작했습니다. 오늘은 가장 먼저 이진 탐색 트리(Binary Search Tree)를 살펴봅니다. 이진 탐색 트리란 정의와 성질 이진 탐색 트리는 이진 트리면서, 다음과 같은 재귀적인 성질을 가진 트리입니다. 이진 탐색 트리의 성질 노드를 기준으로 왼쪽 트리에 있는 노드들은 더 작은 키(key)를 가진다. 오른쪽 트리에 있는 노드들은 더 큰 키를 가진다. 성질에서 알 수 있듯, 이진 탐색 트리는 키-값(key-value)의 데이터를 저장하는 자료구조입니다. 이 글에서는 편의상 키와 값은 모두 정수이며, 두 값이 같다고 가..
[백준 12015] 이진 탐색으로 LIS 최적화하기
[백준 12015] 이진 탐색으로 LIS 최적화하기
2021.07.16문제 개요 백준 12015번 문제입니다. LIS(Longest Increasing Sequence)의 길이를 $O(n\log n)$ 시간에 구해야 하는 문제로, 동적 계획법을 사용한 $O(n^2)$ 풀이와는 다른 방법이 필요합니다. 이진 탐색을 사용하여, LIS가 될 수 있는 후보군을 계속 갱신하는 방식의 풀이를 소개합니다. 문제 분석 새로운 원소 조회 동적 계획법 풀이와 같이 앞에서부터 원소를 하나씩 조회합니다. 지금까지 조회한 원소가 2와 5라고 합시다. LIS는 `2, 5` 일 것입니다. 이제 다음 원소가 3이라고 합시다. 가능한 LIS는 `2, 3` 과 `2, 5` 의 두 가지입니다. 그런데 마지막 원소가 작은 편이 뒤에 나올 원소들을 LIS에 넣기에 더욱 유리하므로, `2, 3` 을 선택하기로 ..
Docker를 사용한 워게임/CTF 환경 구성
Docker를 사용한 워게임/CTF 환경 구성
2021.03.06Docker란? Docker는 LXC라는 Linux 커널의 컨테이너 기능을 쉽게 사용할 수 있도록 만들어진 기술로, Docker를 사용하면 마치 가상머신처럼 독립된 프로세스 공간, 네트워크 등을 가진 시스템에서 애플리케이션을 실행할 수 있습니다. 가상머신보다는 상대적으로 가볍고, 배포와 관리가 간편하다는 장점이 있습니다. 오늘은 CTF/워게임 실습 환경을 Docker로 구성하는 방법을 소개합니다. 직접 작성한 Dockerfile을 기반으로 하며, 사용 중인 운영체제에 Docker와 Docker Compose가 설치되어 있어야 합니다. Docker/Docker Compose 설치 Docker 설치 방법은 운영체제에 따라 다릅니다. Windows/macOS는 Docker Desktop 프로그램을 공식 홈페이..
IDA Pro Lumina 프리서버 사용해보기
IDA Pro Lumina 프리서버 사용해보기
2021.02.27Lumina 서버 IDA Pro 디컴파일러의 Lumina 서버 기능은 단순하지만 매우 강력한 기능입니다. Hex Rays 사에서 관리하는 Lumina 서버에는 여러 알려진 함수들의 시그니처(함수 이름, 반환 타입, 인자 정보 등)가 저장되어 있고, 사용자는 자신이 알고 있는 시그니처를 공유하거나 모르는 함수에 대한 정보를 공유받을 수 있습니다. 즉, strip된 바이너리의 분석이 상당히 용이해지는 것입니다. Hex Rays 사에서는 Lumina 서버와 관련된 기술을 공개한 적이 없고, 개인이 서버를 운영할 수 있는 기능 등을 제공하지 않습니다. 하지만 서버와의 통신 프로토콜을 분석하여 구축된 프리서버가 있는데, 바로 Lumen입니다. 오늘은 IDA Pro에서 이 Lumen 서버를 사용하는 방법과 짧은 사..
[Dreamhack S1 Round #5] linux_forest
[Dreamhack S1 Round #5] linux_forest
2021.02.26문제 개요 64비트 Linux 바이너리 public/main과 환경 구성을 위한 Dockerfile이 주어집니다. 동적으로 링킹되어 있으며 심볼은 없습니다(stripped). Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2/25/2021 1:43 PM coreutils d----- 2/25/2021 10:01 AM private d----- 2/26/2021 1:01 PM public -a---- 2/22/2021 5:34 AM 778 Dockerfile docker build 커맨드로 Docker 이미지를 생성할 수 있습니다. docker build --tag "linux_forest:0.1" . docker run 커맨드로..
[DarkCON 2021] Warmup
[DarkCON 2021] Warmup
2021.02.22문제 개요 64비트 Linux 바이너리 a.out과 라이브러리(Ubuntu GLIBC 2.27-3ubuntu1.2) 파일 libc.so.6이 주어집니다. 동적으로 링킹되어 있으며 심볼은 없고(stripped), 보호 기법은 Canary와 NX가 적용되어 있습니다. [*] '/home/user/study/ctf/dark21/pwn/warmup/a.out' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000) 바이너리를 실행하면 3개의 메뉴가 존재하며, 추가적으로 라이브러리 주소를 하나 제공하고 있습니다. 문제 분석 main 함수를 보면 다음과 같습니다. __int64 __fastc..
[DarkCON 2021] Easy-ROP
[DarkCON 2021] Easy-ROP
2021.02.22문제 개요 64비트 Linux 바이너리 easy-rop가 주어집니다. 특이하게 정적으로 링킹되어 있으며, 보호 기법은 Canary와 NX가 적용되어 있습니다. [*] '/home/user/study/ctf/dark21/pwn/easy-rop/easy-rop' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000) 문제 분석 main 함수를 보면 다음과 같습니다. void __fastcall main() { int v0; // edx int v1; // ecx int v2; // er8 int v3; // er9 char buf[64]; // [rsp+0h] [rbp-40h] BYR..
VMware Workstation 가상머신 고정 IP 할당
VMware Workstation 가상머신 고정 IP 할당
2021.02.22Network Address Translation (NAT) VMware Workstation은 가상머신을 사용하기 위해 많이 쓰이는 프로그램입니다. 보통 가상머신을 생성하면 네트워크가 기본적으로 NAT(Network Address Translation) 모드로 작동하는데, NAT는 아래 그림처럼 가상 스위치를 이용해 내 기기(host)를 가상머신의 게이트웨이처럼 사용하는 형태입니다. 이 때 가상머신에는 VMware의 자체 DHCP 서버가 사설 IP 주소를 임대해 주는데, 이 IP 주소가 종종 일정 범위 내에서 바뀌면서 SSH 접속 등을 할 때 사소한 불편함을 주고는 합니다. 이럴 때 유용한 가상머신에 고정 IP를 부여하는 방법을 정리합니다. 고정 IP 할당하기 먼저 고정 IP를 할당하고 싶은 가상머신의..
Zsh, Oh My Zsh 설치하기
Zsh, Oh My Zsh 설치하기
2020.08.26매번 Linux 가상머신을 생성할 때마다 환경설정을 위해 이것저것 찾아보는 것이 귀찮아져 블로그에 과정을 남겨두려 합니다. 먼저 기본적인 zsh 설치 방법입니다. What is Zsh? Zsh(Z-Shell)은 유닉스 셸의 한 종류로, 기존 셸의 기능을 유지한 채 강력하려 유연한 셸 스크립트를 작성할 수 있다고 합니다. Oh My Zsh는 오픈 소스 Zsh 확장 프레임워크로, 다양한 테마와 여러 가지 프로그램과 연동 가능한 플러그인을 설치할 수 있어 선호받고 있습니다. Installation Zsh와 Oh My Zsh는 macOS와 Linux 환경에서 모두 사용할 수 있습니다. 설치를 위해 git과 curl이 필요하며(Linux는 APT로 설치하면 됩니다) macOS는 Homebrew 패키지 관리자가 필..
KITRI BoB 9기 최종합격 / 서류, 면접 후기 (2)
KITRI BoB 9기 최종합격 / 서류, 면접 후기 (2)
2020.06.25이전 글에서 이어지는 KITRI BoB 합격 후기입니다. 이번 글에서는 제가 지원한 취약점분석 트랙의 필기, 면접 전형 경험을 공유해보려고 합니다. 필기 전형 올해 처음 도입된 충격과 공포의 CTF형 필기 전형입니다. 기존 필기와 유사하다는 몇 문제의 객관식을 제외하면, 실제 바이너리, 파일을 주고 플래그를 찾아 풀이 코드와 함께 업로드해야 합니다. 시스템 해킹, 웹 해킹, 역공학(리버싱), 암호에 이어 알고리즘 문제까지 등장했습니다. 정말 솔직히 말해서, 저는 너무 당황해서 제일 쉬운 한 문제 빼고는 전부 시간 내에 풀지 못했습니다. 다음날 쓰라린 멘탈을 붙잡고 2개를 제외한 나머지 모든 문제를 복기한 결과, 이런 결론을 얻었습니다. 생각보다 문제는 어렵지 않았습니다. 그런데 사람을 겁나게 하는 구석이..
KITRI BoB 9기 최종합격 / 서류, 면접 후기 (1)
KITRI BoB 9기 최종합격 / 서류, 면접 후기 (1)
2020.06.25감사하게도 적지 않은 분들의 큰 도움으로 KITRI BoB 9기에 최종합격할 수 있었습니다. 이번 글에서는 그간 준비 과정과 서류, 면접 경험을 공유하여 다른 분들께 많은 도움이 되었으면 합니다. 준비 과정 공부는 고등학생 때 웹 해킹을 잠깐, 대학 진학 후 시스템 해킹을 일년 반 정도 공부했습니다. 공부한 내용을 주로 동아리 스터디에서 나누었는데, 동아리 활동을 하면서 경험 부분에서 할 이야기가 많아졌습니다. 주로 워게임 문제를 풀면서 공부한 내용을 복습했습니다. pwnable.kr을 절반, pwnable.xyz는 7문제 정도 제외하고 모두 풀었습니다. 서류 전형 자기소개서는 7개 문항에 각 1,000자씩이었고, 작년과 동일했다고 합니다. 자기소개 해킹을 접하고 공부하게 된 계기, 대학교 1학년~2학년..
About me
About me
2020.06.25송주현 (juhyun167) https://github.com/juhyun167 juhyun167 - Overview Department of Computer Science, Korea University. juhyun167 has 6 repositories available. Follow their code on GitHub. github.com 교육 고려대학교 컴퓨터학과, 정보보호융합전공 재학 중 (2018.3~) GPA 4.11 / 4.5 (5학기) 군 휴학 예정 (2021.8~2023.3) 차세대 보안리더 양성 프로그램(KITRI BoB) 9기 취약점분석트랙 (2020.7~2021.3) 최고인재 (BEST 10) 선정 기호실행과 Intel PT를 이용한 윈도우 장치 드라이버 퍼징 프로젝트 수행 서..