Quick Sort
·
CS/Data Structure
Quick Sort Definition int qsort(int a[], int n){ int d; int p = a[0]; //Rearrange a[] so that // a[d] == p // a[0], a[1], ..., a[d-1] p qsort(a,d); qsort(a+d+1, n-d-1); return ;}a[0]에 있던 값이 p이고, p가 d에 가도록 rearrange한다.* rearrange란 ? 값이 없어지지 않고 그대로 유지되지만 위치만 바뀐다a[0]부터, a[d-1]까지 있는 얘들은 모두 p보다 작음a[d+1]부터, a[n-1]까지는 모두 p보다 큼> O(n) 시간 안에 해결함 Q) 어떻게 O(n)시간에 해결하는가?A)1. p보다 큰건 +라..
[Exploit] Return to Library
·
Hacking/Pwnable
Library자주 사용하는 소스코드를 미리 작성하여 프로그래머가 원할 때 빠르게 사용할 수 있게 가공된 형태컴파일 시간 단축소스 코드를 쉽게 사용 가능소스 코드의 일부를 보호 및 비공개 가능PLT & GOTPLT (procedure linkage table) : 외부 라이브러리에서 함수가 plt에 매핑되어 있다.GOT (golbal offset table) : 함수의 주소를 담고 있는 테이블로 plt가 got를 참조한다.PLT와 GOT에 대한 자세한 설명 : https://m-in-zu.tistory.com/77 Static Link vs Dynamic LinkCompile | 컴파일컴파일은 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 변환하는 작업즉, 바이너리 형태로..
Static Link vs Dynamic Link
·
CS/Computer Architecture
Compile | 컴파일컴파일은 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 변환하는 작업즉, 바이너리 형태로 변환하는 작업이다. (기계어)Pre-Processing : 전처리기 (Pre-processor)을 통해 소스 파일을 수정된 소스 파일 (전처리된 소스 파일)로 변환Compilation : 컴파일러 (Compiler)을 통해 수정된 소스 파일을 어셈블리 파일로 변환Assembly : 어셈블러 (Assembler)을 통해 어셈블리어 파일을 오브젝트 파일로 변환 - 오브젝트 파일부터 바이너리 형태Linking : 링커 (Linker)을 통해 오브젝트 파일들과 라이브러리, 헤더 파일들을 하나로 묶어 실행 파일로 변환이때 Linking 과정에서 Static Linkin..
HALTING Problem
·
CS/Data Structure
문제프로그램 M과 입력 X가 있을 때, M에 입력 X를 주고 수행시키면 종료할 것인가? M은 그냥 어떠한 프로그램 X는 어떠한 문자열 ex) abcabadM과 X가 모두 문자열이라고 가정함 명확한 두 가지 경우가 존재함1. 멈추는 것을 알 수 있는 경우 * 안 읽고 멈추는 것도 멈추는 것임 2. 멈추지 않는 것을 알 수 있는 경우 ex) 문자열을 입력받고 또 다음 문자열을 위해 기다리는 행위 등 HALTING Problem은 어떤 프로그램이 종료하지 않는지를 돌려보기 전에 알아야한다.Q. 돌려보기 전에 알아야하는 이유는 뭘까?A. 돌려봐서 끝난다면 끝나는 것을 알 수 있지만, 안 끝나고 있다면 "언젠가는" 끝난다는 것을 말할 수 있어야함ex) 10시간을 기다렸기에 끝나지 않을지, 10시간을 기다렸지만 언..
[Mitigation] ASLR
·
Hacking/Pwnable
Definition | 정의Address Space Layout Randomization바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 기법 커널에서 지원하는 보호기법으로, 운영체제마다 ASLR이 구현되어 있는 방식이 다르다리눅스를 기반으로 설명할 예정ASLR 확인하기명령어cat /proc/sys/kernel/randomize_va_space0 : No ASLR1 : Conservative Randomization - Stack, Library, vdso등 2 : Conservative Randomization + brk : brk로 할당한 영역까지checksec리눅스의 경우, checksec로 확인할 수 있음대부분의 보호 기법은 checksec로 확인 가능하다 (win..
[Mitigation] NX
·
Hacking/Pwnable
Definition | 정의No-eXecute의 약자로, 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호기법 코드 영역에 쓰기 권한이 있으면 공격자가 코드르 수정하여 원하는 코드가 실행되게 할 수 있음스택, 데이터1 영역에 실행권한이 있으면 스택에 쉘 코드를 넣어 코드가 실행될 수 있음이러한 상황을 막기 위해 NX가 적용됨 보호기법들마다, 적용되는 단계가 다르다NX bit의 경우 CPU에서 지원해줌NX 확인하기gdb의 vmmappwndbg> vmmapLEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA Start End Perm Size Offset File 0x40000..
[Pwnable] Return to Shellcode
·
Hacking/Write Up
문제 : https://dreamhack.io/wargame/challenges/352/ Return to ShellcodeDescription Exploit Tech: Return to Shellcode에서 실습하는 문제입니다.dreamhack.ioEnvironment Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX unknown - GNU_STACK missing PIE: PIE enabled Stack: Executable RWX: Has RWX segmentsRELRO, Canary를 확인할 수 있음또한, stack이 현재 executab..
[Mitigation] Stack Canary
·
Hacking/Pwnable
Definition | 정의스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하여 함수의 에필로그에서 해당 값의 변조를 확인하는 보호기법만약, 스택 카나리의 값이 변조되었다면 프로세스는 강제 종료됨 스택 버퍼오버플로우로 반환 주소를 덮으면서, 스택 카나리의 값을 덮는 것을 피할 수 없음→ 에필로그에서 변조가 확인되며 해커가 실행 흐름을 가져올 수 없음 카나리를 잘못 덮어쓰면 stack smashing detected라는 경고와 함께 종료된다 카나리 정적 분석스택 카나리를 만드는 과정이 프롤로그에, 변조를 확인하는 과정이 에필로그에 추가됨프롤로그mov rax,QWORD PTR fs:0x28mov QWORD PTR [rbp-0x8],raxxor eax,eaxlea rax,[rbp-0x10]..
함수의 프롤로그 & 에필로그
·
CS/Computer Architecture
.text:00401000 55 push ebp.text:00401001 8B EC mov ebp, esp.text:00401003 68 F8 20 40 00 push offset Buffer ; "Hello World :)".text:00401008 FF 15 B0 20 40 00 call ds:__imp__puts.text:0040100E 83 C4 04 add esp, 4.text:00401011 FF ..
Register
·
CS/Computer Architecture
General-Purpose register여러가지 목적이나 용도로 사용하는 레지스터프로그래머가 자유롭게 조작 할 수 있음일종의 변수라고 생각할 수 있음인텔의 공식 문서에 따르면 32비트의 시스템의 경우 8개가 존재인텔의 공식 문서에 따르면 64비트의 시스템의 경우 16개가 존재용도나 목적이 정해져있지 않음 (그렇지만 일반적으로 어떠할 때 사용한다는 것은 존재함)* RAX, RBX, RCX, RDX 2byte 중 상위 1byte에 접근할 수 있음더보기[ 범용 레지스터의 용도/목적 ] 실질적으로 정해져있는 것은 아니지만 주로 사용함EAX : 피연산자와 연산 결과의 저장소EBX : data segment 안의 데이터를 가리키는 포인터ECX : 문자열 처리나 루프를 위한 카운터EDX : I/O 포인터ESI :..