전체 글

후기

2023년 제 21회 YISF - [DRAGON_HERO] 문제 풀이

c코드 //gcc -fno-stack-protector -o heap heap.c #include #include #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void clear() { printf("\e[1;1H\e[2J"); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } char *heroart = " / \\ __----~~~~~~~~~~~------___ \n" " | | . . ~~//====..

후기

2023년 제 21회 YISF - [YISF_Library] 문제 풀이

c코드 //gcc -fno-stack-protector -o stack stack.c #include #include #include #include #include #define admin 0 void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void clear() { printf("\e[1;1H\e[2J"); } void leak_libc(){ unsigned long long printf_addr = (unsigned lo..

후기

2023년 제 21회 순천향대학교 YISF 운영진 후기 및 문제 풀이

8월 11일에 YISF 예선이 시작했다. 대회 시간은 총 36시간이였으며 운영진들은 서버 컴퓨터실에 갇혀있게 되었다. 나는 pwnable 분야에서 YISF Library 와 DRAGON HERO 를 만들었다. 대회를 시작하고 나서 처음 한 두시간은 다들 많이 바빠보이셨는데 나는 생각보다 할게 없었다. 대충 놀다보니 어느정도 다들 여유로워지고 할게 없어졌다. 정말 시간이 많이 지났다고 생각했는데 3시간이 지난것을 보고 앞으로 33시간을 뭐하면서 보낼지 막막해졌다. 이런저런것을 하다보니 대회시간 절반정도가 지났다. 대회 전에는 "아무도 내 문제를 못 풀었음 좋겠다 ㅎㅎ" 라고 생각했는데 막상 DRAGON HERO를 아무도 안푸니 "내가 정말 열심히 만들었는데 아무도 안풀어주네.. " 라는 생각이 들며 조금 ..

포너블/Heap

free 소스코드 분석(libc 2.27)

libc 2.23을 기준으로 변경된 부분만 분석하겠다. https://k0n9.tistory.com/entry/free-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C-%EB%B6%84%EC%84%9Dlibc-223 libc 2.26부터는 tcache의 개념이 도입되었다. 그러니 tcache 위주로 보자. tcache에 관한 함수는 곧 따로 정리하겠다.(tcache_get 등) __libc_free //__libc_free 2.27 void __libc_free (void *mem) { mstate ar_ptr; mchunkptr p; /* chunk corresponding to mem */ void (*hook) (void *, const void *) = atomic_forced_..

포너블/Heap

malloc 소스코드 분석(libc 2.27)

libc 2.23을 기준으로 변경된 부분만 분석하겠다. https://k0n9.tistory.com/entry/malloc-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C-%EB%B6%84%EC%84%9Dlibc-223 libc 2.26부터는 tcache의 개념이 도입되었다. 그러니 tcache 위주로 보자. tcache에 관한 함수는 곧 따로 정리하겠다.(tcache_get 등) __libc_malloc 아래는 malloc함수 호출시 실행되는 코드이다. //__libc_malloc 2.27 void * __libc_malloc (size_t bytes) { mstate ar_ptr; void *victim; void *(*hook) (size_t, const void *) = atom..

포너블/Heap

free 소스코드 분석(libc 2.23)

linking과정은 https://k0n9.tistory.com/entry/heap%EC%9D%98-%EA%B0%9C%EB%85%90-4 에 나오는 그림을 참고하면 좋다. __libc_free 아래는 free함수 호출시 실행되는 코드이다. //__libc_free 2.23 void __libc_free (void *mem) { mstate ar_ptr; mchunkptr p; /* chunk corresponding to mem */ void (*hook) (void *, const void *) = atomic_forced_read (__free_hook); if (__builtin_expect (hook != NULL, 0)) { (*hook)(mem, RETURN_ADDRESS (0)); retur..

포너블/Heap

malloc 소스코드 분석(libc 2.23)

linking과정은 https://k0n9.tistory.com/entry/heap%EC%9D%98-%EA%B0%9C%EB%85%90-4 에 나오는 그림을 참고하면 좋다. __libc_malloc 아래는 malloc함수 호출시 실행되는 코드이다. //__libc_malloc 2.23 void * __libc_malloc (size_t bytes) { mstate ar_ptr; void *victim; void *(*hook) (size_t, const void *) = atomic_forced_read (__malloc_hook); if (__builtin_expect (hook != NULL, 0)) return (*hook)(bytes, RETURN_ADDRESS (0)); arena_get (ar_..

포너블/Heap

heap의 개념-(4)

원래는 arena에 대한 설명만 하려 했는데 이 부분이 빠진 것 같아서 끼워넣기를 했다...heap 영역이 할당되는 과정기본적으로 malloc 등의 함수를 사용하지 않아도 132KB 크기의 initial heap이 존재한다. 그리고 할당 가능한 요구가 들어오면 heap segment를 확장한다. 여기서 확장하는 것을 sbrk()라고 한다.start_brk : 프로그램 초기 heap 주소를 나타내는 변수break location : heap의 끝 주소brk() : 프로세스의 heap 끝 주소를 설정하는데 사용된다. 프로세스가 런타임 중에 메모리를 필요로 할 때마다 break location을 조정하여 힙의 크기를 증가시키거나 감소시킨다. sbrk() : brk와 비슷한 역할을 하는데 brk와 차이점으로는 ..

K0n9
K0n9.log