일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 이진 탐색
- 스위핑 알고리즘
- 분할 정복
- RTL
- 브루트 포스
- ROP
- syscall
- 투 포인터
- heap
- BOF
- 문자열 처리
- 이분 탐색
- 에라토스테네스의 체
- 이진트리
- 백트래킹
- tcache
- 연결리스트
- off by one
- OOB
- BFS
- fsb
- House of Orange
- 큐
- 포맷스트링버그
- DFS
- 다이나믹 프로그래밍
- 완전 탐색
- 동적 계획법
- 수학
- 스택
- Today
- Total
목록분류 전체보기 (218)
SDJ( 수돈재 아님 ㅎ )
https://www.acmicpc.net/problem/17952 17952번: 과제는 끝나지 않아! 성애는 이번 학기에 전공을 정말 많이 듣는다. 이로 인해 거의 매일을 과제를 하면서 보내고 있다. 그런데도 과제가 줄어들 기미가 보이지 않는데, 바로 분단위로 과제가 추가되고 있기 때문이다. 다행히 과제 제출 기한은 학기가 끝날 때까지이다. 너무나도 많은 과제를 하다가 미쳐버린 성애는 아래와 같은 규칙으로 과제를 해 나가고 있다. 과제는 가장 최근에 나온 순서대로 한다. 또한 과제를 받으면 바로 시작한다. 과제를 하던 도중 새로운 과제가 나온다면, 하던 www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26..
https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include #include #i..
https://www.acmicpc.net/problem/17827 17827번: 달팽이 리스트 첫째 줄에 노드의 개수 N(2 ≤ N ≤ 200,000), 질문의 횟수 M(1 ≤ M ≤ 200,000), N번 노드가 가리키는 노드의 번호 V(2 ≤ V ≤ N)가 공백으로 구분되어 주어진다. 둘째 줄에 N개의 정수 C1, C2, …, CN이 공백으로 구분되어 주어진다. 이때 Ci는 i번 노드에 저장된 값을 뜻한다. (1 ≤ Ci ≤ 1,000,000) 셋째 줄부터 M개의 줄에 걸쳐 각 질문에 해당하는 K(1 ≤ K ≤ 109)가 주어진다. www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ..
https://www.acmicpc.net/problem/17608 17608번: 막대기 아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 6, 9, 7, 6, 4, 6 이다. 일렬로 세워진 막대기를 오른쪽에서 보면 보이는 막대기가 있고 보이지 않는 막대기가 있다. 즉, 지금 보이는 막대기보다 뒤에 있고 높이가 높은 것이 보이게 된다. 예를 들어, 그림과 같은 경우엔 3개(6번, 3번, 2번)의 막대기가 www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #..
보호되어 있는 글입니다.
한양대학교 Open CTF이길래 재미삼아 도전해 봤다. 아름답다. 제공해준 libc파일이 2.27이라서 우분투 18.04에서 풀었다. main함수는 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 int __cdecl main(int argc, const char **argv, const char **envp) { char *v3; // rdx int v5; // [rsp+8h] [rbp-118h] int buf; // [rsp+Ch] [rbp-114h] char v7; // [rsp+10h] [rb..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
오랜만에 write-up을 쓰고자 한다. 오늘은 2019 facebook ctf - otp-server인데 먼저 보호기법부터 보자. 아름답다. 그럼 바로 바이너리를 분석하러 가보자. main함수는 다음과 같이 생겼는데 하나씩 살펴보도록 하자. 1. sub_9E8 /dev/urandom에서 랜덤한 값을 꺼내온 다는 것 말고 중요한 점은 보이지 않는다. sub_9E8속에 sub_9BA를 보면 설명을 해준다. cipher( (4 byte nonce | message | 4 byte nonce) )방식이라고 한다. 2. sub_C4A ( 취약점 발생 함수 ) main함수에서 v4인자가 넘어온다. IDA에서 함수의 이름을 내 입맛 대로 바꿔버린점 주의. 여기서는 두가지로 나뉘게 되는데 1번 -> Set key와 ..
64bit에 Full RELRO, Canary, NX 활성화 되어있다. 주어진 libc가 2.27이고 tcache문제기 때문에 ubuntu 18.04로 풀었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 from pwn import * p = process('./aria-writer-v3') def choice(idx): p.sendlineafter("> ", str(idx)) def alloc(size, c..
64bit에 Partial RELRO, Canary, NX가 활성화 되어있다. 주어진 libc가 2.27이므로 tcache문제라서 Ubuntu 18.04로 풀었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 from pwn import * p = process('./aria-writer') def choice(idx): p.sendlineafter("pls > ", str(idx)) def alloc(size, content..
이번엔 PwnThybytes CTF의 babyfactory를 풀어보려고 한다. 64bit에 모든 보호기법들이 걸려있다. 사용할 수 있는 메뉴들은 다음과 같이 5가지 정도 있다. 하나씩 분석해보자. 1. create 먼저 create다. 여기서 두가지 경우를 선택할 수 있는데 하나는 Boy, 다른 하나는 Girl이다. 함수 sub_C3B의 인자를 다르게 주는 것을 볼 수 있는데 함수를 분석해보자. 1-1) sub_C3B 함수의 일부다. 인자로 넘어온 값에 따라 두가지 경우가 생긴다. a1의 값이 참일 경우에는 malloc(0x69)를 하고 read(0, *v3, 0x69)를 한다. 참이 아닐 경우에는 malloc(0x68)을 하고 read(0, *v3, 0x68)을 한다. 여기서 취약점이 하나 존재하는데 ..